別のアカウントでバケットをクエリすると、Amazon Athena で AmazonS3Exception「Access Denied with Status Code: 403 (ステータスコード 403 でアクセスが拒否されました)」が表示されるのはなぜですか?
最終更新日: 2021 年 7 月 22 日
Amazon Athena を使用して、別のアカウントにある Amazon Simple Storage Service (Amazon S3) バケットのオブジェクトをクエリしています。バケット内のオブジェクトの一部は、3 番目のアカウントによって所有されています。クエリを実行すると、AmazonS3Exception「Access Denied with Status Code:403 (ステータスコード 403 でアクセスが拒否されました)」が表示されます。
簡単な説明
このエラーは通常、AWS CloudTrail、Amazon CloudFront、Amazon Virtual Private Cloud (Amazon VPC) など、別の AWS のサービスによって書き込まれたログをクエリしようとしたときに発生します。これらのサービスは、Amazon S3 にイベントをログ記録します。バケット所有者には、S3 オブジェクトへのフルアクセス権があります。2 番目のアカウントは、バケットまたはオブジェクトを所有していません。そのため、これらの S3 オブジェクトを参照する Athena テーブルを照会すると、2 番目のアカウントはアクセス拒否エラーを受け取ります。
解決方法
Amazon S3 オブジェクトの所有権を移管することはできません。代わりに、次のオプションのいずれかを使用してください。
- Athena アカウントで、バケットとオブジェクトの両方にアクセスできる AWS Identity and Access Management (IAM) ロールを継承します。詳細については、チュートリアル: AWS アカウント間の IAM ロールを使用したアクセス権の委任を参照してください。
- 別の AWS アカウントから S3 オブジェクトをコピーするにはどうすればよいですか?にある手順に従って、Athena アカウントのバケットにオブジェクトをコピーします。次に、不要な料金が発生しないように、コピー先バケットから冗長なオブジェクトや不要なオブジェクトを削除します。