Amazon S3 インベントリレポートを生成できない理由を知りたいです。
Amazon Simple Storage Service (Amazon S3) でインベントリレポートを設定しましたが、配信されず、"Access Denied" エラーが発生します。
簡単な説明
次のエラーメッセージが表示されます。
"アクセスが拒否されました。S3 が宛先バケットまたは KMS キーにアクセスできないため、2021-02-19 のインベントリをエクスポートできませんでした。送信先バケットまたは KMS キーの所有者に必要なアクセス許可の付与を依頼してから、再試行してください。"
Amazon S3 インベントリレポートを生成し、上記のエラーメッセージが出ないようにするには、次の要件を満たす必要があります。
- ソースバケットが Amazon S3 インベントリレポートを宛先バケットにアップロードすることを許可します。
- 宛先バケットとソースバケットは、Amazon S3 インベントリを設定したリージョンと同じ AWS リージョンに保管します。
- Amazon S3 に、インベントリレポートファイルを暗号化するために使用する AWS Key Management Service (AWS KMS) キーへのアクセスを許可します。
注: Amazon S3 が最初のインベントリレポートを配信するまでに、最大 48 時間かかる場合があります。
解決策
ソースバケットが Amazon S3 インベントリレポートを宛先バケットにアップロードすることを許可する
バケットポリシーが、ソースバケットが宛先バケットにアップロードできるように設定されていることを確認します。
PutObject アクションを含むバケットポリシーの例
{ "Version": "2012-10-17", "Id": "S3PolicyId", "Statement": [ { "Sid": "InventoryAndAnalyticsExamplePolicy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::destinationbucket/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" }, "StringEquals": { "aws:SourceAccount": "123456789012", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
PutObject アクションに影響する可能性のあるすべての Deny ステートメントから、s3.amazonaws.com を除外します。明示的な Deny ステートメントは、Allow よりも優先されます。
次のバケットポリシーの例では、s3.amazonaws.com へのアクセスを拒否し、指定した IP アドレス範囲へのアクセスのみを許可します。
{ "Version": "2012-10-17", "Id": "S3PolicyId", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::destinationbucket", "arn:aws:s3:::destinationbucket/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "54.240.143.0/24" } } } ] }
次のポリシーは、上記のバケットポリシーの更新バージョンであり、s3.amazonaws.com へのアクセスを許可しています。
{ "Version": "2012-10-17", "Id": "S3PolicyId", "Statement": [ { "Sid": "IPAllow", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::destinationbucket", "arn:aws:s3:::destinationbucket/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "54.240.143.0/24" }, "ArnNotLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" } }, "Principal": "*" }, { "Sid": "InventoryAndAnalyticsExamplePolicy", "Action": [ "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::destinationbucket/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" }, "StringEquals": { "aws:SourceAccount": "123456789012", "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "AWS": [ "s3.amazonaws.com" ] } } ] }
宛先バケットがソースバケットと同じリージョンにあることを確認します。
Amazon S3 コンソールを開きます。バケットリストに移動して [リージョン] 列を確認し、宛先バケットとソースバケットが同じリージョンにあるかどうかを確認します。
(オプション) ソースとターゲットバケットが別々のリージョンにある場合は、新しいバケットを作成するか、選択します。
注: オブジェクトを転送するまでは、バケットに属するオブジェクトはバケットを作成したリージョンに残ります。詳細については、「バケットの概要」を参照してください。
インベントリレポートファイルの暗号化に使用する AWS KMS キーへのアクセス許可を付与します
Amazon S3 バケットを AWS KMS キーで暗号化した場合は、Amazon S3 に AWS KMS キーへのアクセス許可を付与します。
次の手順を実行します。
-
AWS KMS コンソールを開きます。
注: AWS KMS キーの所有者である AWS アカウントを使用してサインインします。 -
ナビゲーションペインで、[カスタマーマネージドキー] を選択します。
-
[カスタマーマネージドキー] で、インベントリレポートファイルの暗号化に使用する AWS KMS キーを選択します。
-
[キーポリシー] で [ポリシービューに切り替え] を選択します。
-
[編集] を選択します。
-
[キーポリシーの編集] で、次のキーポリシーを既存のキーポリシーに追加します。
{ "Sid": "Allow Amazon S3 use of the KMS key", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "source-account-id" }, "ArnLike": { "aws:SourceARN": "arn:aws:s3:::source-bucket-name" } } } -
[変更を保存] を選択します。
注: Amazon S3 コンソールを使用して [インベントリ設定] の [最終エクスポート] 列を確認します。[最終エクスポート] 列が空の場合は、Amazon S3 からインベントリレポートが配信されなかったことを示しています。Amazon S3 がインベントリレポートを配信した場合、そのインベントリレポートは宛先バケット内の指定されたパスにあります。
サーバーのアクセスログと CloudTrail 履歴をレビューする
サーバーのアクセスログを参考に、バケットポリシーが変更されたことが原因で配信が停止されたかどうかを確認します。ログ形式の例については、「Amazon S3 サーバーアクセスログの形式」を参照してください。
バケットポリシーが変更されたことを示すログエントリの例を次に示します。
REST.PUT.BUCKETPOLICY
AWS CloudTrail イベント履歴で PutBucketPolicy API アクションを検索することでも確認できます。PutBucketPolicy アクションの実行が 90 日前を超えている場合は、Amazon S3 で CloudTrail ログにクエリを実行する必要があります。詳細については、AWS Docs GitHub のウェブサイトで「CloudTrail での Amazon S3 に関する情報」を参照してください。
インベントリスコープのプレフィックスフィルターを確認する
プレフィックスフィルターを設定してもインベントリレポートが 48 時間経っても配信されない場合は、プレフィックス設定を確認します。プレフィックスフィルターが、インベントリされたバケット内の既存のプレフィックスと一致することを確認してください。空白、入力ミス、先頭に入力した前向きスラッシュなどを削除します。
