

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

# 发送到 Amazon S3 的日志
<a name="AWS-logs-infrastructure-V2-S3"></a>

**用户权限**

要启用向 Amazon S3 发送日志，您必须使用以下权限登录。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadWriteAccessForLogDeliveryActions",
            "Effect": "Allow",
            "Action": [
                "logs:GetDelivery",
                "logs:GetDeliverySource",
                "logs:PutDeliveryDestination",
                "logs:GetDeliveryDestinationPolicy",
                "logs:DeleteDeliverySource",
                "logs:PutDeliveryDestinationPolicy",
                "logs:CreateDelivery",
                "logs:GetDeliveryDestination",
                "logs:PutDeliverySource",
                "logs:DeleteDeliveryDestination",
                "logs:DeleteDeliveryDestinationPolicy",
                "logs:DeleteDelivery",
                "logs:UpdateDeliveryConfiguration"
            ],
            "Resource": [
            "arn:aws:logs:{{us-east-1}}:{{111122223333}}:delivery:*",
    "arn:aws:logs:{{us-east-1}}:{{111122223333}}:delivery-source:*",
    "arn:aws:logs:{{us-east-1}}:{{111122223333}}:delivery-destination:*"
            ]
        },
        {
            "Sid": "ListAccessForLogDeliveryActions",
            "Effect": "Allow",
            "Action": [
                "logs:DescribeDeliveryDestinations",
                "logs:DescribeDeliverySources",
                "logs:DescribeDeliveries",
                "logs:DescribeConfigurationTemplates"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowUpdatesToResourcePolicyS3",
            "Effect": "Allow",
            "Action": [
                "s3:PutBucketPolicy",
                "s3:GetBucketPolicy"
            ],
            "Resource": "arn:aws:s3:::bucket-name"
        }
    ]
}
```

------

接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略，而且设置日志记录的用户对存储桶具有 `S3:GetBucketPolicy` 和 `S3:PutBucketPolicy` 权限，那么当您开始将日志发送到 Amazon S3 时， Amazon 会自动为其创建以下策略。

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

****  

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

------

在之前的策略中，对于 `aws:SourceAccount`，请指定将日志传送到此存储桶的账户 ID 列表。对于`aws:SourceArn`，在表单中指定生成日志的资源列表`arn:aws:logs:{{source-region}}:{{source-account-id}}:*`。 ARNs 

如果存储桶具有资源策略，但该策略不包含上一个策略中所示的语句，并且设置日志记录的用户对存储桶具有 `S3:GetBucketPolicy` 和 `S3:PutBucketPolicy` 权限，则该语句将附加到存储桶的资源策略中。

**注意**  
在某些情况下， Amazon CloudTrail 如果未授予`s3:ListBucket`权限，则可能会在中看到`AccessDenied`错误`delivery.logs.amazonaws.com`。为避免 CloudTrail日志中出现这些错误，您必须向授予`s3:ListBucket`权限，`delivery.logs.amazonaws.com`并且必须包含在前面的存储桶策略中设置的`s3:GetBucketAcl`权限中显示的`Condition`参数。为方便起见，可以直接将 `AWSLogDeliveryAclCheck` 更新为 `“Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]`，而不是创建一个新的 `Statement`

## Amazon S3 存储桶服务器端加密
<a name="AWS-logs-SSE-KMS-S3-V2"></a>

您可以通过使用 Amazon S3 托管密钥启用服务器端加密 (SSE-S3) 或使用存储在 (SSE-KMS) 中的密钥启用服务器端加密 (SSE-KMS) 来保护 Amazon S3 存储桶中的 Amazon Key Management Service 数据。 Amazon KMS 有关更多信息，请参阅[使用服务器端加密保护数据](https://docs.amazonaws.cn/AmazonS3/latest/userguide/serv-side-encryption.html)。

如果选择 SSE-S3，则不需要额外的配置。Amazon S3 处理加密密钥。

**警告**  
如果您选择 SSE-KMS，则必须使用客户托管密钥，因为这种情况不支持使用 Amazon 托管密钥。如果您使用 Amazon 托管密钥设置加密，则日志将以不可读的格式传送。

当您使用客户托管 Amazon KMS 密钥时，您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略（不是 S3 存储桶的存储桶策略）中，以便日志传输账户可以写入 S3 存储桶。

如果选择 SSE-KMS，则必须使用客户托管式密钥，因为此场景不支持使用 Amazon 托管式密钥。当您使用客户托管 Amazon KMS 密钥时，您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略（不是 S3 存储桶的存储桶策略）中，以便日志传输账户可以写入 S3 存储桶。

```
{
    "Sid": "Allow Logs Delivery to use the key", 
    "Effect": "Allow", 
    "Principal": {
        "Service": [ "delivery.logs.amazonaws.com" ] 
    }, 
    "Action": [ 
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": ["{{0123456789}}"]
        },
        "ArnLike": {
            "aws:SourceArn": ["arn:aws:logs:{{us-east-1}}:{{0123456789}}:delivery-source:*"]
        }
        }
}
```

对于 `aws:SourceAccount`，请指定将日志传送到此存储桶的账户 ID 列表。对于`aws:SourceArn`，在表单中指定生成日志的资源列表`arn:aws:logs:{{source-region}}:{{source-account-id}}:*`。 ARNs 