■ はじめに
クロスアカウントでのS3アクセスに関して 複数の原因があってハマりにハマったので、メモしておく。
目次
【0】教訓:S3バケットのアクセストラブルの勘所 【1】エラー「An error occured (403) when calling the HeadObject operation: Forbidden」が表示 【2】エラー「The ciphertext refers to a custom master key ...」が表示
【0】教訓:S3バケットのアクセストラブルの勘所
* 以下の点を落ち着いて当たってみるといいかも、、、 1)S3へアクセスしているIAM roleで、 アクセスするS3にアクセス許可しているか 2)S3 Policyで、S3へアクセスしているIAM roleを許可しているか => S3 と IAM role のお互いが許可しているか確認
KMSで暗号化している場合
3)KMSのKey policyで、S3へアクセスしているロールを許可しているか 4)S3へアクセスしているロールがKMS使用を許可しているか => KMS と IAM role のお互いが許可しているか確認
【1】エラー「An error occured (403) when calling the HeadObject operation: Forbidden」が表示
Boto3 API で、クロスアカウント上のKMSキーで暗号化しているS3バケット内の ファイルをダウンロードした際に以下「エラー内容」が表示されてしまう
1)エラー内容
botocore.exceptions.ClientError: An error occured (403) when calling the HeadObject operation: Forbidden
2)原因
* 原因は、2点。
原因・その1
* アクセス先のS3バケットのPolicyでGlue Job のロールが許可されていなかった => 確認方法としては、対象S3バケットを選択し、タブ[Permissions]の配下の 「Bucket Policy」を参照する
原因・その2
* 以下の2点。 [1] Glue で使用しているロールのPollicyで 対象S3バケットを許可していなかったため [2] Glue で使用しているロールのPollicyで 対象S3バケットに紐づけいるKMSキーの使用許可がなかったため
3)解決案
* 以下の通り。 => ただし、また別エラーが発生(【2】を参照)
原因・その1の解決案
* アクセス先のS3バケットのPolicyでGlue Job のロールが追加 => 今回の場合、ReadObject/ListBucketを許可するようにPolicyを修正
原因・その2の解決案
* Glue で使用しているロールのPollicyを修正 => 今回の場合、以下の通り。 [1] GetObjectを許可しているPolicyのResourceに対して 対象S3バケットのARNを追加 [2] kms:Encrypt/DescribeKey/Decryptなどを許可しているPolicyのResourceに対して 対象S3バケットのKMSのARNを追加
【2】エラー「The ciphertext refers to a custom master key ...」が表示
Glue JobからBoto3 API を使い、 クロスアカウント上のKMSキーで暗号化しているS3バケット内の ファイルをダウンロードした際に以下「エラー内容」が表示されてしまう
1)エラー内容
botocore.exceptions.ClientError: An error occured (AccessDenied) when calling the GetObject operation: The ciphertext refers to a custom master key that does not exists, does not exist in this region, or you are not allowed to access.
2)原因
S3バケットに紐づいているKMSキーのKey Policyで Glue Job のロールが許可されていなかった => 確認方法としては、対象S3バケットを選択し、タブ[Permissions]の配下の 「Default encryption」で指定されているKMSキーのリンクから参照できる
3)解決案
KMSキーのPolicyでGlue Job のロールを許可するように修正する => 今回の場合、kms:Encrypt/DescribeKey/Decryptなどを許可している Key PolicyのResourceに対して使用しているGlue JobのロールのARNを追加
関連記事
IAM ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/02/26/231046
IAM ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2022/07/03/000000
IAM ~ クロスアカウント ~
https://dk521123.hatenablog.com/entry/2022/05/23/000000
IAM ~ 別AWSアカウントのS3にファイルアップロード ~
https://dk521123.hatenablog.com/entry/2024/03/08/003841