エラー内容
RDS Proxy を設定する際に以下のエラーが発生することがあります:
Credentials couldn't be retrieved. The IAM role "arn:aws:iam::<account_id>:role/<role_name>" is not authorized to read the AWS Secrets Manager secret with the ARN "arn:aws:secretsmanager:<region>:<account_id>:secret:<secret_name>"
このエラーは、RDS Proxy に割り当てられた IAM ロールが Secrets Manager のシークレットを取得するための適切なアクセス許可を持っていない場合に発生します。
対処方法
1. IAM ロールのポリシー確認
RDS Proxy に関連付けられた IAM ロールに適切なポリシーが付与されていることを確認してください。
Secrets Manager のアクセス許可
以下は、Secrets Manager に対するアクセス許可ポリシーの例です。該当するシークレットの ARN を指定してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSecretsManagerAccess",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": "arn:aws:secretsmanager:<region>:<account_id>:secret:<secret_name>"
}
]
}
KMS のアクセス許可
Secrets Manager のシークレットが KMS で暗号化されている場合、KMS へのアクセス許可も必要です。
{
"Sid": "AllowKMSAccess",
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:<region>:<account_id>:key/alias/aws/secretsmanager"
],
"Condition": {
"StringEquals": {
"kms:ViaService": "secretsmanager.<region>.amazonaws.com"
}
}
}
2. Secrets Manager の ARN の確認
エラーメッセージに表示される Secrets Manager の ARN を確認し、IAM ポリシーで指定している ARN と完全一致していることを確認してください。
- 例: エラーメッセージに
arn:aws:secretsmanager:ap-northeast-1:<account_id>:secret:dev-db-credential-G1TDKV
と記載されている場合は、この ARN をポリシー内で指定してください。
3. IAM ロールの信頼関係を確認
IAM ロールの信頼関係ポリシーに、RDS Proxy を許可する設定が含まれているか確認してください。以下は、適切な信頼関係ポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
4. RDS Proxy の設定を確認
RDS Proxy に以下の項目が正しく設定されていることを確認してください。
- IAM ロール: エラーに表示された IAM ロールが設定されているか確認してください。
- シークレット ARN: Secrets Manager に登録されたシークレット ARN が正しいか確認してください。
5. ポリシーの適用後にリロード
ポリシーを修正した後、RDS Proxy を再起動することで変更が適用される場合があります。
6. CloudWatch ログでエラー詳細を確認
RDS Proxy の CloudWatch ログを有効化し、エラーの詳細を確認してください。
まとめ
このエラーを解消するには、以下のステップを順に確認してください:
- IAM ロールに適切な Secrets Manager と KMS のアクセス許可を付与する。
- ARN の完全一致を確認する。
- IAM ロールの信頼関係を設定する。
- RDS Proxy の設定を確認する。
設定後に問題が解決しない場合は、CloudWatch ログを参照して追加のエラー情報を確認しましょう。