Amazon S3 インベントリレポートを生成できません。なぜこのようなことが起こるのですか?

最終更新日: 2021年11月19日

Amazon Simple Storage Service (Amazon S3) インベントリレポートを設定しましたが、配信されておらず、アクセス拒否エラーが表示されます。インベントリレポートの設定でレポートが生成されないのはなぜですか。また、どうすれば解決できますか?

簡単な説明

Amazon S3 インベントリ設定を作成した場合、アクセス拒否エラーが表示されないように、適切なバケットポリシーとアクセス権限を設定する必要があります。

Access denied Inventory export for 2021-02-19 failed because S3 doesn’t have access to the destination bucket or KMS key. Ask the owner of the destination bucket or KMS key to grant the necessary access and then try again.

Amazon S3 インベントリレポートを生成するには、次の要件を満たす必要があります。

注: 最初のインベントリレポートの配信には、最長で48時間かかる場合があります

解決方法

ソースバケットが Amazon S3 インベントリレポートを保存先バケットにアップロードすることを許可する

インベントリレポートを生成して保存先バケットにアップロードするには、ソースバケットが保存先バケットにアップロードすることをバケットポリシーで許可する必要があります。

例:

{
  "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"
          }
       }
    }
  ]
}

そのため、拒否ステートメントがないか保存先バケットポリシーを確認してください。バケットには、Amazon S3 (s3.amazonaws.com) が保存先バケットで PutObject を実行することを妨げる拒否ステートメントを含めることはできません。明示的拒否は、すべての許可ステートメントよりも優先されます。PutObject アクションに影響する可能性のあるすべての拒否ステートメントから Amazon S3 サービス (s3.amazonaws.com) を除外します。

Amazon S3 (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"}
      }
    }
  ]
}

以前のバケットポリシーを修正するには、以下のようにポリシーを更新します。

{
"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"
        ]
      }
    }
  ]
}

保存先バケットがソースバケットと同じ AWS リージョンにあることを確認する

保存先バケットがソースバケットと同じ AWS リージョンにあることを確認するには、次の手順を実行します。

1.    AWS マネジメントコンソールにサインインします。

2.    Amazon S3 コンソールを開きます

3.    バケットリストの [AWS Region] 列を確認して、保存先バケットがソースバケットと同じ AWS リージョンにあることを確認します。(ソースバケットは、Amazon S3 インベントリを設定する場所です)。

4.    (オプション) ソースと保存先のバケットが異なるリージョンにある場合は、新しいバケットを作成するか選択します。これは、ソースバケットと保存先バケットが同じ AWS リージョンになければならないためです。

注: Amazon S3 は特定のリージョンにバケットを作成します。特定のリージョンにバケットが作成されると、そのバケットに属するオブジェクトは (明示的に転送されない限り) そのリージョンから離れることはありません。Amazon S3 バケットと AWS リージョンの使用の詳細については、「バケットの概要」を参照してください。

インベントリレポートファイルの暗号化に使用された AWS KMS キーへのアクセス権を付与する

Amazon S3 バケットを AWS KMS キーで暗号化した場合は、必ず Amazon S3 に KMS キーへのアクセス権を付与してください。

AWS KMS キーを使用して暗号化のアクセス権限を付与するには、次の手順を実行します。

1.    AWS マネジメントコンソールにサインインします。

注: AWS KMS キーを所有する AWS アカウントを使用してサインインしてください。

2.    AWS KMS コンソールを開きます

3.    左側のナビゲーションペインから [Customer managed keys] を選択します。

4.    [Customer managed keys] で、インベントリレポートファイルの暗号化に使用する AWS KMS キーを選択します。

5.    [Key policy] で、[Switch to policy view] を選択します。

6 キーポリシーを更新するには、[Edit] を選択します。

7.    [Edit key policy] で、次のキーポリシーを既存のキーポリシーに追加します。

{
    "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"
     }
   }
}

8.    [Save changes] を選択します。

サーバーアクセスログと CloudTrail 履歴を確認する

サーバーアクセスログを確認して、インベントリレポートの配信が停止している間にバケットポリシーに変更が加えられたかどうかを確認します。Amazon S3 サーバーアクセスログの形式は次のようになります

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.PUT.BUCKETPOLICY - "GET /awsexamplebucket1?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1

バケットポリシーに変更が加えられたことを示す、次のいずれかのエントリを探します。

REST.PUT.BUCKETPOLICY

AWS CloudTrail イベント履歴で PutBucketPolicy アクションを検索して、最近変更が加えられたかどうかを確認することもできます。CloudTrail イベント履歴には 90 日間のウィンドウしか表示されていないことに注意してくださいPutBucketPolicy アクションが 90 日以上前に実行された場合、 Amazon S3 で CloudTrail ログを直接クエリする必要があります。CloudTrail によってキャプチャされた Amazon S3 API コールの詳細については、AWS Docs GitHub ウェブサイトの CloudTrail の Amazon S3 情報を参照してください。