はじめに
こんにちは。11月から晴れてSA1課に配属された阿部です。
今回は今まで触れたことがなかったAWS Secrets Managerを触る機会がありましたので、その検証内容を共有させて頂きます。
作業概要
EC2からSecrets Managerにあるシークレット(RDSの認証情報)を取得して、
RDSに接続するまでを行います。
本記事での作業手順は以下のとおりです。
- 事前準備
- シークレットの作成
- EC2からシークレットの取得
- 取得したシークレットを使ってRDSへログイン
以上の流れで行います。
構成図
事前準備
EC2の作成
Secrets Managerからシークレットを取得するために、適当なEC2を作成します。
RDSの作成
EC2から接続するために、適当なRDSを作成します。今回はAurora MySQLで作成してみました。
EC2に対するシークレットへのアクセス許可設定
EC2からSecrets Manager内のシークレットにアクセスするためのロールをEC2に付与します。
ロール名 | RoleToRetrieveSecretAtRuntime |
ポリシー名 | SecretsManagerReadWrite |
やったこと
シークレットの作成
- Secrets Managerのコンソール画面から新しいシークレットを作成します。
- シークレットの名前を設定します。
- 今回は検証のため、シークレットの自動ローテーション設定は行いません。
- シークレットが作成されました。
EC2からシークレットの取得
- 以下のコマンドを実行して、指定したシークレット名の情報を取得します。
$ aws secretsmanager get-secret-value --secret-id test_secret
- コマンドが成功すると、以下のように取得内容が表示されます。
{ "ARN": "arn:aws:secretsmanager:ap-northeast-1:[アカウントID]:secret:test_secre XXXXXXX", "Name": "test_secret", "VersionId": "537308f9-d3ba-4e5e-af56-3d2c5781f7ca", "SecretString": "{\"username\":\"[ユーザー名]\",\"password\":\"[実際のパスワード] \",\"engine\":\"mysql\",\"host\":\"[DBエンドポイント名]\",\"port\":3306,\"dbClusterIdentifier\":\"[データベース名]\"}", "VersionStages": [ "AWSCURRENT" ], "CreatedDate": "XXXX-XX-XXXXX:XX:00.075000+00:00" }
- 取得したシークレットを変数に格納します。
$ 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)
取得した認証情報を使ってRDSへ接続
- 以下のコマンドを実行して、取得したシークレット情報を元にRDSへ接続します。
$ mysql -h $endpoint -u $user -P $port -p$password
- 以下のようなメッセージが表示されれば接続成功です。
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 107 Server version: 8.0.32 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)]>
おまけ
今回は、既存の認証情報をSecrets Managerでも流用したいため、シークレットを手動で作成して検証しました。
既にRDSを構築済みで、「既存の認証情報をそのまま」Secrets Managerへ移行したいという要件がなければ、
以下の記事にて紹介されている手順を踏むことで、シークレットの作成も自動で行ってくれます。
(ただし、既存の認証情報は変更されます。)
おわりに
いかがでしたでしょうか。
今回の検証を通して、AWS Secrets Managerを利用した認証情報のやりとりについて、理解を深めることができました。
この記事がどなたかのお役に立てれば幸いです。
阿部伊織(執筆記事の一覧)
インフラエンジニアからクラウドエンジニアへ転職。