

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

# 为网络负载均衡器启用访问日志
<a name="enable-access-logs"></a>

在为负载均衡器启用访问日志记录时，您必须指定负载均衡器将在其中存储日志的 S3 存储桶的名称。存储桶必须具有为 Elastic Load Balancing 授予写入存储桶的权限的存储桶策略。

**重要**  
仅当负载均衡器具有 TLS 侦听器且日志仅包含有关 TLS 请求的信息时，才创建访问日志。

## 存储桶要求
<a name="access-logging-bucket-requirements"></a>

您可以使用现有存储桶，也可以创建专门用于访问日志的存储桶。存储桶必须满足以下要求。

**要求**
+ 存储桶必须位于与负载均衡器相同的区域中。该存储桶和负载均衡器可由不同的账户拥有。
+ 您指定的前缀不得包含 `AWSLogs`。我们会在您指定的存储桶名称和前缀后添加以 `AWSLogs` 开头的文件名部分。
+ 存储桶必须具有授予将访问日志写入存储桶的权限的存储桶策略。存储桶策略是 JSON 语句的集合，这些语句以访问策略语言编写，用于为存储桶定义访问权限。

**存储桶策略的示例**  
以下是示例策略。对于`Resource`元素，请{{amzn-s3-demo-destination-bucket}}替换为访问日志的 S3 存储桶的名称。{{Prefix/}}如果您未使用存储桶前缀，请务必省略。对于`aws:SourceAccount`，请指定负载均衡器 AWS 账户的 ID。对于`aws:SourceArn`，将{{region}}和{{012345678912}}，分别替换为负载均衡器的区域和账户 ID。

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

****  

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

------<a name="access-log-bucket-encryption"></a>

**加密**

您可以使用下列任何一种方式为 Amazon S3 访问日志存储桶启用服务器端加密：
+ Amazon S3 托管式密钥（SSE-S3）
+ AWS KMS 存储在 AWS Key Management Service (SSE-KMS) 中的密钥†

† 对于 Network Load Balancer 访问日志，您无法使用 AWS 托管密钥，必须使用客户托管密钥。

*有关更多信息，请参阅 [Amazon S3 用户指南中的指定 Amazon S3 加密 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-s3-encryption.html) [和使用 AWS KMS (SSE-KMS) 指定服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)。*

密钥策略必须允许服务对日志进行加密和解密。以下是示例策略。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 配置访问日志
<a name="configure-access-logs"></a>

使用以下过程配置访问日志，以捕获请求信息并将日志文件传输到 S3 存储桶。

------
#### [ Console ]

**启用访问日志**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择您的负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 对于**监控**，打开**访问日志**。

1. 对于 **S3 URI**，输入日志文件的 S3 URI。您指定的 URI 取决于您是否使用前缀。
   + 带有前缀的 URI: s3:/{{amzn-s3-demo-logging-bucket}}/{{logging-prefix}}
   + 不带前缀的 URI: s3://{{amzn-s3-demo-logging-bucket}}

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**启用访问日志**  
使用带有相关属性的[modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html)命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn {{load-balancer-arn}} \
    --attributes \
        Key=access_logs.s3.enabled,Value=true \
        Key=access_logs.s3.bucket,Value={{amzn-s3-demo-logging-bucket}} \
        Key=access_logs.s3.prefix,Value={{logging-prefix}}
```

------
#### [ CloudFormation ]

**启用访问日志**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含相关属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-nlb
      Type: network
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "access_logs.s3.enabled"
          Value: "true"
        - Key: "access_logs.s3.bucket"
          Value: "{{amzn-s3-demo-logging-bucket}}"
        - Key: "access_logs.s3.prefix"
          Value: "{{logging-prefix}}"
```

------