

# 针对流日志的 Amazon S3 存储桶权限
<a name="flow-logs-s3-permissions"></a>

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

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

否则，存储桶拥有者必须将此策略添加到存储桶中，以指定流日志创建者的 AWS 账户 ID，否则流日志创建失败。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[使用存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

您为 *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:SourceAccount` 和 `aws:SourceArn` 条件键来防止出现[混淆代理人问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。源账户是流日志的所有者，并且源 ARN 是日志服务的通配符（\$1） ARN。

请注意，日志传输服务调用 `HeadBucket` Amazon S3 API 操作来验证 S3 存储桶的存在及位置。您无需授予日志传输服务调用此操作的权限；即使它无法确认 S3 存储桶的存在及其位置，仍会传输 VPC 流日志。但是，CloudTrail 日志中会出现 `HeadBucket` 调用 `AccessDenied` 错误。