为成本和使用情况报告设置 Amazon S3 存储桶
要接收账单报告,必须在您的 AWS 账户中具有 Amazon S3 存储桶以接收和存储您的报告。在账单控制台中创建成本和使用情况报告时,您可以选择您拥有的现有 Amazon S3 存储桶或创建新的存储桶。无论哪种情况,都要求您检查并确认应用了以下默认存储桶策略。在创建成本和使用情况报告后,如果在 Amazon S3 控制台中编辑该策略或更改存储桶所有者,将导致 AWS 无法传送您的报告。在将账单报告数据存储在 Amazon S3 存储桶时,将按标准 Amazon S3 费率计费。有关更多信息,请参阅 配额和限制。
在创建成本和使用情况报告时,将为每个存储桶应用以下策略:
{ "Statement": [ { "Effect": "Allow", "Principal": { "Service": "billingreports.amazonaws.com" }, "Action": [ "s3:GetBucketAcl", "s3:GetBucketPolicy" ], "Resource":"arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cur:us-east-1:${AccountId}:definition/*", "aws:SourceAccount": "${AccountId}" } } }, { "Sid": "Stmt1335892526596", "Effect": "Allow", "Principal": { "Service": "billingreports.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cur:us-east-1:${AccountId}:definition/*", "aws:SourceAccount": "${AccountId}" } } } ] }
该默认策略有助于确保存储桶所有者可以读取成本和使用情况报告数据,并确认存储桶由创建成本和使用情况报告的账户拥有。具体来说:
-
每次传送成本和使用情况报告时,AWS 先确认存储桶是否仍由设置报告的账户拥有。如果存储桶所有权发生变化,则不会传送报告。这有助于确保账户的账单数据安全性。该存储桶策略允许 AWS(
"Effect": "Allow")检查哪个账户拥有存储桶("Action": ["s3:GetBucketAcl", "s3:GetBucketPolicy")。 -
要将报告传送到您的 Amazon S3 存储桶,AWS 需要具有该存储桶的写入权限。为此,存储桶策略为 AWS 成本和使用情况报告服务(
"Service": "billingreports.amazonaws.com")授予("Effect": "Allow")权限,以将报告传送("Action": "s3:PutObject")到您拥有的存储桶("Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*")。该存储桶策略不会为 AWS 授予读取或删除存储桶中的任何对象的权限,包括传送后的成本和使用情况报告。
-
对于启用了 ACL 的 Amazon S3 存储桶,AWS 在传送报告时进一步将
BucketOwnerFullControlACL 应用于报告。默认情况下,Amazon S3 对象(例如这些报告)只能由写入它们的用户或服务主体读取。要为您或存储桶所有者提供读取报告的权限,AWS 必须应用BucketOwnerFullControlACL。ACL 为存储桶所有者授予这些报告的Permission.FullControl权限。不过,建议禁用 ACL 并使用 Amazon S3 存储桶策略控制访问。请注意,Amazon S3 已更改默认设置;对于新创建的存储桶,默认禁用 ACL。有关更多信息,请参阅为您的存储桶控制对象所有权和禁用 ACL。
如果您在账单控制台中看到成本和使用情况报告出现无效存储桶错误,应验证该策略和存储桶所有权在报告设置后是否未发生变化。