

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

# 需要额外权限 [V1] 的日志记录
<a name="AWS-vended-logs-permissions"></a>

有些 AWS 服务使用通用基础设施将其日志发送到日 CloudWatch 志、Amazon S3 或 Firehose。要使上表中列出的 AWS 服务能够将其日志发送到这些目的地，您必须以具有特定权限的用户身份登录。

此外，必须向 AWS 授予权限才能发送日志。 AWS 可以在设置日志时自动创建这些权限，也可以在设置日志之前先自己创建这些权限。对于跨账户传输，您必须自己手动创建权限策略。

如果您选择在您或您的组织中的某人首次设置日志发送时 AWS 自动设置必要的权限和资源策略，则设置发送日志的用户必须具有一定的权限，如本节后面所述。或者，您可以自行创建资源策略，这样设置日志发送的用户就不需要那么多权限。

以下主题提供了每个目标的更多详细信息。

**Topics**
+ [发送到日志的 CloudWatch 日志](AWS-logs-infrastructure-CWL.md)
+ [发送到 Amazon S3 的日志](AWS-logs-infrastructure-S3.md)
+ [日志发送至 Firehose](AWS-logs-infrastructure-Firehose.md)

# 发送到日志的 CloudWatch 日志
<a name="AWS-logs-infrastructure-CWL"></a>

**重要**  
在将以下列表中的日志类型设置为发送到 Lo CloudWatch gs 时，如果需要，可以 AWS 创建或更改与接收日志的日志组关联的资源策略。继续阅读本节，查看详细信息。

当将上一节表中列出的日志类型发送到 Log CloudWatch s 时，本节适用：

**用户权限**

为了能够设置首次向 Logs 发送任何此类 CloudWatch 日志，您必须使用具有以下权限的账户登录。
+ `logs:CreateLogDelivery`
+ `logs:PutResourcePolicy`
+ `logs:DescribeResourcePolicies`
+ `logs:DescribeLogGroups`
**注意**  
当您指定 `logs:DescribeLogGroups`、`logs:DescribeResourcePolicies` 或 `logs:PutResourcePolicy` 权限时，请确保将其 `Resource` 行的 ARN 设置为使用 `*` 通配符，而不是仅指定单个日志组名称。例如，`"Resource": "arn:aws:logs:us-east-1:111122223333:log-group:*"`

如果这些类型的日志中的任何一种已发送到日志中的某个 CloudWatch 日志组，则要设置向同一日志组发送另一类此类日志，您只需要该`logs:CreateLogDelivery`权限即可。

**日志组和资源策略**

