CloudTrail の Amazon S3 バケットポリシー
デフォルトでは、Amazon S3 バケットとオブジェクトはプライベートです。リソース所有者 (バケットを作成した AWS アカウント) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。
Amazon S3 バケットを作成または変更して組織の証跡のログファイルを受け取れるようにするには、バケットポリシーを変更する必要があります。詳細については、「AWS CLI による組織の証跡の作成」を参照してください。
S3 バケットにログファイルを配信するためには、CloudTrail に必要なアクセス権限がある必要があり、リクエスタ支払いバケットとして設定することはできません。
CloudTrail は、ポリシーに以下のフィールドを追加します。
-
許可された SID。
-
バケット名。
-
CloudTrail のサービスプリンシパル名。
-
バケット名、プレフィックス (指定した場合)、AWS アカウント ID を含む、ログファイルが格納されているフォルダの名前。
セキュリティのベストプラクティスとして、aws:SourceArn
条件キーを Amazon S3 バケットポリシーに追加します。IAM グローバル条件キー aws:SourceArn
は、CloudTrail が特定の 1 つまたは複数の証跡に対してのみ S3 バケットに書き込めるようにするのに役立ちます。aws:SourceArn
の値は常に、ログを格納するためにバケットを使用している証跡の ARN (または証跡 ARN の配列) になります。既存の証跡の S3 バケットポリシーに aws:SourceArn
条件キーを必ず追加してください。
注記
証跡を不適切な設定 (S3 バケットに到達できない状態など) にすると、CloudTrail は 30 日間、S3 バケットへのログファイルの再配信を試みます。これらの配信試行イベントには標準の CloudTrail 料金が適用されます。証跡の不適切な設定による課金を避けるには、その証跡を削除する必要があります。
次のポリシーは、CloudTrail がサポートされている AWS リージョン からログファイルをバケットに書き込むことを許可します。amzn-s3-demo-bucket
、[optionalPrefix]/
、myAccountID
、region
、および trailName
を設定に適切な値に置き換えます。
S3 バケットポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
", "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:::amzn-s3-demo-bucket
/[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 バケットに追加するには
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
CloudTrail でログファイルを配信するバケットを選択し、[Permissions] (アクセス許可) を選択します。
-
[編集] を選択します。
-
S3 bucket policy を [Bucket Policy Editor] ウィンドウにコピーします。イタリック体のプレースホルダーを、バケット、プレフィックス、アカウント番号の名前に置き換えます。証跡の作成時にプレフィックスを指定した場合は、ここに含めます。プレフィックスは、バケットにフォルダのような組織を作成する S3 オブジェクトキーへのオプションの追加です。
注記
既存のバケットにすでに 1 つ以上のポリシーがアタッチされている場合は、そのポリシーに CloudTrail アクセスのステートメントを追加します。バケットにアクセスするユーザーに適していることを確認するために、作成したアクセス権限のセットを評価します。
他のアカウントからログファイルを受信
ログファイルを複数の AWS アカウントから単一の S3 バケットに配信するように CloudTrail を設定できます。詳細については、「複数のアカウントから CloudTrail ログファイルを受け取る」を参照してください。
組織の証跡のログファイルを保存するために使用する Amazon S3 バケットを作成または更新する
組織の証跡のログファイルを受信するには、Amazon S3 バケットを指定する必要があります。このバケットには、CloudTrail が組織のログファイルをバケットに入れることを許可するポリシーが必要です。
以下は、組織の管理アカウントが所有する amzn-s3-demo-bucket
という名前が付けられた Amazon S3 バケット用ポリシのー例です。amzn-s3-demo-bucket
、region
、managementAccountID
、trailName
、o-organizationID
を、お使いの組織の値に置き換えます。
このバケットには、3 つのステートメントがあります。
-
最初のステートメントで、CloudTrail は Amazon S3 バケット上の Amazon S3
GetBucketAcl
アクションを呼び出すことができます。 -
2 番目のステートメントでは、証跡が組織の証跡からそのアカウントの証跡にのみ変更された場合にログに記録することを許可します。
-
3 番目のステートメントでは、組織証跡をログに記録することが可能になります。
ポリシー例には、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:::
amzn-s3-demo-bucket
", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region
:managementAccountID
:trail/trailName
" } } }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/AWSLogs/managementAccountID
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceArn": "arn:aws:cloudtrail:region
:managementAccountID
:trail/trailName
" } } }, { "Sid": "AWSCloudTrailOrganizationWrite20150319", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/AWSLogs/o-organizationID
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceArn": "arn:aws:cloudtrail:region
:managementAccountID
:trail/trailName
" } } } ] }
このポリシー例では、メンバーアカウントのユーザーが組織用に作成されたログファイルにアクセスすることを許可していません。デフォルトでは、組織のログファイルは管理アカウントにのみアクセスできます。メンバーアカウントの IAM ユーザーに対して Amazon S3 バケットへの読み取りアクセスを許可する方法については、「AWS アカウント間での CloudTrail ログファイルを共有する」を参照してください。
Amazon S3 バケットポリシーのトラブルシューティング
以下のセクションでは、S3 バケットポリシーをトラブルシューティングする方法について説明します。
注記
証跡を不適切な設定 (S3 バケットに到達できない状態など) にすると、CloudTrail は 30 日間、S3 バケットへのログファイルの再配信を試みます。これらの配信試行イベントには標準の CloudTrail 料金が適用されます。証跡の不適切な設定による課金を避けるには、その証跡を削除する必要があります。
一般的な 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つまたは複数の条件キーを追加してください。次の例は、推奨されるポリシーの設定を示しています。amzn-s3-demo-bucket
、[optionalPrefix]/
、myAccountID
、region
、および trailName
を設定に適切な値に置き換えます。
例 サービスプリンシパル名を使用したバケットポリシーの例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSCloudTrailAclCheck20150319",
"Effect": "Allow",
"Principal": {"Service": "cloudtrail.amazonaws.com"},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket
",
"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:::amzn-s3-demo-bucket
/[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 バケットのログファイルプレフィックスを更新するには
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
プレフィックスを変更するバケットを選択し、[Permissions] (アクセス許可) を選択します。
-
[編集] を選択します。
-
バケットポリシーで、
s3:PutObject
アクションの下で、Resource
エントリを編集して、必要に応じてログファイルprefix/
を追加、変更、削除します。"Action": "s3:PutObject", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/prefix/
AWSLogs/myAccountID
/*", -
[Save] (保存) を選択します。
CloudTrail コンソール (https://console.aws.amazon.com/cloudtrail/
) を開きます。 -
証跡を選択し、Storage location の場合は鉛筆アイコンをクリックして、バケットの設定を編集します。
-
S3 バケット の場合は、変更するプレフィックスを持つバケットを選択します。
-
Log file prefix の場合は、バケットポリシーに入力したプレフィックスに一致するようにプレフィックスを更新します。
-
[Save] (保存) を選択します。
追加リソース
S3 バケットポリシーの詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットポリシーの使用」を参照してください。