CloudTrail の Amazon S3 バケットポリシー - AWS CloudTrail

CloudTrail の Amazon S3 バケットポリシー

デフォルトでは、Amazon S3 バケットとオブジェクトはプライベートです。リソース所有者 (バケットを作成した AWS アカウント) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。

Amazon S3 バケットを作成または変更して組織の証跡のログファイルを受け取れるようにするには、バケットポリシーを変更する必要があります。詳細については、「AWS Command Line Interface による組織の証跡の作成」を参照してください。

S3 バケットにログファイルを配信するためには、CloudTrail に必要なアクセス権限がある必要があり、リクエスタ支払いバケットとして設定することはできません。

CloudTrail は、ポリシーに以下のフィールドを追加します。

  • 許可された SID。

  • バケット名。

  • CloudTrail のサービスプリンシパル名。

  • バケット名、プレフィックス (指定した場合)、AWS アカウント ID を含む、ログファイルが格納されているフォルダの名前。

セキュリティのベストプラクティスとして、aws:SourceArn 条件キーを Amazon S3 バケットポリシーに追加します。IAM グローバル条件キー aws:SourceArn は、CloudTrail が特定の 1 つまたは複数の証跡に対してのみ S3 バケットに書き込めるようにするのに役立ちます。aws:SourceArn の値は常に、ログを格納するためにバケットを使用している証跡の ARN (または証跡 ARN の配列) になります。既存の証跡の S3 バケットポリシーに aws:SourceArn 条件キーを必ず追加してください。

次のポリシーは、CloudTrail がサポートされているリージョンからログファイルをバケットに書き込むことを許可します。myBucketName[optionalPrefix]/myAccountIDregion、および trailName を設定に適切な値に置き換えます。

S3 バケットポリシー

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::myBucketName", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName" } } }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::myBucketName/[optionalPrefix]/AWSLogs/myAccountID/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName" } } } ] }

の詳細については、「AWS リージョン」を参照してください。CloudTrail がサポートされているリージョン

CloudTrail ログ配信の既存のバケットを指定する

ログファイル配信の保存場所として既存の S3 バケットを指定した場合、CloudTrail がバケットに書き込むことを許可するバケットにポリシーをアタッチする必要があります。

注記

ベストプラクティスとして、CloudTrail ログ用に専用 S3 バケットを使用します。

必要な CloudTrail ポリシーを Amazon S3 バケットに追加するには

  1. https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開きます。

  2. CloudTrail でログファイルを配信するバケットを選択し、[Permissions] (アクセス許可) を選択します。

  3. [Edit] を選択します。

  4. S3 bucket policy を [Bucket Policy Editor] ウィンドウにコピーします。イタリック体のプレースホルダーを、バケット、プレフィックス、アカウント番号の名前に置き換えます。証跡の作成時にプレフィックスを指定した場合は、ここに含めます。プレフィックスは、バケットにフォルダのような組織を作成する S3 オブジェクトキーへのオプションの追加です。

    注記

    既存のバケットにすでに 1 つ以上のポリシーがアタッチされている場合は、そのポリシーに CloudTrail アクセスのステートメントを追加します。バケットにアクセスするユーザーに適していることを確認するために、作成したアクセス権限のセットを評価します。

他のアカウントからログファイルを受信

ログファイルを複数の AWS アカウントから単一の S3 バケットに配信するように CloudTrail を設定できます。詳細については、「複数のアカウントから CloudTrail ログファイルを受け取る 他のアカウントでコールされたデータイベントのバケット所有者アカウント ID を秘匿化する」を参照してください。

組織の証跡のログファイルを保存するために使用する Amazon S3 バケットを作成または更新する

組織の証跡のログファイルを受信するには、Amazon S3 バケットを指定する必要があります。このバケットには、CloudTrail が組織のログファイルをバケットに入れることを許可するポリシーが必要です。

以下は、myOrganizationBucket という名前の Amazon S3 バケットのポリシーの例です。このバケットは ID 1111111111 を持つ AWS アカウントで、組織の証跡のログ記録を可能にする ID o-exampleorgid を持つ組織の管理アカウントです。また、証跡が組織の証跡からそのアカウントの証跡のみに変更された場合に、アカウント 111111111111 のログを記録することもできます。myOrganizationBucket111111111111region、および trailName を設定に適切な値に置き換えます。

