Lambda から AssumeRole API を実行後に別アカウントの S3 バケットへアクセスできないので解決策を教えてください

Lambda から AssumeRole API を実行後に別アカウントの S3 バケットへアクセスできないので解決策を教えてください

2022.09.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Here is the English version

困っていた内容

アカウント A の Lambda で AssumeRole API を実行してからアカウント B の S3 バケットにアクセスする必要があるのですが、AssumeRole API 実行後にアカウント B の S3 バケットへのアクセスが拒否されました。
アカウント B の S3 バケットポリシーではアカウント A の Lambda の実行ロールからのアクセスを許可しています。

Lambda から AssumeRole API を実行後に別アカウントの S3 バケットへアクセスできないので解決策を教えてください。

どう対応すればいいの?

接続先のアカウントの S3 バケットポリシーに、AssumeRole API で引き受ける IAM ロールの ARN を指定してください。

AssumeRole API を実行せずに Lambda から別アカウントの S3 バケットへアクセスする場合には S3 バケットポリシーに Lambda の実行ロールを指定します。
一方、AssumeRole API を実行した場合には S3 バケットへアクセスするのは AssumeRole API で引き受けた IAM ロールです。

そのため、別アカウントの S3 バケットポリシーで AssumeRole API で引き受ける IAM ロールからのアクセスを許可してください。

一例として、以下のようなバケットポリシーが考えられます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Example-Bucuket-Policy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:role/assumerole-role-name"
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket",
        "arn:aws:s3:::example-bucket/*"
      ]
    }
  ]
}

参考資料

この記事をシェアする

FacebookHatena blogX

関連記事