Amazon S3 存储桶的权限 - AWS Config
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon S3 存储桶的权限

默认情况下,所有 Amazon S3 存储桶和对象都是私有的。只有创建存储桶的 AWS 账户的资源所有者才能访问该存储桶。但是,资源所有者可以选择将访问权限授予其他资源和用户。要授予访问权限,其中一种方法是编写访问策略。

如果 AWS Config 自动为您创建 Amazon S3 存储桶(例如,如果您使用 AWS Config 控制台设置传递通道),那么这些权限将自动添加到 Amazon S3 存储桶中。但是,如果您指定现有 Amazon S3 存储桶,则您必须确保该 S3 存储桶具有相应权限。

注意

对象不继承其存储桶的权限。例如,如果您创建了一个存储桶并授予一个用户写入权限,则将无法访问此用户的对象,除非此用户显式授予您访问权限。

使用 IAM 角色时 Amazon S3 存储桶的必需权限

当 AWS Config 将配置信息(历史记录文件和快照)发送到您账户中的 Amazon S3 存储桶时,AWS Config 会担任您在设置 AWS Config 时分配的 IAM 角色。当 AWS Config 向另一账户中的 Amazon S3 存储桶发送配置信息时,AWS Config 会首先尝试使用该 IAM 角色,但如果该存储桶的访问策略未向此次尝试,则此次尝试将会失败。WRITE访问 IAM 角色的权限。在这种情况下,AWS Config 会再次发送这些信息,这次会以 AWS Config 服务委托人的身份发送。在交付成功之前,访问策略必须授予WRITEconfig.amazonaws.com委托人名称。这样一来,AWS Config 便会成为其向 S3 存储桶传递的对象的所有者。您必须将下面第 6 步中提到的一个访问策略附加到另一账户中的 Amazon S3 存储桶,以向 AWS Config 授予对 Amazon S3 存储桶的访问权限。

在 AWS Config 将日志传输到您的 Amazon S3 存储桶之前,AWS Config 会检查该存储桶是否存在以及该存储桶所在的 AWS 区域。AWS Config 尝试调用 Amazon S3HeadBucketAPI 来检查存储桶是否存在并获取存储桶区域。如果在执行位置检查时未提供定位存储桶的权限,您将看到AccessDeniedAWS CloudTrail 日志中的错误。但是,如果您未提供存储桶定位权限,日志会成功传输到您的 Amazon S3 存储桶。

使用服务相关角色时 Amazon S3 存储桶的必需权限

如果您使用服务相关角色来设置 AWS Config,则您需要将下面第 6 步中提到的一个访问策略附加到您自己的账户或其他账户中的 Amazon S3 存储桶,以向 AWS Config 授予对 Amazon S3 存储桶的访问权限。

向 AWS Config 授予对 Amazon S3 存储桶的访问权限

按照以下步骤向您自己的账户或其他账户中的 Amazon S3 存储桶添加访问策略。该访问策略允许 AWS Config 向 Amazon S3 存储桶发送配置信息。

  1. 使用该 S3 存储桶所属的账户登录 AWS 管理控制台。

  2. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  3. 选择您希望 AWS Config 用来传输配置项的存储桶,然后选择属性

  4. 选择 Permissions

  5. 选择 Edit Bucket Policy

  6. 将以下策略复制到 Bucket Policy Editor 窗口中:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSConfigBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": [ "config.amazonaws.com" ] }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::targetBucketName" }, { "Sid": "AWSConfigBucketExistenceCheck", "Effect": "Allow", "Principal": { "Service": [ "config.amazonaws.com" ] }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::targetBucketName" }, { "Sid": "AWSConfigBucketDelivery", "Effect": "Allow", "Principal": { "Service": [ "config.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::targetBucketName/[optional] prefix/AWSLogs/sourceAccountID-WithoutHyphens/Config/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
    注意

    AWS Config 归 AWS 所有,并不专门属于您的 AWS 账户或 AWS 组织中的链接账户。这意味着该服务不适用于组织 ID 或基于组织单位的条件。

    注意

    向您的 IAM 角色授予权限而不是 AWS Config 服务主体名称 (SPN) 时,请确保您的 IAM 角色具有PutObjectACL权限,以避免权限不足错误。有关 IAM 角色策略的示例,请参阅 Amazon S3 存储桶的 IAM 角色策略

  7. 替换存储桶策略中的以下值:

    • targetBucketName — AWS Config 将向其传输配置项的 Amazon S3 存储桶的名称。

    • [optional] prefix — Amazon S3 对象键的可选附加内容,可帮助在存储桶中创建类似文件夹的组织结构。

    • sourceAccountID-WithoutHyphens — AWS Config 将向目标存储桶传递配置项的账户的 ID。

  8. 选择 Save,然后选择 Close