ポリシー例には、Amazon S3 バケットポリシーの aws:SourceArn 条件キーが含まれています。IAM グローバル条件キー aws:SourceArn は、CloudTrail が特定の 1 つまたは複数の証跡に対してのみ S3 バケットに書き込めるようにするのに役立ちます。組織の証跡の場合、aws:SourceArn の値は管理アカウントで保持され、管理アカウント ID を使用する証跡の ARN である必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20150319", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::myOrganizationBucket", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region:111111111111:trail/trailName" } } }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::myOrganizationBucket/AWSLogs/111111111111/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceArn": "arn:aws:cloudtrail:region:111111111111:trail/trailName" } } }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::myOrganizationBucket/AWSLogs/o-exampleorgid/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceArn": "arn:aws:cloudtrail:region:111111111111:trail/trailName" } } } ] }

このポリシー例では、メンバーアカウントのユーザーが組織用に作成されたログファイルにアクセスすることを許可していません。デフォルトでは、組織のログファイルは管理アカウントにのみアクセスできます。メンバーアカウントの IAM ユーザーに対して Amazon S3 バケットへの読み取りアクセスを許可する方法については、「AWS アカウント間での CloudTrail ログファイルを共有する」を参照してください。

Amazon S3 バケットポリシーのトラブルシューティング

以下のセクションでは、S3 バケットポリシーをトラブルシューティングする方法について説明します。

一般的な Amazon S3 ポリシー設定のエラー

証跡の作成または更新の一部として新しいバケットを作成すると、CloudTrail は必要なアクセス権限をバケットにアタッチします。このバケットポリシーでは、サービスプリンシパル名、"cloudtrail.amazonaws.com" を使用します。これにより、CloudTrail がすべてのリージョンのログを配信できるようになります。

CloudTrail が、リージョンのログを配信していない場合、バケットには各リージョンの CloudTrail アカウント ID を指定する古いポリシーがある可能性があります。このポリシーは、指定されたリージョンのみで、ログを配信するためのアクセス権限を CloudTrail 与えます。

ベストプラクティスとして、CloudTrail サービスプリンシパルでアクセス権限を使用するようにポリシーを更新します。これを行うには、アカウント ID ARN をサービスプリンシパル名 "cloudtrail.amazonaws.com" に置き換えます。これにより、現在および新しいリージョンのログを配信する CloudTrail にアクセス権限が与えられます。セキュリティのベストプラクティスとして、Amazon S3 バケットポリシーに aws:SourceArn または aws:SourceAccount 条件キーを追加します。これにより、S3 バケットへの不正なアカウントアクセスを防止できます。既存の証跡がある場合は、必ず 1つまたは複数の条件キーを追加してください。次の例は、推奨されるポリシーの設定を示しています。myBucketName[optionalPrefix]/myAccountIDregion、および trailName を設定に適切な値に置き換えます。

例 サービスプリンシパル名を使用したバケットポリシーの例

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::myBucketName", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName" } } }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::myBucketName/[optionalPrefix]/AWSLogs/myAccountID/*", "Condition": {"StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName" } } } ] }

既存のバケットのプレフィックスを変更する

証跡からログを受け取る S3 バケットのログファイルプレフィックスを追加、変更、または削除しようとすると、次のエラー 「There is a problem with the bucket policy (バケットバケットポリシーに問題があります) 」が表示されることがあります。その場合、バケットポリシーに問題があります。誤ったプレフィックスを使用しているバケットポリシーは、証跡がログをバケットに配信されないようにすることができます。この問題を解決するには、Amazon S3 コンソールを使用して、バケットポリシーのプレフィックスを更新し、CloudTrail コンソールを使用して、証跡のバケットに同じプレフィックスを指定します。

Amazon S3 バケットのログファイルプレフィックスを更新するには

  1. https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開きます。

  2. プレフィックスを変更するバケットを選択し、[Permissions] (アクセス許可) を選択します。

  3. [Edit] を選択します。

  4. バケットポリシーで、s3:PutObject アクションの下で、Resource エントリを編集して、必要に応じてログファイルprefix/ を追加、変更、削除します。

    "Action": "s3:PutObject", "Resource": "arn:aws:s3:::myBucketName/prefix/AWSLogs/myAccountID/*",
  5. [Save] を選択します。

  6. CloudTrail コンソール (https://console.aws.amazon.com/cloudtrail/) を開きます。

  7. 証跡を選択し、Storage location の場合は鉛筆アイコンをクリックして、バケットの設定を編集します。

  8. S3 バケット の場合は、変更するプレフィックスを持つバケットを選択します。

  9. Log file prefix の場合は、バケットポリシーに入力したプレフィックスに一致するようにプレフィックスを更新します。

  10. [Save] を選択します。

その他のリソース

S3 バケットおよびポリシーの詳細については、「Amazon Simple Storage Service ユーザーガイド」を参照してください。