ablog

不器用で落着きのない技術者のメモ

AWS Lambda から Amazon RDS Proxy に IAM 認証する際のIAMポリシー設定例

AWS Lambda から Amazon RDS Proxy に IAM 認証する際のIAMポリシー設定例。以下のような IAM ポリシーを Lambda 実行用の IAM ロールにアタッチする。

  • IAM ポリシー例
    • リージョン: ap-northeast-1
    • AWSアカウントID: 234567890123
    • RDS Proxy の arn: arn:aws:rds:ap-northeast-1:234567890123:db-proxy:prx-0a4595437994303a9
    • DBユーザー名: awsuser
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": [
                "arn:aws:rds-db:ap-northeast-1:234567890123:dbuser:prx-0a4595437994303a9/awsuser"
            ]
        }
    ]
}

Resource には RDS Proxy の arn ではなく "arn:aws:rds-db:[リージョン]:[AWSアカウントID]:dbuser:[RDS Proxy の arn の prx-** の部分]/[DBユーザー名]" を指定する。

参考

IAM ポリシーを変更することで、特定のユーザーにプロキシへのアクセスを許可できます。以下に例を示します。

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"
Amazon RDS Proxy による接続の管理 - Amazon Relational Database Service

IAM Roleの設定次に、EC2に設定しているIAM Roleに対して、IAM接続用のポリシーを設定します。「Resouce」に設定する書式は次の通りです。 region、account-id、dbi-resource-id、database-user-nameについては利用環境のものを指定します。

arn:aws:rds-db:region:account-id:dbuser:dbi-resource-id/database-user-name

Tokyoリージョンで、「iam_user」というユーザの場合は、下記のようになります。(アカウントは12345678)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": [
                "arn:aws:rds-db:ap-northeast-1:12345678:dbuser:cluster-XXXXXXXXXXXXXXXXXXXXXXXXXX/iam_user"
            ]
        }
    ]
}
IAM認証によるRDS接続を試してみた | DevelopersIO