Glueクローラーのデータソースとして別AWSアカウントのS3バケットを指定したい

Glue クローラーのデータソースとして異なる AWS アカウントが所有する S3 バケットを指定する場合の、必要なアクセス許可について説明します。
2024.04.17

困っていた内容

Glue クローラーのデータソースとして、異なる AWS アカウントが所有する S3 バケットを指定したいのですが、どのようなアクセス許可が必要ですか。

どう対応すればいいの?

クローラーにアタッチされている IAM ロールからの s3:GetObjects3:ListBucket 許可を、S3 バケットのバケットポリシーにて設定する必要があります。

アカウント A: クローラーを作成する AWS アカウント

Glue クローラー作成画面では、クローラーにアタッチする IAM ロールを作成できますが、別アカウント所有の S3 バケットであるからと言って、このロールの内容を特別に変更する必要はありません。

なお、クローラーに必要な IAM ロールの権限については、以下ドキュメントで確認できます。

アカウント B: S3 バケットを所有する AWS アカウント

対象バケットで以下のようなバケットポリシーを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "<AWS アカウント A のクローラーにアタッチした IAM ロール ARN>"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<S3バケット名>",
                "arn:aws:s3:::<S3バケット名>/*"
            ]
        }
    ]
}

結果

正常に実行が完了することを確認できました。

参考資料