接收日志的日志组必须具有包含特定权限的资源策略。如果日志组当前没有资源策略，并且设置日志记录的用户拥有该日志组的`logs:PutResourcePolicy``logs:DescribeResourcePolicies`、和`logs:DescribeLogGroups`权限，则在您开始将日志发送到 CloudWatch Logs 时， AWS 会自动为其创建以下策略。对于新创建的订阅，资源策略是在日志组级别配置的，其最大大小为 51,200 字节。如果现有的账户级资源策略已经通过通配符授予权限，则不会创建单独的日志组级别策略。要检查特定日志组的 LogGroup 级别资源策略，请使用将`--resource-arn`参数设置为日志组 ARN 且参数设置为的`describe-resource-policies`命令。`--policy-scope` `RESOURCE`

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "delivery.logs.amazonaws.com"
                ]
            },
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:111122223333:log-group:my-log-group:log-stream:*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": [
                        "0123456789"
                    ]
                },
                "ArnLike": {
                    "aws:SourceArn": [
                        "arn:aws:logs:us-east-1:111122223333:*"
                    ]
                }
            }
        }
    ]
}
```

------

日志组的资源策略限制为 51,200 字节。一旦达到此限制，AWS 就无法添加新权限。这要求客户手动修改策略，以授予`delivery.logs.amazonaws.com`服务主体对`logs:CreateLogStream`和`logs:PutLogEvents`操作的权限。客户应使用带有通配符的日志组名称前缀，例如`/aws/vendedlogs/*`并在将来创建 Future Delivery 时使用此日志组名称。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "delivery.logs.amazonaws.com"
                ]
            },
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:111122223333:log-group:my-log-group/aws/vendedlogs/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": [
                        "0123456789"
                    ]
                },
                "ArnLike": {
                    "aws:SourceArn": [
                        "arn:aws:logs:us-east-1:111122223333:*"
                    ]
                }
            }
        }
    ]
}
```

------

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

将日志设置为发送到 Amazon S3 时，如果需要，可以 AWS 创建或更改与接收日志的 S3 存储桶关联的资源策略。

直接发布到 Amazon S3 的日志将发布到您指定的现有存储桶。每 5 分钟将在指定的存储桶中创建一个或多个日志文件。

当您首次将日志发送到 Amazon S3 存储桶时，发送日志的服务会记录存储桶的拥有者，以确保日志仅发送到属于该账户的存储桶。因此，要更改 Amazon S3 存储桶拥有者，您必须在原始服务中重新创建或更新日志订阅。

**注意**  
CloudFront 使用的权限模型与其他向 S3 发送已售日志的服务不同。有关更多信息，请参阅[配置标准日志记录和访问日志文件所需的权限](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#AccessLogsBucketAndFileOwnership)。  
此外，如果您对 CloudFront 访问日志使用相同的 S3 存储桶和另一个日志源，则在存储桶上启用 ACL CloudFront 也会向使用此存储桶的所有其他日志源授予权限。

**重要**  
如果您要将日志发送到 Amazon S3 存储桶，并且存储桶策略包含 `NotAction` 或 `NotPrincipal` 元素，则自动向存储桶添加日志传输权限和创建日志订阅将会失败。为了成功创建日志订阅，您需要手动将日志传输权限添加到存储桶策略，然后创建日志订阅。有关更多信息，请参阅本节中的说明。  
如果存储桶使用客户托管密 AWS KMS 钥进行服务器端加密，则您还必须为客户托管密钥添加密钥策略。有关更多信息，请参阅 [Amazon S3 存储桶服务器端加密](#AWS-logs-SSE-KMS-S3)。  
如果目标存储桶启用了 SSE-KMS 和存储桶密钥，则附加的客户管理型 KMS 密钥策略将不再按预期对所有请求工作。有关更多信息，请参阅[使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)。  
如果您使用的是带有客户托管 AWS KMS 密钥的销售日志和 S3 加密，则在配置存储桶时必须使用完全限定的密 AWS KMS 钥 ARN 而不是密钥 ID。有关更多信息，请参阅 [ put-bucket-encryption](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-encryption.html)。

**用户权限**

若要能够设置首次将这些类型日志中的任一种日志发送到 Amazon S3，您必须登录具有以下权限的账户。
+ `logs:CreateLogDelivery`
+ `S3:GetBucketPolicy`
+ `S3:PutBucketPolicy`

如果其中任何一种类型的日志已被发送到 Amazon S3 存储桶，要设置将其中另一种日志也发送到同一存储桶，您只需要 `logs:CreateLogDelivery` 权限。

**S3 存储桶资源策略**

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

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "AWSLogDeliveryWrite20150319",
    "Statement": [
        {
            "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": [
                        "0123456789"
                    ]
                },
                "ArnLike": {
                    "aws:SourceArn": [
                        "arn:aws:logs:us-east-1:111122223333:*"
                    ]
                }
            }
        },
        {
            "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:*"
                    ]
                }
            }
        }
    ]
}
```

------

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

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

**注意**  
在某些情况下， AWS 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"></a>

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

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

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

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

如果选择 SSE-KMS，则必须使用客户托管式密钥，因为此场景不支持使用 AWS 托管式密钥。当您使用客户托管 AWS 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:*"]
        }
        }
}
```

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

# 日志发送至 Firehose
<a name="AWS-logs-infrastructure-Firehose"></a>

当前一部分的表中列出的日志类型发送到 Firehose 时，本部分适用：

**用户权限**

若要能够设置首次将这些类型日志中的任一种日志发送到 Firehose，您必须登录具有以下权限的账户。
+ `logs:CreateLogDelivery`
+ `firehose:TagDeliveryStream`
+ `iam:CreateServiceLinkedRole`

如果其中任何一种日志已被发送到 Firehose，要设置将其中另一种日志也发送到 Firehose，您只需要 `logs:CreateLogDelivery` 和 `firehose:TagDeliveryStream` 权限。

**用于权限的 IAM 角色**

由于 Firehose 不使用资源策略， AWS 因此在设置要发送到 Firehose 的日志时会使用 IAM 角色。 AWS 创建名**AWSServiceRoleForLogDelivery**为的服务相关角色。此服务相关角色包括以下权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch",
                "firehose:ListTagsForDeliveryStream"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/LogDeliveryEnabled": "true"
                }
            },
            "Effect": "Allow"
        }
    ]
}
```

------

此服务相关角色授予标签设置为的所有 Firehose 传送流`LogDeliveryEnabled`的权限。`true` AWS 在设置日志记录时，将此标签提供给目标传送流。

此服务相关角色还具有允许 `delivery.logs.amazonaws.com` 服务委托人来代入所需服务相关角色的信任策略。该信任策略如下所示：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------