勉強前イメージ
これ で勉強したからやってみる。
パスワードとかを格納したらいいのかね。
まず AWS Secrets Manager とは
サービス、環境、アプリケーションに接続するためのパスワードなどの機密情報を管理するためのサービスです。
詳細は こちら で見てください
さっそくやってみる
構成
EC2を立てて、RDSへ接続する簡単な構成。
接続情報はSecrets Managerを使用するって感じで設定していきたいと思います
EC2 instanceを作成
いつものことなので詳細は省きますが、
こちら を参考にしていい感じにEC2 instance作ってください。
以下のように適当にインスタンス作りました。
aws configure
コマンドで設定も終わらせます。
jqコマンドが必要なので、今のうちに入れておいてください
RDSを作成
こちらも適当にRDSを作ります。
全然違う記事なのですが作り方は一緒なので、 こちら を参考にしてRDSを作ってみてください。
以下のようにRDS(mysql)を作りました。
今回はパスワード認証にしています。
EC2からRDSに接続できました。
[root@ip-XX-XX-XX-XX ~]# mysql -u XXXXXXXXXX -p -h XXXXXXXXXXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 8.0.27 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
データも適当に入れました。
MySQL [id_user]> select * from id_user.user ;
+------+------+
| id | name |
+------+------+
| 1 | sum |
| 2 | jun |
+------+------+
2 rows in set (0.00 sec)
AWS Secrets Manager の登録
- AWS Secrets Managerへ行きます。
- シークレットを追加
設定を選択していきます。
・ シークレットのタイプ : Amazon RDS データベースの認証情報
・ ユーザ名 : RDSへの接続の時のユーザ
・ パスワード : RDSへの接続の時のパスワード
・ 暗号化キー : DefaultEcvryptionKey
・ データベース
・ database-1 を選択(今回作ったデータベースが表示される)
・ シークレットの名前 : rds_connection
・ 説明 : RDS connection
・ 自動ローテーションを設定する : しない
・ 今回は設定して見るだけなので、ローテーションはなし
- 作成できました
一旦作ってみました。
- EC2からシークレットマネージャーにアクセスしてみる
aws secretsmanager get-secret-value --secret-id [シークレットの名前]
でEC2からアクセスすることができます。
今回のシークレットの名前は rds_connection なので、
aws secretsmanager get-secret-value --secret-id rds_connection
になります。
出力結果は以下になります。
[root@ip-XX-XX-XX-XX ~]# aws secretsmanager get-secret-value --secret-id rds_connection
{
"Name": "rds_connection",
"VersionId": "XXXXXXXXXXXXXXXXXXXXXXXXXXX",
"SecretString": "{\"username\":\"XXXXXX\",\"password\":\"XXXXXXXXXXXXXXXXXXX\",\"engine\":\"mysql\",\"host\":\"XXXXXXXXXXXXXXXXXXXXXXXXap-northeast-1.rds.amazonaws.com\",\"port\":3306,\"dbInstanceIdentifier\":\"database-1\"}",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": XXXXXXXXXXXXXXXX,
"ARN": "arn:aws:secretsmanager:ap-northeast-1:XXXXXXXXXXXXXXXXXX:secret:XXXXXXXXXXXXXXXXXXXX"
}
整形したのが以下になります。
[root@ip-172-31-10-19 ~]# aws secretsmanager get-secret-value --secret-id rds_connection | jq .SecretString | jq fromjson
{
"username": "XXXXXXX",
"password": "XXXXXXXXXXXXXXXXXXx",
"engine": "mysql",
"host": "XXXXXXXXXXXXXXXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com",
"port": 3306,
"dbInstanceIdentifier": "database-1"
}
- 各パラメータを変数に格納
上記の出力を変数に入れます。
secret=$(aws secretsmanager get-secret-value --secret-id rds_connection | jq .SecretString | jq fromjson)
user=$(echo $secret | jq -r .username)
password=$(echo $secret | jq -r .password)
endpoint=$(echo $secret | jq -r .host)
port=$(echo $secret | jq -r .port)
- 変数を使用してアクセス
以下のように接続できました!
mysql -h $endpoint -u $user -P $port -p$password -e "select * from id_user.user;"
+------+------+
| id | name |
+------+------+
| 1 | sum |
| 2 | jun |
+------+------+
勉強後イメージ
ユーザとかパスワードも勝手にとってくるイメージやったけど、手入力なんやw
勘違いしてた
でもこれはユーザ名とか変更する際も楽そうだね。