针对流日志的 Amazon S3 存储桶权限 - Amazon Virtual Private Cloud

针对流日志的 Amazon S3 存储桶权限

默认情况下,Amazon S3 存储桶以及其中包含的对象都是私有的。只有存储桶拥有者才能访问存储桶和其中存储的对象。不过,存储桶拥有者可以通过编写访问策略来向其他资源和用户授予访问权限。

如果创建流日志的用户拥有存储桶并且对它具有 PutBucketPolicyGetBucketPolicy 权限,则我们会自动将以下策略附加到存储桶。此策略将覆盖附加到存储桶的任何现有策略。

否则,存储桶拥有者必须将此策略添加到存储桶中,以指定流日志创建者的 AWS 账户 ID,否则流日志创建失败。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的使用存储桶策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "my-s3-arn/*", "Condition": { "StringEquals": { "aws:SourceAccount": account_id, "s3:x-amz-acl": "bucket-owner-full-control" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:region:account_id:*" } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket_name", "Condition": { "StringEquals": { "aws:SourceAccount": account_id }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:region:account_id:*" } } } ] }

您为 my-s3-arn 指定的 ARN 取决于您是否使用 Hive 兼容的 S3 前缀。

  • 默认前缀

    arn:aws:s3:::bucket_name/optional_folder/AWSLogs/account_id/*
  • Hive 兼容的 S3 前缀

    arn:aws:s3:::bucket_name/optional_folder/AWSLogs/aws-account-id=account_id/*

最佳实践是向日志传输服务主体(而不是单个 AWS 账户 ARN)授予这些权限。此外,最好是使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。源帐户是流日志的所有者,并且源 ARN 是日志服务的通配符(*) ARN。