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/*"
      ]
    }
  ]
}

参考資料


AWSテクニカルサポートノートについて

過去にクラスメソッドのAWS総合支援サービスで頂いたお問合せの中から、通常のAWS利用時でも有益になりうる情報をテクニカルサポートチームがTIPSとしてご紹介しています。技術サポートは、無料でご提供しております。詳細は下記ボタンからご覧ください。

クラスメソッドのAWSサポートの詳細を見る

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事