RDS Proxy の AWS Secrets Manager でのデータベース認証情報の設定
Amazon RDS の RDS Proxy は、AWS Secrets Manager を使用してデータベース認証情報を安全に保存および管理します。アプリケーションに認証情報を埋め込む代わりに、必要な認証の詳細を含む Secrets Manager シークレットにプロキシを関連付けます。Aurora DB クラスターで、プロキシの接続先のデータベースユーザーアカウントごとに個別の Secrets Manager シークレットを作成します。
RDS Proxy で使用するシークレットの作成
プロキシを作成する前に、まずデータベース認証情報を保存するシークレットを少なくとも 1 つ作成する必要があります。
シークレットを作成する
Secrets Manager のコンソール (https://console.aws.amazon.com/secretsmanager/
) を開きます。 -
[Store a new secret] (新しいシークレットを保存する) を選択します。
-
[Amazon RDS データベースの認証情報] を選択します。
-
ユーザー名とパスワードを入力します。入力する認証情報は、関連付けられた RDS データベースに存在するデータベースユーザーの認証情報と一致する必要があります。RDS Proxy は、これらの認証情報を使用して、アプリケーションに代わってデータベースへの接続を認証および確立します。
不一致がある場合は、データベースパスワードと一致するようにシークレットを更新できます。シークレットを更新するまで、そのシークレットを使用してプロキシ経由で接続しようとすると失敗しますが、他の有効なシークレットを使用した接続は引き続き機能します。
注記
RDS for SQL Server の場合、RDS Proxy は DB インスタンスの照合設定に関係なく、Secrets Manager で大文字と小文字を区別するシークレットが必要です。アプリケーションで「Admin」や「admin」などの大文字と小文字が異なるユーザー名が許可されている場合は、それぞれに個別のシークレットを作成する必要があります。RDS Proxy は、クライアントとプロキシ間の大文字と小文字を区別しないユーザー名認証をサポートしていません。
SQL Server Agent の詳細については、Microsoft SQL Server
のドキュメントを参照してください。 -
[データベース] で、シークレットがアクセスする Amazon RDS データベースを選択します。
-
シークレットの他の設定を入力し、[保存] を選択します。詳細な手順については、「AWS Secrets Manager ユーザーガイド」の「Create an AWS Secrets Manager secret」を参照してください。
AWS CLI を通じてプロキシを作成する場合、対応するシークレットの Amazon リソースネーム (ARN) を指定します。プロキシがアクセスできるすべての DB ユーザーアカウントに対し、同じように操作します。AWS Management Console では、シークレットをそのわかりやすい名前を使用して選択します。
-
RDS Proxy で使用する Secrets Manager シークレットを作成するには、create-secret コマンドを使用します。
aws secretsmanager create-secret \ --name "
secret_name
" \ --description "secret_description
" \ --regionregion_name
\ --secret-string '{"username":"db_user","password":"db_user_password"}' -
Secrets Manager シークレットを暗号化するカスタムキーを作成することもできます。次のコマンドはキーの例を作成します。
aws kms create-key --description "
test-key
" --policy '{ "Id":"kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id
:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam:account_id
::role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] }'
例えば、以下のコマンドは、2 つのデータベースユーザーの Secrets Manager シークレットを作成します。
aws secretsmanager create-secret \ --name
secret_name_1
--description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password
"}' aws secretsmanager create-secret \ --namesecret_name_2
--description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password
"}'
カスタム AWS KMS キーで暗号化されたシークレットを作成するには、以下のコマンドを使用します。
aws secretsmanager create-secret \ --name
secret_name_1
--description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password
"}' \ --kms-key-id arn:aws:kms:us-east-2:account_id
:key/key_id
aws secretsmanager create-secret \ --namesecret_name_2
--description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password
"}' \ --kms-key-id arn:aws:kms:us-east-2:account_id
:key/key_id
AWS アカウントが所有するシークレットを表示するには、list-secrets コマンドを使用します。
aws secretsmanager list-secrets
CLI を使用してプロキシを作成する場合、1 つ以上のシークレットの Amazon リソースネーム (ARN) を --auth
パラメータに渡します。次の例は、AWS アカウントが所有する各シークレットの名前と ARN のみを含むレポートを準備する方法を示しています。この例では、--output table
バージョン 2 で使用可能な AWS CLI パラメータを使用します。AWS CLI バージョン 1 を使用している場合は、代わりに --output
text
を使用します。
aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table
シークレットに適切な形式の正しい認証情報が含まれていることを確認するには、get-secret-value コマンドを使用します。
をシークレットの短縮名または ARN に置き換えます。your_secret_name
aws secretsmanager get-secret-value --secret-id
your_secret_name
出力には、次のような JSON でエンコードした値を持つ行が含まれます。
... "SecretString": "{\"username\":\"
your_username
\",\"password\":\"your_password
\"}", ...