あるアカウントから、他のアカウントのS3ファイルを取得したい時があります。
そんな時は、そのS3ファイルをダウンロードできる専用のユーザーを作成して、そのユーザーでダウンロードするのが手っ取り早いですが、取得先S3へのアクセス権限を、取得元アカウントのユーザー・ロールに付与することによっても可能です。
専用ユーザーを作成する場合は、ファイルダウンロードで手元にコピーを作成して、それを操作することが多いかと思いますが、アクセス権限付与の場合は、ファイルを直接参照できるため、コピーの手間や時間が削減できます。
例えば、AWS Glueで、他アカウントのS3ファイルをクロールしたい場合、専用ユーザーを作成する場合は、一旦GlueのアカウントのS3にファイルをダウンロードしてきて、それをクロールする形になりますが、アクセス権限付与の場合、他アカウントのS3を直接クロールできるので便利です。
また、専用ユーザーを作成する場合は、転送費用はユーザーを所有している側のアカウントになりますが、アクセス権限付与の場合、費用は取得する側になります。
方法
S3バケットに、そのバケットにアクセスしたいユーザー・ロールを登録することにより可能になります。
[S3]-[許可したいバケット]-[アクセス権限]-[バケットポリシー]でアクセス権限を登録します。
例えばバケット全体に対して読み取り可にするポリシーは下記のようになります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "任意の名前", "Effect": "Allow", "Principal": { "AWS": "アクセス権限付与対象のARN" }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::バケット名", "arn:aws:s3:::バケット名/*" ] } ] }
バケットポリシーは読み取りだけでなく、書き込み権限を付与したり、特定のファイルや特定のフォルダ以下のみにアクセス制限するなど、柔軟なアクセス権限の付与ができます。