

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用端點政策搭配 VPC 端點來控制存取
<a name="vpc-vpce.policy"></a>

本主題說明如何將政策連接至 VPC 端點，以控制對應用程式 （您的服務） 和 Elastic Beanstalk 環境的存取。

端點政策是 AWS Identity and Access Management (IAM) 資源政策，可控制從端點到指定服務的存取。端點政策是端點特有的。其與您環境可能擁有任何使用者或執行個體 IAM 政策是分開的，不會覆寫任何這類政策。

根據預設，VPC 端點允許完整存取與其相關聯的服務。當您建立或修改端點時，您可以將*端點政策*連接到它，以控制對與服務相關聯之特定資源的存取。如需撰寫和使用 VPC 端點政策的詳細資訊，請參閱《 *AWS PrivateLink 指南*》中的[使用端點政策控制對 VPC 端點的存取](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)
+ [客戶帳戶擁有的 S3 儲存貯體，以支援 Docker 登錄檔身分驗證](#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* 用於取代{{區域}}。例如 `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}}` 

**注意**  
在某些區域中，平台資產和 env-resources 儲存貯體的儲存貯體名稱遵循不同的慣例。如需詳細資訊，請參閱以下區域特定的儲存貯體命名模式一節。

##### 區域特定的儲存貯體 ARN 模式
<a name="AWSHowTo.S3.VPCendpoints.region-specific-buckets.collapsed"></a>



- **me-central-1**
  - **儲存貯體類型:** platform-assets / **儲存貯體 ARN 模式:** arn:aws:s3:::elasticbeanstalk-platform-assets-me-central-1-f08b818c
  - **儲存貯體類型:** env-resources / **儲存貯體 ARN 模式:** arn:aws:s3:::elasticbeanstalk-env-resources-me-central-1-f08b818c



#### 作業
<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>

**重要**  
我們建議您避免在這個政策中的特定區域使用萬用字元 (\*)。例如，使用 `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 Beanstalk 使用 CloudFormation 為您的環境建立資源。CloudFormation 在每個 中擁有 S3 儲存貯體 AWS 區域 ，以監控對等待條件的回應。

Elastic Beanstalk 等服務會透過將請求傳送至 CloudFormation 擁有之 S3 Amazon S3 S3 URL 來與 CloudFormation 通訊。CloudFormation 會使用`cloudformation.amazonaws.com`服務主體建立預先簽章的 Amazon S3 URL。

如需更多詳細資訊，請參閱*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>

**重要**  
我們建議您避免在這個政策中的特定區域使用萬用字元 (\*)。例如，使用 `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 操作所需的 S3 儲存貯體，以及範例 AWS 帳戶 ID 123456789012。

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

**重要**  
我們建議您避免在這個政策中的特定區域使用萬用字元 (\*)。例如，使用 `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}}/*"
            ]
         }
    ]
}
```

------

### 客戶帳戶擁有的 S3 儲存貯體，以支援 Docker 登錄檔身分驗證
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth"></a>

此儲存貯體僅適用於以 Docker 平台為基礎的環境。儲存貯體會存放用來向私有 Docker 登錄檔進行身分驗證的檔案，該登錄檔位於客戶佈建的 S3 儲存貯體上。如需詳細資訊，請參閱本指南的 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 指南*》中的[使用端點政策控制對 VPC 端點的存取](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。

**重要**  
我們建議您避免在這個政策中的特定區域使用萬用字元 (\*)。例如，使用 `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}}"
            ]
        }
    ]
}
```

------