

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

# 使用终端节点策略控制通过 VPC 终端节点进行的访问
<a name="vpc-vpce.policy"></a>

本主题介绍如何将策略附加到 VPC 端点以控制对您的应用程序（您的服务）和 Elastic Beanstalk 环境的访问。

终端节点策略是一个 AWS Identity and Access Management (IAM) 资源策略，用于控制从终端节点到指定服务的访问权限。终端节点策略特定于某个终端节点。它独立于您的环境可能拥有的任何用户或实例 IAM 策略，并且不会覆盖或替换这些策略。

默认情况下，VPC 终端节点允许对与其关联的服务进行完全访问。当您创建或修改端点时，可以将*端点策略*附加到它以控制对与服务关联的特定资源的访问。有关编写和使用 VPC 端点策略的详细信息，请参阅《*AWS PrivateLink 指南*》中的 [Control access to VPC endpoints using endpoint policies](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。

**注意**  
创建限制性端点策略时，您可能需要向所需资源添加特定权限，以便端点策略不会阻止对这些资源的访问。这样做可确保您的环境继续部署并正常运行。

以下示例拒绝所有用户通过 VPC 终端节点终止环境的权限，并允许对所有其他操作进行完全访问。

```
{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "elasticbeanstalk:TerminateEnvironment",
            "Effect": "Deny",
            "Resource": "*",
            "Principal": "*"
        }
    ]
}
```

## 限制性 VPC 端点策略所需的 Amazon S3 存储桶权限
<a name="AWSHowTo.S3.VPCendpoints"></a>

如果您向 VPC 端点策略添加限制，则必须包含特定的 Amazon S3 存储桶权限以确保您的环境继续部署并正常运行。本节介绍所需的 S3 存储桶并包含示例策略。

**Topics**
+ [用于存储资产以管理环境平台的 S3 存储桶](#AWSHowTo.S3.VPCendpoints.required-permissions.assets)
+ [S3 存储桶由 CloudFormation](#AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation)
+ [客户账户拥有、用于存储源代码和其他项的 S3 存储桶](#AWSHowTo.S3.VPCendpoints.required-permissions.items)
+ [客户账户拥有、支持 Docker 注册表身份验证的 S3 存储桶](#AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth)
+ [更新 VPC 端点策略](#AWSHowTo.S3.VPCendpoints.required-permissions.assets.permissions)

### 用于存储资产以管理环境平台的 S3 存储桶
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets"></a>

Elastic Beanstalk 服务拥有 S3 存储桶，用于存储与解决方案堆栈（平台版本）关联的资产。这些资产包括配置文件、示例应用程序和可用的实例类型。当 Elastic Beanstalk 创建和管理您的环境时，它会从资产存储桶中检索每个相应平台版本的所需信息。 AWS 区域

#### S3 存储桶 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.arn"></a>

 `arn:aws:s3:::elasticbeanstalk-samples-region` 

Amazon Linux 2 和更高版本
+  `arn:aws:s3:::elasticbeanstalk-platform-assets-region` 
**注意**  
对于 *BJS* 区域，存储桶名称遵循不同的约定。使用字符串 *public-beta-cn-north-1* 代替*region*。例如 `arn:aws:s3:::elasticbeanstalk-platform-assets-public-beta-cn-north-1`。

Windows Server、Amazon Linux（AMI）、Amazon Linux 2 及更高版本
+  `arn:aws:s3:::elasticbeanstalk-env-resources-region` 
+  `arn:aws:s3:::elasticbeanstalk-region` 

**注意**  
在某些地区，platform-assets 和 env-resources 存储桶的存储桶名称遵循不同的惯例。有关详细信息，请参阅下面区域特定的存储桶命名模式部分。

##### 区域特定的存储桶 ARN 模式
<a name="AWSHowTo.S3.VPCendpoints.region-specific-buckets.collapsed"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/vpc-vpce.policy.html)

#### 操作
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.operations"></a>

GetObject

#### VPC 端点策略示例
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.example"></a>

以下示例演示了如何提供对美国东部（俄亥俄州）区域（us-east-2）中 Elastic Beanstalk 操作所需的 S3 存储桶的访问权限。该示例列出了 Amazon Linux 和 Windows Server 平台的所有存储桶。更新您的策略以仅包含适用于您环境的操作系统的存储桶。

##### 策略示例
<a name="aAWSHowTo.S3.VPCendpoints.required-permissions.assets.example.collapsed"></a>

**重要**  
我们建议您避免在该策略中使用通配符 (\$1) 以替代特定区域。例如，使用 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*` 而不使用 `arn:aws:s3:::cloudformation-waitcondition-*/*`。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域，我们建议每个区域重复使用第一个 `Statement` 块。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToAWSResources",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": ["s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-platform-assets-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-samples-us-east-2/*"
            ]
         }
    ]
}
```

------

### S3 存储桶由 CloudFormation
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation"></a>

Elastic CloudFormation Beanstalk 用于为您的环境创建资源。 CloudFormation 在每个存储桶中拥有 S3 存储桶 AWS 区域 ，以监控对等待条件的响应。

像 Elastic Beanstalk 这样的服务通过向拥有的 S3 存储桶的预签名 Amazon S3 网址发送请求来 CloudFormation 进行通信。 CloudFormation CloudFormation 使用`cloudformation.amazonaws.com`服务主体创建预签名的 Amazon S3 网址。

有关更多详细信息，请参阅*AWS CloudFormation 用户指南 CloudFormation *[中的 VPC 终端节点注意事项](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-vpce-bucketnames.html#cfn-setting-up-vpc-considerations)。要了解有关预签名的更多信息 URLs，请参阅 *Amazon S3 用户 URLs*指南中的[使用预签名](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html)。

#### S3 存储桶 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.arn"></a>
+  `arn:aws:s3:::cloudformation-waitcondition-region` 

  使用等待条件时，区域名称需要包含破折号。例如，*us-west-2*。
+  `arn:aws:s3:::cloudformation-custom-resource-response-region` 

  使用自定义资源时，区域名称不包含破折号。例如，*uswest2*。

#### 操作
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.operations"></a>

GetObject

#### VPC 端点策略示例
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.example"></a>

以下示例演示了如何提供对美国东部（俄亥俄州）区域（us-east-2）中 Elastic Beanstalk 操作所需的 S3 存储桶的访问权限。

##### 策略示例
<a name="aAWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.example.collapsed"></a>

**重要**  
我们建议您避免在该策略中使用通配符 (\$1) 以替代特定区域。例如，使用 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*` 而不使用 `arn:aws:s3:::cloudformation-waitcondition-*/*`。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域，我们建议每个区域重复使用第一个 `Statement` 块。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToCloudFormation",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": ["s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::cloudformation-waitcondition-us-east-2/*",
                "arn:aws:s3:::cloudformation-custom-resource-response-us-east-2/*"
            ]
         }
    ]
}
```

------

### 客户账户拥有、用于存储源代码和其他项的 S3 存储桶
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items"></a>

此存储桶归拥有环境的 AWS 客户账户所有。它存储特定于您的环境的资源，例如源代码和请求的日志。

#### S3 存储桶 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items.arn"></a>

 `arn:aws:s3:::elasticbeanstalk-region-account-id` 

#### 操作
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items.operations"></a>
+ GetObject
+ GetObjectAcl
+ PutObject
+ PutObjectAcl
+ ListBucket

#### VPC 端点策略示例
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items.example"></a>

以下示例说明了如何为美国东部（俄亥俄州）地区（us-east-2）的 Elastic Beanstalk 操作以及示例账户 ID 为 123456789012 提供对 S3 存储桶的访问权限。 AWS 

##### 策略示例
<a name="aAWSHowTo.S3.VPCendpoints.required-permissions.items.example.collapsed"></a>

**重要**  
我们建议您避免在该策略中使用通配符 (\$1) 以替代特定区域。例如，使用 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*` 而不使用 `arn:aws:s3:::cloudformation-waitcondition-*/*`。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域，我们建议每个区域重复使用第一个 `Statement` 块。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToCustomerItems",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
               "s3:GetObject",
               "s3:GetObjectAcl",
               "s3:PutObject",
               "s3:PutObjectAcl",
               "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/*"
            ]
         }
    ]
}
```

------

### 客户账户拥有、支持 Docker 注册表身份验证的 S3 存储桶
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth"></a>

此存储桶仅适用于基于 Docker 平台的环境。该存储桶存储了一个文件，该文件用于对位于客户预置的 S3 存储桶上的私有 Docker 注册表进行身份验证。有关更多信息，请参阅本指南 Docker 平台章节中的[使用 `Dockerrun.aws.json` v3 文件](docker-configuration.remote-repo.md#docker-configuration.remote-repo.dockerrun-aws)。

#### S3 存储桶 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.arn"></a>

ARN 因客户账户而异。

S3 存储桶 ARN 具有以下格式：`arn:aws:s3:::bucket-name`

#### 操作
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.operations"></a>

GetObject

#### VPC 端点策略示例
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.example"></a>

以下示例说明如何提供对名称为 amzn-s3-demo-bucket1 的 S3 存储桶的访问权限。

##### 策略示例
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.example.collapsed"></a>

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

****  

```
  {
  "Version":"2012-10-17",		 	 	 
  "Statement": [
     {
        "Sid": "AllowRequestsToDockerRegistryAuth",
         "Effect": "Allow",
         "Action": [
            "s3:GetObject"
          ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1"
      ]
    }
  ]
}
```

------

### 更新 VPC 端点策略
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.permissions"></a>

由于 VPC 端点仅附加了一个策略，因此您必须将所有权限合并到一个策略中。下面的示例将前面的所有示例合并为一个。

有关编写和使用 VPC 端点策略的详细信息，请参阅《*AWS PrivateLink 指南*》中的 [Control access to VPC endpoints using endpoint policies](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。

与前面的示例一样，以下示例演示了如何提供对美国东部（俄亥俄州）区域（us-east-2）中的 Elastic Beanstalk 操作所需的 S3 存储桶的访问权限。它还包括带有示例 AWS 账户 ID 为 123456789012 和示例存储桶名称 amzn-s3-demo-bucket1 的存储桶。

**重要**  
我们建议您避免在该策略中使用通配符 (\$1) 以替代特定区域。例如，使用 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*` 而不使用 `arn:aws:s3:::cloudformation-waitcondition-*/*`。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域，我们建议每个区域重复使用第一个 `Statement` 块。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToAWSResources",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-platform-assets-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-samples-us-east-2/*"
            ]
        },
        {
            "Sid": "AllowRequestsToCloudFormation",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::cloudformation-waitcondition-us-east-2/*",
                "arn:aws:s3:::cloudformation-custom-resource-response-us-east-2/*"
            ]
        },
        {
            "Sid": "AllowRequestsToCustomerItems",
            "Effect": "Allow",
            "Action": [
               "s3:GetObject",
               "s3:GetObjectAcl",
              "s3:PutObject",
               "s3:PutObjectAcl",
               "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/*"
            ]
        },
        {
            "Sid": "AllowRequestsToDockerRegistryAuth",
            "Effect": "Allow",
            "Action": [
            "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1"
            ]
        }
    ]
}
```

------