Amazon S3 存储桶的 AWS Config 传输通道权限 - AWS Config

Amazon S3 存储桶的 AWS Config 传输通道权限

重要

本页介绍如何设置 Amazon S3 存储桶的 AWS Config 传输通道。此页面不介绍 AWS Config 配置记录器可以记录的 AWS::S3::Bucket 资源类型。

默认情况下,Amazon S3 存储桶和对象都是私有的。只有创建存储桶的 AWS 账户(资源所有者)才有访问权限。资源所有者可以通过创建访问策略来向其他资源和用户授予访问权限。

当 AWS Config 自动为您创建 S3 存储桶时,它会添加所需的权限。但是,如果您指定现有 S3 存储桶,则必须手动添加这些权限。

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

AWS Config 使用您分配给配置记录器的 IAM 角色将配置历史记录和快照传送到您账户中的 S3 存储桶。对于跨账户交付,AWS Config 会首先尝试使用分配的 IAM 角色。如果存储桶策略未授予 WRITE 对 IAM 角色的访问权限,则 AWS Config 将使用 config.amazonaws.com 服务主体。存储桶策略必须授予对 config.amazonaws.com.rproxy.govskope.caWRITE 访问权限才能完成传输。成功传输后,AWS Config 保留其向跨账户 S3 存储桶传输的所有对象的所有权。

AWS Config 使用您分配给配置记录器的 IAM 角色调用 Amazon S3 HeadBucket API,以确认 S3 存储桶是否存在及其位置。如果 AWS Config 没有必要的权限进行确认,您会在 AWS CloudTrail 日志中看到 AccessDenied 错误。但是,即使 AWS Config 没有必要的权限来确认 S3 存储桶是否存在及其位置,AWS Config 仍然可以传输配置历史记录和快照。

最小权限

Amazon S3 HeadBucket API 需要执行 s3:ListBucket 操作。

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

AWS Config 服务相关角色无权将对象放入 Amazon S3 存储桶。如果您使用服务相关角色设置AWS Config,AWS Config 会使用 config.amazonaws.com 服务主体传输配置历史记录和快照。您的账户或跨账户目标中的 S3 存储桶策略必须包括 AWS Config 服务主体的权限才能写入对象。

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

完成以下步骤,让 AWS Config 将配置历史记录和快照传输至 Amazon S3 存储桶。

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

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

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

  4. 选择权限

  5. 选择 Edit Bucket Policy

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

    安全最佳实践

    强烈建议您使用 AWS:SourceAccount 条件限制存储桶策略中的访问权限。这样可以确保 AWS Config 仅代表预期用户授予访问权限。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AWSConfigBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "AWS:SourceAccount": "sourceAccountID" } } }, { "Sid": "AWSConfigBucketExistenceCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "AWS:SourceAccount": "sourceAccountID" } } }, { "Sid": "AWSConfigBucketDelivery", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/[optional] prefix/AWSLogs/sourceAccountID/Config/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "AWS:SourceAccount": "sourceAccountID" } } } ] }
  7. 替换存储桶策略中的以下值:

    • amzn-s3-demo-bucket:AWS Config 将向其传送配置历史记录和快照的 Amazon S3 存储桶的名称。

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

    • sourceAccountID — AWS Config 将在其中提供配置历史记录和快照的账户的 ID。

  8. 选择 Save,然后选择 Close

AWS:SourceAccount 条件将 AWS Config 操作限制在指定 AWS 账户 对于组织内向单个 S3 存储桶传输的多账户配置,请使用带有 AWS Organizations 条件键的 IAM 角色而不是服务相关角色。例如。AWS:PrincipalOrgID有关更多信息,请参阅《AWS Organizations 用户指南》中的管理组织的访问权限

AWS:SourceArn 条件将 AWS Config 操作限制在指定的传输通道内。AWS:SourceArn 格式如下所示:arn:aws:config:sourceRegion:123456789012

例如,要将账户 123456789012 的 S3 存储桶访问权限限制为美国东部(弗吉尼亚州北部)区域的传输通道,可添加以下条件:

"ArnLike": {"AWS:SourceArn": "arn:aws:config:us-east-1:123456789012:"}

跨账户传输时 Amazon S3 存储桶的必需权限

当 AWS Config 配置为将配置历史记录和快照传输至另一个账户中的 Amazon S3 存储桶(跨账户设置),且配置记录器与为传输通道指定的 S3 存储桶位于不同的 AWS 账户时,需要以下权限:

  • 您分配给配置记录器的 IAM 角色需要明确的权限才能执行 s3:ListBucket 操作。这是因为 AWS Config 使用此 IAM 角色调用 Amazon S3 HeadBucket API 来确定存储桶的位置。

  • S3 存储桶策略必须包括分配给配置记录器的 AWS Config 服务委托人和 IAM 角色的权限。

下面是一个示例存储桶策略配置:

{ "Sid": "AWSConfigBucketExistenceCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com", "AWS": "IAM Role-Arn assigned to the configuration recorder" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "AWS:SourceAccount": "sourceAccountID" } } }