

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

# Amazon VPC Lattice 的安全性
<a name="security"></a>

的雲端安全 AWS 是最高優先順序。身為 AWS 客戶，您可以受益於資料中心和網路架構，這些架構專為滿足最安全敏感組織的需求而建置。

您負責維護在此基礎設施上託管內容的控制權。[共同責任模式](https://aws.amazon.com/compliance/shared-responsibility-model/)將其描述為雲端*的*安全性，和雲端*中*的安全性：
+ **雲端的安全性** – AWS 負責保護在 中執行 AWS 服務的基礎設施 AWS 雲端。 AWS 也為您提供可安全使用的服務。作為[AWS 合規計畫](https://aws.amazon.com/compliance/programs/)的一部分，第三方稽核人員會定期測試和驗證我們安全的有效性。若要了解適用於 Amazon VPC Lattice 的合規計劃，請參閱[AWS 合規計劃的 服務範圍](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端的安全性** – 您負責控制在此基礎設施上託管的內容。您也必須對其他因素負責，包括資料的機密性、您公司的要求和適用法律和法規。

本文件可協助您了解如何在使用 VPC Lattice 時套用共同責任模型。下列主題說明如何設定 VPC Lattice 以符合您的安全與合規目標。您也會了解如何使用其他 AWS 服務，以協助您監控和保護 VPC Lattice 服務、服務網路和資源組態。

**Topics**
+ [管理對 VPC Lattice 服務的存取](access-management-overview.md)
+ [Amazon VPC Lattice 中的資料保護](data-protection.md)
+ [Amazon VPC Lattice 的身分和存取管理](security-iam.md)
+ [Amazon VPC Lattice 的合規驗證](compliance-validation.md)
+ [使用介面端點存取 Amazon VPC Lattice (AWS PrivateLink)](vpc-interface-endpoints.md)
+ [Amazon VPC Lattice 中的彈性](disaster-recovery-resiliency.md)
+ [Amazon VPC Lattice 中的基礎設施安全性](infrastructure-security.md)

# 管理對 VPC Lattice 服務的存取
<a name="access-management-overview"></a>

VPC Lattice 預設是安全的，因為您必須明確哪些服務和資源組態可提供對哪些 VPCs存取。您可以透過 VPC 關聯或 VPC 端點類型的服務網路存取服務。對於多帳戶案例，您可以使用 [AWS Resource Access Manager](sharing.md) 跨帳戶邊界共用服務、資源組態和服務網路。

 VPC Lattice 提供架構，可讓您在網路的多層實作defense-in-depth策略。
+ **第一層** – 服務、資源、VPC 和 VPC 端點與服務網路的關聯。VPC 可以透過 關聯或透過 VPC 端點連線到服務網路。如果 VPC 未連線至服務網路，VPC 中的用戶端無法存取與服務網路相關聯的服務和資源組態。
+ **第二層** – 服務網路的選用網路層級安全保護，例如安全群組和網路 ACLs。透過使用這些項目，您可以允許存取 VPC 中的特定用戶端群組，而不是 VPC 中的所有用戶端。
+ **第三層** – 選用的 VPC Lattice 驗證政策。您可以將身分驗證政策套用至服務網路和個別服務。一般而言，服務網路上的身分驗證政策是由網路或雲端管理員操作，而且它們會實作粗略精細的授權。例如，僅允許來自特定組織的已驗證請求 AWS Organizations。對於服務層級的身分驗證政策，通常服務擁有者會設定精細控制，這可能比在服務網路層級套用的粗略精細授權更嚴格。
**注意**  
服務網路上的身分驗證政策不適用於服務網路中的資源組態。

**存取控制的方法**
+ [驗證政策](auth-policies.md)
+ [Security groups (安全群組)](security-groups.md)
+ [網路 ACL](network-acls.md)

# 使用身分驗證政策控制對 VPC Lattice 服務的存取
<a name="auth-policies"></a>

VPC Lattice 驗證政策是您連接到服務網路或服務的 IAM 政策文件，以控制指定的委託人是否可以存取一組服務或特定服務。您可以針對每個要控制存取權的服務網路或服務，均附加一個驗證政策。

**注意**  
服務網路上的身分驗證政策不適用於服務網路中的資源組態。

驗證政策與 IAM 身分型政策不同。IAM 身分型政策會連接到 IAM 使用者、群組或角色，並定義這些身分可以對哪些資源執行哪些動作。驗證政策會連接到 服務和 服務網路。若要成功授權，身分驗證政策和身分型政策都需要有明確的允許陳述式。如需詳細資訊，請參閱[授權的運作方式](#auth-policies-evaluation-logic)。

您可以使用 AWS CLI 和 主控台來檢視、新增、更新或移除 服務和服務網路上的身分驗證政策。當您新增、更新或移除身分驗證政策時，可能需要幾分鐘的時間才能準備就緒。使用 時 AWS CLI，請確定您位於正確的區域。您可以變更設定檔的預設區域，或搭配 命令使用 `--region` 參數。

**Topics**
+ [驗證政策中的常見元素](#auth-policies-common-elements)
+ [驗證政策的資源格式](#auth-policies-resource-format)
+ [可用於身分驗證政策的條件索引鍵](#auth-policies-condition-keys)
+ [資源標籤](#resource-tags)
+ [主體標籤](#principal-tags)
+ [匿名 （未驗證） 主體](#anonymous-unauthenticated-principals)
+ [驗證政策範例](#example-auth-policies)
+ [授權的運作方式](#auth-policies-evaluation-logic)

若要開始使用身分驗證政策，請依照程序建立套用至服務網路的身分驗證政策。對於您不希望套用至其他服務的更嚴格許可，您可以選擇在個別服務上設定身分驗證政策。

## 使用身分驗證政策管理對服務網路的存取
<a name="manage-access-to-service-networks"></a>

下列 AWS CLI 任務說明如何使用身分驗證政策管理對服務網路的存取。如需使用主控台的指示，請參閱 [VPC Lattice 中的服務網路](service-networks.md)。

**Topics**
+ [將身分驗證政策新增至服務網路](#add-service-network-auth-policy)
+ [變更服務網路的身分驗證類型](#change-service-network-auth-type)
+ [從服務網路移除身分驗證政策](#remove-service-network-auth-policy)

### 將身分驗證政策新增至服務網路
<a name="add-service-network-auth-policy"></a>

請依照本節中的步驟使用 AWS CLI 來：
+ 使用 IAM 在服務網路上啟用存取控制。
+ 將身分驗證政策新增至服務網路。如果您未新增身分驗證政策，所有流量都會收到存取遭拒錯誤。

**啟用存取控制並將身分驗證政策新增至新的服務網路**

1. 若要啟用服務網路上的存取控制，使其可以使用身分驗證政策，請使用 **create-service-network**命令搭配 `--auth-type`選項和 值`AWS_IAM`。

   ```
   aws vpc-lattice create-service-network --name Name --auth-type AWS_IAM [--tags TagSpecification]
   ```

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "sn-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. 使用 **put-auth-policy**命令，指定您要新增身分驗證政策和您要新增之身分驗證政策的服務網路 ID。

   例如，使用下列命令，為 ID 為 的服務網路建立身分驗證政策*`sn-0123456789abcdef0`*。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json
   ```

   使用 JSON 建立政策定義。如需詳細資訊，請參閱[驗證政策中的常見元素](#auth-policies-common-elements)。

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

**啟用存取控制並將身分驗證政策新增至現有的服務網路**

1. 若要啟用服務網路上的存取控制，使其可以使用身分驗證政策，請使用 **update-service-network**命令搭配 `--auth-type`選項和 值`AWS_IAM`。

   ```
   aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type AWS_IAM
   ```

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "sn-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. 使用 **put-auth-policy**命令，指定您要新增身分驗證政策和您要新增之身分驗證政策的服務網路 ID。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json
   ```

   使用 JSON 建立政策定義。如需詳細資訊，請參閱[驗證政策中的常見元素](#auth-policies-common-elements)。

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

### 變更服務網路的身分驗證類型
<a name="change-service-network-auth-type"></a>

**停用服務網路的身分驗證政策**  
使用 **update-service-network**命令搭配 `--auth-type`選項和 的值`NONE`。

```
aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type NONE
```

如果您稍後需要再次啟用身分驗證政策，請使用為 `--auth-type`選項`AWS_IAM`指定的 執行此命令。

### 從服務網路移除身分驗證政策
<a name="remove-service-network-auth-policy"></a>

**從服務網路移除身分驗證政策**  
使用 **delete-auth-policy** 命令。

```
aws vpc-lattice delete-auth-policy --resource-identifier sn-0123456789abcdef0
```

如果您在將服務網路的身分驗證類型變更為 之前移除身分驗證政策，請求會失敗`NONE`。

## 使用身分驗證政策管理對服務的存取
<a name="manage-access-to-services"></a>

下列 AWS CLI 任務說明如何使用身分驗證政策管理對服務的存取。如需使用 主控台的指示，請參閱 [VPC Lattice 中的服務](services.md)。

**Topics**
+ [將身分驗證政策新增至服務](#add-service-auth-policy)
+ [變更服務的身分驗證類型](#change-service-auth-type)
+ [從服務移除身分驗證政策](#remove-service-auth-policy)

### 將身分驗證政策新增至服務
<a name="add-service-auth-policy"></a>

請依照下列步驟使用 AWS CLI 來：
+ 使用 IAM 在服務上啟用存取控制。
+ 將身分驗證政策新增至服務。如果您未新增身分驗證政策，所有流量都會收到存取遭拒錯誤。

**啟用存取控制並將身分驗證政策新增至新服務**

1. 若要啟用服務的存取控制，使其可以使用身分驗證政策，請使用 **create-service**命令搭配 `--auth-type`選項和 值`AWS_IAM`。

   ```
   aws vpc-lattice create-service --name Name --auth-type AWS_IAM [--tags TagSpecification]
   ```

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "dnsEntry": { 
         ...
      },
      "id": "svc-0123456789abcdef0",
      "name": "Name",
      "status": "CREATE_IN_PROGRESS"
   }
   ```

1. 使用 **put-auth-policy**命令，指定您要新增身分驗證政策的 服務 ID，以及您要新增的身分驗證政策。

   例如，使用下列命令，為 ID 為 *svc-0123456789abcdef0* 的服務建立身分驗證政策。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json
   ```

   使用 JSON 建立政策定義。如需詳細資訊，請參閱[驗證政策中的常見元素](#auth-policies-common-elements)。

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

**啟用存取控制並將身分驗證政策新增至現有服務**

1. 若要啟用服務的存取控制，使其可以使用身分驗證政策，請使用 **update-service**命令搭配 `--auth-type`選項和 的值`AWS_IAM`。

   ```
   aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type AWS_IAM
   ```

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "svc-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. 使用 **put-auth-policy**命令，指定您要新增身分驗證政策的 服務 ID，以及您要新增的身分驗證政策。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json
   ```

   使用 JSON 建立政策定義。如需詳細資訊，請參閱[驗證政策中的常見元素](#auth-policies-common-elements)。

   如果成功，此命令傳回的輸出會類似如下。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

### 變更服務的身分驗證類型
<a name="change-service-auth-type"></a>

**停用服務的身分驗證政策**  
使用 **update-service**命令搭配 `--auth-type`選項和 的值`NONE`。

```
aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type NONE
```

如果您稍後需要再次啟用身分驗證政策，請使用為 `--auth-type`選項`AWS_IAM`指定的 執行此命令。

### 從服務移除身分驗證政策
<a name="remove-service-auth-policy"></a>

**從服務中移除身分驗證政策**  
使用 **delete-auth-policy** 命令。

```
aws vpc-lattice delete-auth-policy --resource-identifier svc-0123456789abcdef0
```

如果您在將服務的身分驗證類型變更為 之前移除身分驗證政策，請求會失敗`NONE`。

如果您啟用需要對服務進行驗證請求的身分驗證政策，對該服務的任何請求都必須包含使用 Signature 第 4 版 (SigV4) 計算的有效請求簽章。如需詳細資訊，請參閱[Amazon VPC Lattice 的 SIGv4 驗證請求](sigv4-authenticated-requests.md)。

## 驗證政策中的常見元素
<a name="auth-policies-common-elements"></a>

VPC Lattice 驗證政策是使用與 IAM 政策相同的語法來指定。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[身分型政策和資源型政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。

驗證政策包含下列元素：
+ **委託**人 – 允許存取 陳述式中動作和資源的人員或應用程式。在身分驗證政策中，委託人是此許可的收件人 IAM 實體。委託人會驗證為 IAM 實體，以向特定資源或資源群組提出請求，就像服務網路中的服務一樣。

  您必須在資源型政策中指定主體。委託人可以包括帳戶、使用者、角色、聯合身分使用者 AWS 或服務。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [AWS JSON 政策元素：主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。
+ **效果** – 指定委託人請求特定動作時的效果。可以是 `Allow` 或 `Deny`。根據預設，當您使用 IAM 在服務或服務網路上啟用存取控制時，主體沒有向服務或服務網路提出請求的許可。
+ **動作** – 您要授予或拒絕許可的特定 API 動作。VPC Lattice 支援使用 `vpc-lattice-svcs`字首的動作。如需詳細資訊，請參閱《*服務授權參考*》中的 [Amazon VPC Lattice Services 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-actions-as-permissions)。
+ **資源** – 受 動作影響的服務。
+ **條件** – 條件為選用。您可以使用它們來控制政策生效的時間。如需詳細資訊，請參閱《*服務授權參考*》中的 [Amazon VPC Lattice Services 的條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-policy-keys)。

當您建立和管理身分驗證政策時，建議您使用 [IAM 政策產生器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator)。

**需求**  
JSON 中的政策不得包含換行或空白行。

## 驗證政策的資源格式
<a name="auth-policies-resource-format"></a>

您可以透過建立身分驗證政策來限制對特定資源的存取，該政策使用相符的結構描述搭配`<serviceARN>/<path>`模式和 `Resource`元素的程式碼，如下列範例所示。


| 通訊協定 | 範例 | 
| --- | --- | 
| HTTP |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/vpc-lattice/latest/ug/auth-policies.html)  | 
| gRPC |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/vpc-lattice/latest/ug/auth-policies.html)  | 

針對 使用以下 Amazon Resource Name (ARN) 資源格式`<serviceARN>`：

```
arn:aws:vpc-lattice:region:account-id:service/service-id
```

例如：

```
"Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0"
```

## 可用於身分驗證政策的條件索引鍵
<a name="auth-policies-condition-keys"></a>

身分驗證政策的條件元素中的**條件**索引鍵可以進一步控制存取。這些條件索引鍵會根據通訊協定以及請求是使用 [Signature 第 4 版 (SigV4)](sigv4-authenticated-requests.md) 還是匿名簽署來進行評估。條件金鑰名稱有區分大小寫。

AWS 提供全域條件金鑰，您可以用來控制存取，例如 `aws:PrincipalOrgID`和 `aws:SourceIp`。若要查看 AWS 全域條件索引鍵的清單，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

下列故事列出 VPC Lattice 條件索引鍵。如需詳細資訊，請參閱《*服務授權參考*》中的 [Amazon VPC Lattice Services 的條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-policy-keys)。


| 條件索引鍵 | Description | 範例 | 適用於匿名 （未驗證） 來電者？ | 適用於 gRPC？ | 
| --- | --- | --- | --- | --- | 
| vpc-lattice-svcs:Port | 依請求的服務連接埠篩選存取權 | 80 | 是 | 是 | 
| vpc-lattice-svcs:RequestMethod | 依請求的方法來篩選存取權 | GET | 是 | 一律 POST | 
| vpc-lattice-svcs:RequestPath | 依請求 URL 的路徑部分篩選存取權 | /path | 是 | 是 | 
| vpc-lattice-svcs:RequestHeader/header-name: value | 依請求標頭中的標頭名稱/值對來篩選存取權 | content-type: application/json | 是 | 是 | 
| vpc-lattice-svcs:RequestQueryString/key-name: value | 依請求 URL 中的查詢字串鍵值對來篩選存取權 | quux: [corge, grault] | 是 | 否 | 
| vpc-lattice-svcs:ServiceNetworkArn | 依接收請求之服務之服務網路的 ARN 篩選存取權 | arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-0123456789abcdef0 | 是 | 是 | 
| vpc-lattice-svcs:ServiceArn | 依接收請求之服務的 ARN 篩選存取權 | arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0 | 是 | 是 | 
| vpc-lattice-svcs:SourceVpc | 依提出請求的 VPC 來篩選存取權 | vpc-1a2b3c4d | 是 | 是 | 
| vpc-lattice-svcs:SourceVpcOwnerAccount | 依提出請求的 VPC 所屬帳戶來篩選存取權 | 123456789012 | 是 | 是 | 

## 資源標籤
<a name="resource-tags"></a>

*標籤*是您指派或 AWS 指派給 AWS 資源的中繼資料標籤。每個 標籤都有兩個部分：
+ *標籤鍵* (例如，`CostCenter`、`Environment` 或 `Project`)。標籤鍵會區分大小寫。
+ 選用欄位，稱為*標籤值* (例如 `111122223333` 或 `Production`)。忽略標籤值基本上等同於使用空字串。與標籤鍵相同，標籤值會區分大小寫。

如需標記的詳細資訊，請參閱[使用標籤控制對 AWS 資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)

您可以使用`aws:ResourceTag/key` AWS 全域條件內容索引鍵，在身分驗證政策中使用標籤。

下列範例政策會授予具有標籤 之 服務的存取權`Environment=Gamma`。此政策可讓您在沒有硬式編碼服務 ARNs或 IDs 的情況下參考 服務。

```
{
  "Version": "2012-10-17", 		 	 	 		 	 	 
  "Statement": [
    {
      "Sid": "AllowGammaAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "vpc-lattice-svcs:Invoke",
      "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0124446789abcdef0/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Environment": "Gamma",
        }
      }
    }
  ]
}
```

## 主體標籤
<a name="principal-tags"></a>

您可以根據連接到發起人身分的標籤來控制對 服務和資源的存取。VPC Lattice 支援根據使用者、角色或工作階段標籤上使用`aws:PrincipalTag/context`變數的任何主體標籤進行存取控制。如需詳細資訊，請參閱[控制 IAM 主體的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html#access_iam-tags_control-principals)。

下列範例政策只會將存取權授予具有標籤 的身分`Team=Payments`。此政策可讓您在沒有硬式編碼帳戶 IDs或角色 ARNs的情況下控制存取。

```
{
  "Version": "2012-10-17", 		 	 	 		 	 	 
  "Statement": [
    {
      "Sid": "AllowPaymentsTeam",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "vpc-lattice-svcs:Invoke",
      "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0/*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/Team": "Payments",
        }
      }
    }
  ]
}
```

## 匿名 （未驗證） 主體
<a name="anonymous-unauthenticated-principals"></a>

匿名主體是未使用 [Signature 第 4 版 (SigV4)](sigv4-authenticated-requests.md) 簽署其 AWS 請求的發起人，並且位於連接到服務網路的 VPC 內。如果身分驗證政策允許，匿名主體可以對服務網路中的服務提出未經驗證的請求。

## 驗證政策範例
<a name="example-auth-policies"></a>

以下是要求已驗證委託人提出請求的身分驗證政策範例。

所有範例都使用 `us-west-2`區域，並包含虛構的帳戶 IDs。

**範例 1：限制特定 AWS 組織對 服務的存取**  
下列身分驗證政策範例授予許可給任何已驗證的請求，以存取政策適用的服務網路中的任何服務。不過，請求必須來自屬於 條件中指定 AWS 組織的委託人。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": "*",
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": "*",
         "Condition": {
            "StringEquals": {
               "aws:PrincipalOrgID": [ 
                  "o-123456example"
               ]
            }
         }
      }
   ]
}
```

------

**範例 2：限制特定 IAM 角色對服務的存取**  
下列身分驗證政策範例授予許可給任何使用 IAM 角色`rates-client`對 `Resource`元素中指定的服務提出 HTTP GET 請求的已驗證請求。`Resource` 元素中的資源與附加政策的服務相同。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": [
               "arn:aws:iam::123456789012:role/rates-client"
            ]
         },
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": [
            "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0/*"
         ],
         "Condition": {
            "StringEquals": {
               "vpc-lattice-svcs:RequestMethod": "GET"
            }
         }
      }
   ]
}
```

------

**範例 3：限制特定 VPC 中已驗證主體對 服務的存取**  
下列身分驗證政策範例僅允許來自 VPC 中 VPC ID 為 之主體的已驗證請求`vpc-1a2b3c4d`。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": "*",
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": "*",
         "Condition": {
            "StringNotEquals": {
               "aws:PrincipalType": "Anonymous"
            },
            "StringEquals": {
               "vpc-lattice-svcs:SourceVpc": "vpc-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

## 授權的運作方式
<a name="auth-policies-evaluation-logic"></a>

當 VPC Lattice 服務收到請求時， AWS 強制執行程式碼會一起評估所有相關許可政策，以決定是否授權或拒絕請求。它會評估授權期間適用於請求內容的所有 IAM 身分型政策和身分驗證政策。根據預設，身分驗證類型為 時，所有請求都會隱含拒絕`AWS_IAM`。所有相關政策的明確允許會覆寫預設值。

授權包括：
+ 收集所有相關 IAM 身分型政策和身分驗證政策。
+ 評估產生的一組政策：
  + 驗證申請者 （例如 IAM 使用者或角色） 是否具有從申請者所屬帳戶執行操作的許可。如果沒有明確的允許陳述式， AWS 不會授權請求。
  + 驗證服務網路的身分驗證政策是否允許請求。如果已啟用身分驗證政策，但沒有明確的允許陳述式，則 AWS 不會授權請求。如果有明確的允許陳述式，或身分驗證類型為 `NONE`，則程式碼會繼續。
  + 驗證 服務的身分驗證政策是否允許請求。如果已啟用身分驗證政策，但沒有明確的允許陳述式，則 AWS 不會授權請求。如果有明確的允許陳述式，或身分驗證類型為 `NONE`，則強制執行程式碼會傳回**允許**的最終決策。
  + 任何政策中的明確拒絕會覆寫任何允許。

圖表顯示授權工作流程。提出請求時，相關政策會允許或拒絕對指定服務的請求存取。

![\[授權工作流程\]](http://docs.aws.amazon.com/zh_tw/vpc-lattice/latest/ug/images/authpolicy.png)


# 使用安全群組控制 VPC Lattice 中的流量
<a name="security-groups"></a>

AWS 安全群組充當虛擬防火牆，控制往返與其相關聯的實體的網路流量。使用 VPC Lattice，您可以建立安全群組並將其指派給 VPC 關聯，以將 VPC 連線至服務網路，為您的服務網路強制執行額外的網路層級安全保護。如果您使用 VPC 端點將 VPC 連線至服務網路，您也可以將安全群組指派給 VPC 端點。同樣地，您可以將安全群組指派給您建立的資源閘道，以啟用對 VPC 中資源的存取。

**Topics**
+ [受管字首清單](#managed-prefix-list)
+ [安全群組規則](#security-groups-rules)
+ [管理 VPC 關聯的安全群組](#service-network-security-group)

## 受管字首清單
<a name="managed-prefix-list"></a>

VPC Lattice 提供受管字首清單，其中包含當您使用服務網路關聯將 VPC 連線至使用 VPC 關聯的服務網路時，用來透過 VPC Lattice 網路路由流量的 IP 地址。這些 IPs 可以是私有連結本機 IPs或無法路由的公IPs。

 您可以在安全群組規則中參考 VPC Lattice 受管字首清單。這可讓流量從用戶端流經 VPC Lattice 服務網路，以及流向 VPC Lattice 服務目標。

例如，假設您的 EC2 執行個體已在美國西部 （奧勒岡） 區域 () 註冊為目標`us-west-2`。您可以將規則新增至執行個體安全群組，以允許從 VPC Lattice 受管字首清單傳入 HTTPS 存取，讓此區域中的 VPC Lattice 流量可以到達執行個體。如果您從安全群組移除所有其他傳入規則，您可以防止 VPC Lattice 流量以外的任何流量到達執行個體。

VPC Lattice 的受管字首清單名稱如下所示：
+ com.amazonaws.*region*.vpc-lattice
+ com.amazonaws.*region*.ipv6.vpc-lattice

如需詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的 [AWS受管字首清單](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html#available-aws-managed-prefix-lists)。

**Windows 和 macOS 用戶端**  
VPC Lattice 字首清單中的地址是連結本機地址和不可路由的公有地址。如果您從這些用戶端連線至 VPC Lattice，則必須更新其組態，以便將受管字首清單中的 IP 地址轉送到用戶端的主要 IP 地址。以下是更新 Windows 用戶端組態的範例命令，其中 169.254.171.0是受管字首清單中的其中一個地址。

```
C:\> route add 169.254.171.0 mask 255.255.255.0 primary-ip-address
```

以下是更新 macOS 用戶端組態的範例命令，其中 169.254.171.0是受管字首清單中的其中一個地址。

```
sudo route -n add -net 169.254.171.0 primary-ip-address 255.255.255.0
```

為了避免建立靜態路由，建議您在 VPC 中使用服務網路端點來建立連線。如需詳細資訊，請參閱[管理服務網路 VPC 端點關聯](service-network-associations.md#service-network-vpc-endpoint-associations)。

## 安全群組規則
<a name="security-groups-rules"></a>

搭配或不搭配安全群組使用 VPC Lattice 不會影響您現有的 VPC 安全群組組態。不過，您可以隨時新增自己的安全群組。

**關鍵考量**
+ 用戶端的安全群組規則會控制 VPC Lattice 的傳出流量。
+ 目標的安全群組規則控制從 VPC Lattice 到目標的傳入流量，包括運作狀態檢查流量。
+ 服務網路與 VPC 之間關聯的安全群組規則會控制哪些用戶端可以存取 VPC Lattice 服務網路。
+ 資源閘道的安全群組規則會控制從資源閘道到資源的傳出流量。

**從資源閘道流向資料庫資源的流量的建議傳出規則**  
若要讓流量從資源閘道流向資源，您必須為開放連接埠建立傳出規則，並為資源建立接受的接聽程式通訊協定。


| 目標 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| 資源的 CIDR 範圍 | TCP | 3306 | 允許從資源閘道到資料庫的流量 | 

**服務網路和 VPC 關聯的建議傳入規則**  
若要讓流量從用戶端 VPCs 流向與服務網路相關聯的服務，您必須為服務的接聽程式連接埠和接聽程式通訊協定建立傳入規則。


| 來源 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| VPC CIDR | listener | listener | 允許從用戶端到 VPC Lattice 的流量 | 

**建議從用戶端執行個體流向 VPC Lattice 的流量傳出規則**  
根據預設，安全群組允許所有對外流量。不過，如果您有自訂傳出規則，則必須允許接聽程式連接埠和通訊協定的 VPC Lattice 字首傳出流量，以便用戶端執行個體可以連線至與 VPC Lattice 服務網路相關聯的所有服務。您可以參考 VPC Lattice 字首清單的 ID，以允許此流量。


| 目標 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| VPC Lattice 字首清單的 ID | listener | listener | 允許從用戶端到 VPC Lattice 的流量 | 

**從 VPC Lattice 流向目標執行個體之流量的建議傳入規則**  
您無法使用用戶端安全群組做為目標安全群組的來源，因為流量會從 VPC Lattice 流出。您可以參考 VPC Lattice 字首清單的 ID。


| 來源 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| VPC Lattice 字首清單的 ID | target | target | 允許從 VPC Lattice 到目標的流量 | 
| VPC Lattice 字首清單的 ID | health check | health check | 允許從 VPC Lattice 到目標的運作狀態檢查流量 | 

## 管理 VPC 關聯的安全群組
<a name="service-network-security-group"></a>

您可以使用 AWS CLI 來檢視、新增或更新 VPC 上的安全群組，以服務網路關聯。使用 時 AWS CLI，請記住您的命令會在為您的設定檔 AWS 區域 設定的 中執行。如果您想在不同區域中執行命令，則可變更設定檔的預設區域，或搭配 `--region` 參數使用命令。

開始之前，請確認您已在與要新增至服務網路的 VPC 相同的 VPC 中建立安全群組。如需詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的[使用安全群組控制資源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html) 

**使用主控台建立 VPC 關聯時新增安全群組**

1. 在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 開啟 Amazon VPC 主控台。

1. 在導覽窗格的 **VPC Lattice** 下，選擇**服務網路**。

1. 選取服務網路的名稱以開啟其詳細資訊頁面。

1. 在 **VPC 關聯**索引標籤上，選擇**建立 VPC 關聯**，然後選擇**新增 VPC 關聯**。

1. 選取 VPC 和最多五個安全群組。

1. 選擇**儲存變更**。

**使用主控台新增或更新現有 VPC 關聯的安全群組**

1. 在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 開啟 Amazon VPC 主控台。

1. 在導覽窗格中的 **VPC Lattice** 下，選擇**服務網路**。

1. 選取服務網路的名稱以開啟其詳細資訊頁面。

1. 在 **VPC 關聯**索引標籤上，選取關聯的核取方塊，然後選擇**動作**、**編輯安全群組**。

1. 視需要新增和移除安全群組。

1. 選擇**儲存變更**。

**使用 新增 VPC 關聯時新增安全群組 AWS CLI**  
使用 [create-service-network-vpc-association](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-service-network-vpc-association.html) 命令，指定 VPC 關聯的 VPC ID 和要新增的安全群組 ID。

```
aws vpc-lattice create-service-network-vpc-association \
    --service-network-identifier sn-0123456789abcdef0 \
    --vpc-identifier vpc-1a2b3c4d \
    --security-group-ids sg-7c2270198example
```

如果成功，此命令傳回的輸出會類似如下。

```
{
  "arn": "arn",
  "createdBy": "464296918874",
  "id": "snva-0123456789abcdef0",
  "status": "CREATE_IN_PROGRESS",
  "securityGroupIds": ["sg-7c2270198example"]
}
```

**使用 新增或更新現有 VPC 關聯的安全群組 AWS CLI**  
使用 [update-service-network-vpc-association](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/update-service-network-vpc-association.html) 命令，指定服務網路的 ID 和安全群組IDs。這些安全群組會覆寫任何先前相關聯的安全群組。更新清單時至少定義一個安全群組。

```
aws vpc-lattice update-service-network-vpc-association 
    --service-network-vpc-association-identifier sn-903004f88example \
    --security-group-ids sg-7c2270198example sg-903004f88example
```

**警告**  
您無法移除所有安全群組。反之，您必須先刪除 VPC 關聯，然後重新建立不含任何安全群組的 VPC 關聯。刪除 VPC 關聯時請小心。這可防止流量到達該服務網路中的服務。

# 使用網路 ACLs流量
<a name="network-acls"></a>

網路存取控制清單 (ACL) 會允許或拒絕子網層級的特定傳入或傳出流量。預設的網路 ACL 會允許所有外傳和傳入流量。您可以為子網路建立自訂網路 ACLs，以提供額外的安全層。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[網路 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)。

**Topics**
+ [用戶端子網路的網路 ACLs](#network-acl-client-subnets)
+ [目標子網路的網路 ACLs](#network-acl-target-subnets)

## 用戶端子網路的網路 ACLs
<a name="network-acl-client-subnets"></a>

用戶端子網路的網路 ACLs 必須允許用戶端和 VPC Lattice 之間的流量。您可以從 VPC Lattice 的[受管字首清單中](security-groups.md#managed-prefix-list)取得要允許的 IP 地址範圍。

以下是傳入規則的範例。


| 來源 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | TCP | 1025-65535 | 允許從 VPC Lattice 到用戶端的流量 | 

以下是傳出規則範例。


| 目標 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | listener | listener | 允許從用戶端到 VPC Lattice 的流量 | 

## 目標子網路的網路 ACLs
<a name="network-acl-target-subnets"></a>

目標子網路的網路 ACLs 必須允許目標與 VPC Lattice 之間在目標連接埠和運作狀態檢查連接埠上的流量。您可以從 VPC Lattice 的[受管字首清單中](security-groups.md#managed-prefix-list)取得要允許的 IP 地址範圍。

以下是傳入規則的範例。


| 來源 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | target | target | 允許從 VPC Lattice 到目標的流量 | 
| vpc\$1lattice\$1cidr\$1block | health check | health check | 允許從 VPC Lattice 到目標的運作狀態檢查流量 | 

以下是傳出規則範例。


| 目標 | 通訊協定 | 連接埠範圍 | Comment | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | target | 1024-65535 | 允許從目標到 VPC Lattice 的流量 | 
| vpc\$1lattice\$1cidr\$1block | health check | 1024-65535 | 允許從目標到 VPC Lattice 的運作狀態檢查流量 | 

# Amazon VPC Lattice 的 SIGv4 驗證請求
<a name="sigv4-authenticated-requests"></a>

VPC Lattice 使用 Signature 第 4 版 (SIGv4) 或 Signature 第 4A 版 (SIGv4A) 進行用戶端身分驗證。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [API 請求的AWS 第 4 版簽署程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

**考量事項**
+ VPC Lattice 會嘗試驗證使用 SIGv4 或 SIGv4A 簽署的任何請求。請求在沒有身分驗證的情況下失敗。
+ VPC Lattice 不支援承載簽署。您必須傳送 `x-amz-content-sha256`標頭，並將 值設為 `"UNSIGNED-PAYLOAD"`。

**Topics**
+ [Python](#sigv4-authenticated-requests-python)
+ [Java](#sigv4-authenticated-requests-java-custom-interceptor)
+ [Node.js](#sigv4-authenticated-requests-nodejs)
+ [Golang](#sigv4-authenticated-requests-golang)
+ [Golang - GRPC](#sigv4-authenticated-requests-golang-grpc)

## Python
<a name="sigv4-authenticated-requests-python"></a>

此範例會透過安全連線將已簽署的請求傳送至網路中註冊的服務。如果您偏好使用[請求](https://requests.readthedocs.io/en/latest/)，[botocore](https://github.com/boto/botocore) 套件可簡化身分驗證程序，但並非嚴格要求。如需詳細資訊，請參閱 Boto3 文件中的[登入](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html)資料。

若要安裝 `botocore`和 `awscrt`套件，請使用下列命令。如需詳細資訊，請參閱 [AWS CRT Python](https://pypi.org/project/awscrt/)。

```
pip install botocore awscrt
```

如果您在 Lambda 上執行用戶端應用程式，請使用 [Lambda 層](https://docs.aws.amazon.com/lambda/latest/dg/python-layers.html)安裝所需的模組，或將其包含在部署套件中。

在下列範例中，將預留位置值取代為您自己的值。

------
#### [ SIGv4 ]

```
from botocore import crt
import requests 
from botocore.awsrequest import AWSRequest
import botocore.session

if __name__ == '__main__':
    session = botocore.session.Session()
    signer = crt.auth.CrtSigV4Auth(session.get_credentials(), 'vpc-lattice-svcs', 'us-west-2')
    endpoint = 'https://data-svc-022f67d3a42.1234abc.vpc-lattice-svcs.us-west-2.on.aws'
    data = "some-data-here"
    headers = {'Content-Type': 'application/json', 'x-amz-content-sha256': 'UNSIGNED-PAYLOAD'}
    request = AWSRequest(method='POST', url=endpoint, data=data, headers=headers)
    request.context["payload_signing_enabled"] = False
    signer.add_auth(request)
    
    prepped = request.prepare()
    
    response = requests.post(prepped.url, headers=prepped.headers, data=data)
    print(response.text)
```

------
#### [ SIGv4A ]

```
from botocore import crt
import requests 
from botocore.awsrequest import AWSRequest
import botocore.session

if __name__ == '__main__':
    session = botocore.session.Session()
    signer = crt.auth.CrtSigV4AsymAuth(session.get_credentials(), 'vpc-lattice-svcs', '*')
    endpoint = 'https://data-svc-022f67d3a42.1234abc.vpc-lattice-svcs.us-west-2.on.aws'
    data = "some-data-here"
    headers = {'Content-Type': 'application/json', 'x-amz-content-sha256': 'UNSIGNED-PAYLOAD'}
    request = AWSRequest(method='POST', url=endpoint, data=data, headers=headers)
    request.context["payload_signing_enabled"] = False 
    signer.add_auth(request)
    
    prepped = request.prepare()
    
    response = requests.post(prepped.url, headers=prepped.headers, data=data)
    print(response.text)
```

------

## Java
<a name="sigv4-authenticated-requests-java-custom-interceptor"></a>

此範例說明如何使用自訂攔截器執行請求簽署。它使用來自 的預設登入資料提供者類別[AWS SDK for Java 2.x](https://github.com/aws/aws-sdk-java-v2)，其會為您取得正確的登入資料。如果您想要使用特定的登入資料提供者，您可以從 選擇一個[AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html)。 適用於 Java 的 AWS SDK 僅允許透過 HTTPS 的未簽署承載。不過，您可以擴展簽署者，以支援透過 HTTP 的未簽署承載。

------
#### [ SIGv4 ]

```
package com.example;

import software.amazon.awssdk.http.auth.aws.signer.AwsV4HttpSigner;
import software.amazon.awssdk.http.auth.spi.signer.SignedRequest;

import software.amazon.awssdk.http.SdkHttpMethod;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity;
import software.amazon.awssdk.http.SdkHttpRequest;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.HttpExecuteResponse;
import java.io.IOException;
import java.net.URI;

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public class sigv4 {

    public static void main(String[] args) {
        AwsV4HttpSigner signer = AwsV4HttpSigner.create();

        AwsCredentialsIdentity credentials = DefaultCredentialsProvider.create().resolveCredentials();

        if (args.length < 2) {
            System.out.println("Usage: sample <url> <region>");
            System.exit(1);
        }
        // Create the HTTP request to be signed
        var url = args[0];
        SdkHttpRequest httpRequest = SdkHttpRequest.builder()
                .uri(URI.create(url))
                .method(SdkHttpMethod.GET)
                .build();

        SignedRequest signedRequest = signer.sign(r -> r.identity(credentials)
                .request(httpRequest)
                .putProperty(AwsV4HttpSigner.SERVICE_SIGNING_NAME, "vpc-lattice-svcs")
                .putProperty(AwsV4HttpSigner.PAYLOAD_SIGNING_ENABLED, false)
                .putProperty(AwsV4HttpSigner.REGION_NAME, args[1]));

        System.out.println("[*] Raw request headers:");
        signedRequest.request().headers().forEach((key, values) -> {
            values.forEach(value -> System.out.println("  " + key + ": " + value));
        });

        try (SdkHttpClient httpClient = ApacheHttpClient.create()) {
            HttpExecuteRequest httpExecuteRequest = HttpExecuteRequest.builder()
                    .request(signedRequest.request())
                    .contentStreamProvider(signedRequest.payload().orElse(null))
                    .build();

            System.out.println("[*] Sending request to: " + url);

            HttpExecuteResponse httpResponse = httpClient.prepareRequest(httpExecuteRequest).call();

            System.out.println("[*] Request sent");

            System.out.println("[*] Response status code: " + httpResponse.httpResponse().statusCode());
            // Read and print the response body
            httpResponse.responseBody().ifPresent(inputStream -> {
                try {
                    String responseBody = new String(inputStream.readAllBytes());
                    System.out.println("[*] Response body: " + responseBody);
                } catch (IOException e) {
                    System.err.println("[*] Failed to read response body");
                    e.printStackTrace();
                } finally {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        System.err.println("[*] Failed to close input stream");
                        e.printStackTrace();
                    }
                }
            });
        } catch (IOException e) {
            System.err.println("[*] HTTP Request Failed.");
            e.printStackTrace();
        }

    }
}
```

------
#### [ SIGv4A ]

此範例需要對 的額外相依性`software.amazon.awssdk:http-auth-aws-crt`。

```
package com.example;


import software.amazon.awssdk.http.auth.aws.signer.AwsV4aHttpSigner;
import software.amazon.awssdk.http.auth.aws.signer.RegionSet;
import software.amazon.awssdk.http.auth.spi.signer.SignedRequest;

import software.amazon.awssdk.http.SdkHttpMethod;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity;
import software.amazon.awssdk.http.SdkHttpRequest;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.HttpExecuteResponse;
import java.io.IOException;
import java.net.URI;
import java.util.Arrays;

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public class sigv4a {
    
    public static void main(String[] args) {
        AwsV4aHttpSigner signer = AwsV4aHttpSigner.create();

        AwsCredentialsIdentity credentials = DefaultCredentialsProvider.create().resolveCredentials();

        if (args.length < 2) {
            System.out.println("Usage: sample <url> <regionset>");
            System.exit(1);
        }
        // Create the HTTP request to be signed
        var url = args[0];
        SdkHttpRequest httpRequest = SdkHttpRequest.builder()
                .uri(URI.create(url))
                .method(SdkHttpMethod.GET)
                .build();

        SignedRequest signedRequest = signer.sign(r -> r.identity(credentials)
                .request(httpRequest)
                .putProperty(AwsV4aHttpSigner.SERVICE_SIGNING_NAME, "vpc-lattice-svcs")
                .putProperty(AwsV4aHttpSigner.PAYLOAD_SIGNING_ENABLED, false)
                .putProperty(AwsV4aHttpSigner.REGION_SET, RegionSet.create(String.join(" ",Arrays.copyOfRange(args, 1, args.length)))));

        System.out.println("[*] Raw request headers:");
        signedRequest.request().headers().forEach((key, values) -> {
            values.forEach(value -> System.out.println("  " + key + ": " + value));
        });

        try (SdkHttpClient httpClient = ApacheHttpClient.create()) {
            HttpExecuteRequest httpExecuteRequest = HttpExecuteRequest.builder()
                    .request(signedRequest.request())
                    .contentStreamProvider(signedRequest.payload().orElse(null))
                    .build();

            System.out.println("[*] Sending request to: " + url);

            HttpExecuteResponse httpResponse = httpClient.prepareRequest(httpExecuteRequest).call();

            System.out.println("[*] Request sent");

            System.out.println("[*] Response status code: " + httpResponse.httpResponse().statusCode());
            // Read and print the response body
            httpResponse.responseBody().ifPresent(inputStream -> {
                try {
                    String responseBody = new String(inputStream.readAllBytes());
                    System.out.println("[*] Response body: " + responseBody);
                } catch (IOException e) {
                    System.err.println("[*] Failed to read response body");
                    e.printStackTrace();
                } finally {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        System.err.println("[*] Failed to close input stream");
                        e.printStackTrace();
                    }
                }
            });
        } catch (IOException e) {
            System.err.println("[*] HTTP Request Failed.");
            e.printStackTrace();
        }
    }
}
```

------

## Node.js
<a name="sigv4-authenticated-requests-nodejs"></a>

此範例使用 [aws-crt NodeJS 繫結](https://github.com/awslabs/aws-crt-nodejs)來傳送使用 HTTPS 簽署的請求。

若要安裝`aws-crt`套件，請使用下列命令。

```
npm -i aws-crt
```

如果`AWS_REGION`環境變數存在，則範例會使用 指定的區域`AWS_REGION`。預設區域為 `us-east-1`。

------
#### [ SIGv4 ]

```
const https = require('https')
const crt = require('aws-crt')
const { HttpRequest } = require('aws-crt/dist/native/http')

function sigV4Sign(method, endpoint, service, algorithm) {
    const host = new URL(endpoint).host
    const request = new HttpRequest(method, endpoint)
    request.headers.add('host', host)
    // crt.io.enable_logging(crt.io.LogLevel.INFO)
    const config = {
        service: service,
        region: process.env.AWS_REGION ? process.env.AWS_REGION : 'us-east-1',
        algorithm: algorithm,
        signature_type: crt.auth.AwsSignatureType.HttpRequestViaHeaders,
        signed_body_header: crt.auth.AwsSignedBodyHeaderType.XAmzContentSha256,
        signed_body_value: crt.auth.AwsSignedBodyValue.UnsignedPayload,
        provider: crt.auth.AwsCredentialsProvider.newDefault()
    }

    return crt.auth.aws_sign_request(request, config)
}

if (process.argv.length === 2) {
  console.error(process.argv[1] + ' <url>')
  process.exit(1)
}

const algorithm = crt.auth.AwsSigningAlgorithm.SigV4;

sigV4Sign('GET', process.argv[2], 'vpc-lattice-svcs', algorithm).then(
  httpResponse => {
    var headers = {}

    for (const sigv4header of httpResponse.headers) {
      headers[sigv4header[0]] = sigv4header[1]
    }

    const options = {
      hostname: new URL(process.argv[2]).host,
      path: new URL(process.argv[2]).pathname,
      method: 'GET',
      headers: headers
    }

    req = https.request(options, res => {
      console.log('statusCode:', res.statusCode)
      console.log('headers:', res.headers)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    req.on('error', err => {
      console.log('Error: ' + err)
    })
    req.end()
  }
)
```

------
#### [ SIGv4A ]

```
const https = require('https')
const crt = require('aws-crt')
const { HttpRequest } = require('aws-crt/dist/native/http')

function sigV4Sign(method, endpoint, service, algorithm) {
    const host = new URL(endpoint).host
    const request = new HttpRequest(method, endpoint)
    request.headers.add('host', host)
    // crt.io.enable_logging(crt.io.LogLevel.INFO)
    const config = {
        service: service,
        region: process.env.AWS_REGION ? process.env.AWS_REGION : 'us-east-1',
        algorithm: algorithm,
        signature_type: crt.auth.AwsSignatureType.HttpRequestViaHeaders,
        signed_body_header: crt.auth.AwsSignedBodyHeaderType.XAmzContentSha256,
        signed_body_value: crt.auth.AwsSignedBodyValue.UnsignedPayload,
        provider: crt.auth.AwsCredentialsProvider.newDefault()
    }

    return crt.auth.aws_sign_request(request, config)
}

if (process.argv.length === 2) {
  console.error(process.argv[1] + ' <url>')
  process.exit(1)
}

const algorithm = crt.auth.AwsSigningAlgorithm.SigV4Asymmetric;

sigV4Sign('GET', process.argv[2], 'vpc-lattice-svcs', algorithm).then(
  httpResponse => {
    var headers = {}

    for (const sigv4header of httpResponse.headers) {
      headers[sigv4header[0]] = sigv4header[1]
    }

    const options = {
      hostname: new URL(process.argv[2]).host,
      path: new URL(process.argv[2]).pathname,
      method: 'GET',
      headers: headers
    }

    req = https.request(options, res => {
      console.log('statusCode:', res.statusCode)
      console.log('headers:', res.headers)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    req.on('error', err => {
      console.log('Error: ' + err)
    })
    req.end()
  }
)
```

------

## Golang
<a name="sigv4-authenticated-requests-golang"></a>

此範例使用[適用於 Go 的 Smithy 程式碼產生器](https://github.com/aws/smithy-go)和[AWS 適用於 Go 程式設計語言的 SDK](https://github.com/aws/aws-sdk-go) 來處理請求簽署請求。此範例需要 1.21 或更新版本的 Go 版本。

------
#### [ SIGv4 ]

```
package main
 
import (
        "context"
        "flag"
        "fmt"
        "io"
        "log"
        "net/http"
        "net/http/httputil"
        "os"
        "strings"
 
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/smithy-go/aws-http-auth/credentials"
        "github.com/aws/smithy-go/aws-http-auth/sigv4"
        v4 "github.com/aws/smithy-go/aws-http-auth/v4"
)
 
type nopCloser struct {
        io.ReadSeeker
}
 
func (nopCloser) Close() error {
        return nil
}
 
type stringFlag struct {
        set   bool
        value string
}
 
 
        flag.PrintDefaults()
        os.Exit(1)
}
 
func main() {
        flag.Parse()
        if !url.set || !region.set {
                Usage()
        }
 
        cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
        if err != nil {
                log.Fatalf("failed to load SDK configuration, %v", err)
        }
 
        if len(os.Args) < 2 {
                log.Fatalf("Usage: go run main.go  <url>")
        }
 
        // Retrieve credentials from an SDK source, such as the instance profile
        sdkCreds, err := cfg.Credentials.Retrieve(context.TODO())
        if err != nil {
                log.Fatalf("Unable to retrieve credentials from SDK, %v", err)
        }
 
        creds := credentials.Credentials{
                AccessKeyID:     sdkCreds.AccessKeyID,
                SecretAccessKey: sdkCreds.SecretAccessKey,
                SessionToken:    sdkCreds.SessionToken,
        }
 
        // Add a payload body, which will not be part of the signature calculation
        body := nopCloser{strings.NewReader(`Example payload body`)}
 
        req, _ := http.NewRequest(http.MethodPost, url.value, body)
 
        // Create a sigv4a signer with specific options
        signer := sigv4.New(func(o *v4.SignerOptions) {
                o.DisableDoublePathEscape = true
                // This will add the UNSIGNED-PAYLOAD sha256 header
                o.AddPayloadHashHeader = true
                o.DisableImplicitPayloadHashing = true
        })
 
        // Perform the signing on req, using the credentials we retrieved from the SDK
        err = signer.SignRequest(&sigv4.SignRequestInput{
                Request:     req,
                Credentials: creds,
                Service:     "vpc-lattice-svcs",
                Region: region.String(),
        })
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        res, err := httputil.DumpRequest(req, true)
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Raw request\n%s\n", string(res))
 
        log.Printf("[*] Sending request to %s\n", url.value)
 
        resp, err := http.DefaultClient.Do(req)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Request sent\n")
 
        log.Printf("[*] Response status code: %d\n", resp.StatusCode)
 
        respBody, err := io.ReadAll(resp.Body)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Response body: \n%s\n", respBody)
}
```

------
#### [ SIGv4A ]

```
package main
 
import (
        "context"
        "flag"
        "fmt"
        "io"
        "log"
        "net/http"
        "net/http/httputil"
        "os"
        "strings"
 
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/smithy-go/aws-http-auth/credentials"
        "github.com/aws/smithy-go/aws-http-auth/sigv4a"
        v4 "github.com/aws/smithy-go/aws-http-auth/v4"
)
 
type nopCloser struct {
        io.ReadSeeker
}
 
func (nopCloser) Close() error {
        return nil
}
 
type stringFlag struct {
 
func main() {
        flag.Parse()
        if !url.set || !regionSet.set {
                Usage()
        }
 
        cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
        if err != nil {
                log.Fatalf("failed to load SDK configuration, %v", err)
        }
 
        if len(os.Args) < 2 {
                log.Fatalf("Usage: go run main.go <url>")
        }
 
        // Retrieve credentials from an SDK source, such as the instance profile
        sdkCreds, err := cfg.Credentials.Retrieve(context.TODO())
        if err != nil {
                log.Fatalf("Unable to retrieve credentials from SDK, %v", err)
        }
 
        creds := credentials.Credentials{
                AccessKeyID:     sdkCreds.AccessKeyID,
                SecretAccessKey: sdkCreds.SecretAccessKey,
                SessionToken:    sdkCreds.SessionToken,
        }
 
        // Add a payload body, which will not be part of the signature calculation
        body := nopCloser{strings.NewReader(`Example payload body`)}
 
        req, _ := http.NewRequest(http.MethodPost, url.value, body)
 
        // Create a sigv4a signer with specific options
        signer := sigv4a.New(func(o *v4.SignerOptions) {
                o.DisableDoublePathEscape = true
                // This will add the UNSIGNED-PAYLOAD sha256 header
                o.AddPayloadHashHeader = true
                o.DisableImplicitPayloadHashing = true
        })
 
        // Create a slice out of the provided regionset
        rs := strings.Split(regionSet.value, ",")
 
        // Perform the signing on req, using the credentials we retrieved from the SDK
        err = signer.SignRequest(&sigv4a.SignRequestInput{
                Request:     req,
                Credentials: creds,
                Service:     "vpc-lattice-svcs",
                RegionSet: rs,
        })
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        res, err := httputil.DumpRequest(req, true)
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Raw request\n%s\n", string(res))
 
        log.Printf("[*] Sending request to %s\n", url.value)
 
        resp, err := http.DefaultClient.Do(req)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Request sent\n")
 
        log.Printf("[*] Response status code: %d\n", resp.StatusCode)
 
        respBody, err := io.ReadAll(resp.Body)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Response body: \n%s\n", respBody)
}
```

------

## Golang - GRPC
<a name="sigv4-authenticated-requests-golang-grpc"></a>

此範例使用適用於 [AWS Go 程式設計語言的 開發套件](https://github.com/aws/aws-sdk-go-v2/)來處理 GRPC 請求的請求簽署。這可與來自 GRPC 範例程式碼儲存庫的 [echo 伺服器](https://github.com/grpc/grpc-go/tree/master/examples/features/proto/echo)搭配使用。

```
package main

import (
    "context"
    "crypto/tls"
    "crypto/x509"

    "flag"
    "fmt"
    "log"
    "net/http"
    "net/url"
    "strings"
    "time"

    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials"

    "github.com/aws/aws-sdk-go-v2/aws"
    v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
    "github.com/aws/aws-sdk-go-v2/config"

    ecpb "google.golang.org/grpc/examples/features/proto/echo"
)

const (
    headerContentSha    = "x-amz-content-sha256"
    headerSecurityToken = "x-amz-security-token"
    headerDate          = "x-amz-date"
    headerAuthorization = "authorization"
    unsignedPayload     = "UNSIGNED-PAYLOAD"
)

type SigV4GrpcSigner struct {
    service      string
    region       string
    credProvider aws.CredentialsProvider
    signer       *v4.Signer
}

func NewSigV4GrpcSigner(service string, region string, credProvider aws.CredentialsProvider) *SigV4GrpcSigner {
    signer := v4.NewSigner()
    return &SigV4GrpcSigner{
        service:      service,
        region:       region,
        credProvider: credProvider,
        signer:       signer,
    }
}

func (s *SigV4GrpcSigner) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
    ri, _ := credentials.RequestInfoFromContext(ctx)
    creds, err := s.credProvider.Retrieve(ctx)
    if err != nil {
        return nil, fmt.Errorf("failed to load credentials: %w", err)
    }

    // The URI we get here is scheme://authority/service/ - for siging we want to include the RPC name
    // But RequestInfoFromContext only has the combined /service/rpc-name - so read the URI, and
    // replace the Path with what we get from RequestInfo.
    parsed, err := url.Parse(uri[0])
    if err != nil {
        return nil, err
    }
    parsed.Path = ri.Method

    // Build a request for the signer.
    bodyReader := strings.NewReader("")
    req, err := http.NewRequest("POST", uri[0], bodyReader)
    if err != nil {
        return nil, err
    }
    date := time.Now()
    req.Header.Set(headerContentSha, unsignedPayload)
    req.Header.Set(headerDate, date.String())
    if creds.SessionToken != "" {
        req.Header.Set(headerSecurityToken, creds.SessionToken)
    }
    // The signer wants this as //authority/path
    // So get this by triming off the scheme and the colon before the first slash.
    req.URL.Opaque = strings.TrimPrefix(parsed.String(), parsed.Scheme+":")

    err = s.signer.SignHTTP(context.Background(), creds, req, unsignedPayload, s.service, s.region, date)
    if err != nil {
        return nil, fmt.Errorf("failed to sign request: %w", err)
    }

    // Pull the relevant headers out of the signer, and return them to get
    // included in the request we make.
    reqHeaders := map[string]string{
        headerContentSha:    req.Header.Get(headerContentSha),
        headerDate:          req.Header.Get(headerDate),
        headerAuthorization: req.Header.Get(headerAuthorization),
    }
    if req.Header.Get(headerSecurityToken) != "" {
        reqHeaders[headerSecurityToken] = req.Header.Get(headerSecurityToken)
    }

    return reqHeaders, nil
}

func (c *SigV4GrpcSigner) RequireTransportSecurity() bool {
    return true
}

var addr = flag.String("addr", "some-lattice-service:443", "the address to connect to")
var region = flag.String("region", "us-west-2", "region")

func callUnaryEcho(client ecpb.EchoClient, message string) {
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()
    resp, err := client.UnaryEcho(ctx, &ecpb.EchoRequest{Message: message})
    if err != nil {
        log.Fatalf("client.UnaryEcho(_) = _, %v: ", err)
    }
    fmt.Println("UnaryEcho: ", resp.Message)
}

func main() {
    flag.Parse()
    cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
    if err != nil {
        log.Fatalf("failed to load SDK configuration, %v", err)
    }

    pool, _ := x509.SystemCertPool()
    tlsConfig := &tls.Config{
        RootCAs: pool,
    }

    authority, _, _ := strings.Cut(*addr, ":") // Remove the port from the addr
    opts := []grpc.DialOption{
        grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)),

        // Lattice needs both the Authority to be set (without a port), and the SigV4 signer
        grpc.WithAuthority(authority),
        grpc.WithPerRPCCredentials(NewSigV4GrpcSigner("vpc-lattice-svcs", *region, cfg.Credentials)),
    }

    conn, err := grpc.Dial(*addr, opts...)

    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    rgc := ecpb.NewEchoClient(conn)

    callUnaryEcho(rgc, "hello world")
}
```

# Amazon VPC Lattice 中的資料保護
<a name="data-protection"></a>

 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 Amazon VPC Lattice 中的資料保護。如此模型所述， AWS 負責保護執行所有 的全域基礎設施 AWS 雲端。您負責維護在此基礎設施上託管內容的控制權。此內容包括您所使用 AWS 服務 的安全組態和管理任務。如需有關資料隱私權的更多相關資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需有關歐洲資料保護的相關資訊，請參閱*AWS 安全性部落格*上的[AWS 共同責任模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

## 傳輸中加密
<a name="encryption-transit"></a>

VPC Lattice 是由控制平面和資料平面組成的全受管服務。每個平面在服務中都有不同的用途。控制平面提供用於建立、讀取/描述、更新、刪除和列出 (CRUDL) 資源APIs （例如 `CreateService`和 `UpdateService`)。與 VPC Lattice 控制平面的通訊由 TLS 保護傳輸中。資料平面是 VPC Lattice 調用 API，可提供 服務之間的互連。當您使用 HTTPS 或 TLS 時，TLS 會加密與 VPC Lattice 資料平面的通訊。密碼套件和通訊協定版本使用 VPC Lattice 提供的預設值，且無法設定。如需詳細資訊，請參閱[VPC Lattice 服務的 HTTPS 接聽程式](https-listeners.md)。

## 靜態加密
<a name="encryption-rest"></a>

根據預設，靜態資料的加密有助於降低保護敏感資料時涉及的操作開銷和複雜性。同時，其可讓您建置符合嚴格加密合規性和法規要求的安全應用程式。

**Topics**
+ [使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密](#s3-managed-keys)
+ [伺服器端加密與存放在 AWS KMS (SSE-KMS) 中的 AWS KMS 金鑰](#kms-managed-keys)

### 使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密
<a name="s3-managed-keys"></a>

使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) 時，每個物件都會使用唯一金鑰來加密。作為額外的保護，我們使用我們定期輪換的根金鑰來加密金鑰本身。Amazon S3 伺服器端加密使用目前最強大的其中一種區塊加密法 (256 位元進階加密標準 (AES-256) GCM)，加密您的資料。對於在 AES-GCM 之前加密的物件，仍支援以 AES-CBC 解密這些物件。如需詳細資訊，請參閱[搭配使用伺服器端加密與 Amazon S3-managed加密金鑰 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

如果您為 VPC Lattice 存取日誌的 S3 儲存貯體使用 Amazon S3-managed加密金鑰 (SSE-S3) 啟用伺服器端加密，我們會在每個存取日誌檔案存放在 S3 儲存貯體之前自動加密。如需詳細資訊，請參閱《[Amazon CloudWatch 使用者指南》中的傳送至 Amazon S3 的日誌](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3)。 *Amazon CloudWatch *

### 伺服器端加密與存放在 AWS KMS (SSE-KMS) 中的 AWS KMS 金鑰
<a name="kms-managed-keys"></a>

具有 AWS KMS 金鑰的伺服器端加密 (SSE-KMS) 類似於 SSE-S3，但使用此服務可獲得額外的好處和費用。 AWS KMS 金鑰有個別的許可，可為 Amazon S3 中的物件提供額外的保護，防止未經授權的存取。SSE-KMS 也為您提供稽核線索，顯示您的 AWS KMS 金鑰何時被使用以及由誰使用。如需詳細資訊，請參閱[搭配 AWS Key Management Service (SSE-KMS) 使用伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

**Topics**
+ [加密和解密憑證的私有金鑰](#private-key)
+ [VPC Lattice 的加密內容](#encryption-context)
+ [監控 VPC Lattice 的加密金鑰](#monitoring-encryption-keys)

#### 加密和解密憑證的私有金鑰
<a name="private-key"></a>

您的 ACM 憑證和私有金鑰會使用別名為 **aws/acm** 的 AWS 受管 KMS 金鑰進行加密。您可以在 AWS KMS 主控台的**AWS 受管金鑰下，檢視具有此別名的金鑰** ID。

VPC Lattice 不會直接存取您的 ACM 資源。它使用 AWS TLS Connection Manager 來保護和存取憑證的私有金鑰。當您使用 ACM 憑證建立 VPC Lattice 服務時，VPC Lattice 會將您的憑證與 AWS TLS Connection Manager 建立關聯。方法是 AWS KMS 針對 AWS 具有字首 **aws/acm** 的受管金鑰在 中建立授予。授權是一種政策工具，允許 TLS Connection Manager 使用密碼編譯操作中的 KMS 金鑰。授權可讓承授者主體 (TLS Connection Manager) 呼叫 KMS 金鑰上指定的授予操作，以解密憑證的私有金鑰。TLS Connection Manager 接著會使用憑證和解密的 （純文字） 私有金鑰，與 VPC Lattice 服務的用戶端建立安全連線 (SSL/TLS 工作階段）。當憑證與 VPC Lattice 服務取消關聯時，授權會淘汰。

如果您想要移除對 KMS 金鑰的存取權，建議您使用 或 中的 `update-service`命令，從服務取代 AWS 管理主控台 或刪除憑證 AWS CLI。

#### VPC Lattice 的加密內容
<a name="encryption-context"></a>

[加密內容](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)是一組選用的金鑰/值對，其中包含有關私有金鑰可能用於哪些用途的內容資訊。 會將加密內容 AWS KMS 合併為加密資料，並將其用作額外的已驗證資料，以支援已驗證的加密。

當您的 TLS 金鑰與 VPC Lattice 和 TLS Connection Manager 搭配使用時，您的 VPC Lattice 服務名稱會包含在用來加密靜態金鑰的加密內容中。您可以透過檢視 CloudTrail 日誌中的加密內容，如下一節所示，或查看 ACM 主控台中的**關聯資源**索引標籤，來驗證憑證和私有金鑰正在使用的 VPC Lattice 服務。

若要解密資料，則必須在請求中包含相同的加密內容。VPC Lattice 在所有 AWS KMS 密碼編譯操作中使用相同的加密內容，其中金鑰為 ，`aws:vpc-lattice:arn`而值為 VPC Lattice 服務的 Amazon Resource Name (ARN)。

下列範例展示操作輸出中的加密內容，例如 `CreateGrant`。

```
"encryptionContextEquals": {
    "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
}
```

#### 監控 VPC Lattice 的加密金鑰
<a name="monitoring-encryption-keys"></a>

當您搭配 VPC Lattice 服務使用 AWS 受管金鑰時，您可以使用 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/) 來追蹤 VPC Lattice 傳送的請求 AWS KMS。

**CreateGrant**  
當您將 ACM 憑證新增至 VPC Lattice 服務時，系統會代表您傳送`CreateGrant`請求，讓 TLS Connection Manager 能夠解密與您的 ACM 憑證相關聯的私有金鑰

您可以在 **CloudTrail**、事件歷史記錄、**CreateGrant** 中將`CreateGrant`操作檢視為事件。 ****

以下是 `CreateGrant`操作的 CloudTrail 事件歷史記錄中的範例事件記錄。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "EX_PRINCIPAL_ID",
        "arn": "arn:aws:iam::111122223333:user/Alice",
        "accountId": "111122223333",
        "accessKeyId": "EXAMPLE_KEY_ID",
        "sessionContext": {
            "sessionIssuer": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::111122223333:user/Alice",
                "accountId": "111122223333",
                "userName": "Alice"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-02-06T23:30:50Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "acm.amazonaws.com"
    },
    "eventTime": "2023-02-07T00:07:18Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "acm.amazonaws.com",
    "userAgent": "acm.amazonaws.com",
    "requestParameters": {
        "granteePrincipal": "tlsconnectionmanager.amazonaws.com",
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextEquals": {
                "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
            }
        },
        "retiringPrincipal": "acm.us-west-2.amazonaws.com"
    },
    "responseElements": {
        "grantId": "f020fe75197b93991dc8491d6f19dd3cebb24ee62277a05914386724f3d48758",
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "requestID": "ba178361-8ab6-4bdd-9aa2-0d1a44b2974a",
    "eventID": "8d449963-1120-4d0c-9479-f76de11ce609",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

在上述`CreateGrant`範例中，承授者主體是 TLS Connection Manager，加密內容具有 VPC Lattice 服務 ARN。

**ListGrants**  
您可以使用 KMS 金鑰 ID 和帳戶 ID 來呼叫 `ListGrants` API。這可讓您取得指定 KMS 金鑰的所有授予清單。如需詳細資訊，請參閱 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)。

在 中使用下列`ListGrants`命令 AWS CLI ，以查看所有授予的詳細資訊。

```
aws kms list-grants —key-id your-kms-key-id
```

以下為範例輸出。

```
{
    "Grants": [
        {
            "Operations": [
                "Decrypt"
            ], 
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", 
            "Name": "IssuedThroughACM", 
            "RetiringPrincipal": "acm.us-west-2.amazonaws.com", 
            "GranteePrincipal": "tlsconnectionmanager.amazonaws.com", 
            "GrantId": "f020fe75197b93991dc8491d6f19dd3cebb24ee62277a05914386724f3d48758", 
            "IssuingAccount": "arn:aws:iam::111122223333:root", 
            "CreationDate": "2023-02-06T23:30:50Z", 
            "Constraints": {
                "encryptionContextEquals": {
                  "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                  "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
                }
            }
        }
    ]
}
```

在上述`ListGrants`範例中，承授者主體是 TLS Connection Manager，而加密內容具有 VPC Lattice 服務 ARN。

**解密**  
VPC Lattice 使用 TLS Connection Manager 呼叫 `Decrypt`操作來解密您的私有金鑰，以便在 VPC Lattice 服務中提供 TLS 連線。您可以在 **CloudTrail** 事件歷史記錄 **Decrypt** 中將`Decrypt`操作檢視為事件。 ****

以下是 `Decrypt`操作的 CloudTrail 事件歷史記錄中的範例事件記錄。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "tlsconnectionmanager.amazonaws.com"
    },
    "eventTime": "2023-02-07T00:07:23Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "tlsconnectionmanager.amazonaws.com",
    "userAgent": "tlsconnectionmanager.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "12345126-30d5-4b28-98b9-9153da559963",
    "eventID": "abcde202-ba1a-467c-b4ba-f729d45ae521",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "sharedEventID": "abcde202-ba1a-467c-b4ba-f729d45ae521",
    "eventCategory": "Management"
}
```

# Amazon VPC Lattice 的身分和存取管理
<a name="security-iam"></a>

下列各節說明如何透過控制可執行 VPC Lattice API 動作的人員，來使用 AWS Identity and Access Management (IAM) 協助保護 VPC Lattice 資源。

**Topics**
+ [Amazon VPC Lattice 如何與 IAM 搭配使用](security_iam_service-with-iam.md)
+ [Amazon VPC Lattice API 許可](additional-api-permissions.md)
+ [Amazon VPC Lattice 的身分型政策](security_iam_id-based-policies.md)
+ [使用 Amazon VPC Lattice 的服務連結角色](using-service-linked-roles.md)
+ [AWS Amazon VPC Lattice 的 受管政策](managed-policies.md)

# Amazon VPC Lattice 如何與 IAM 搭配使用
<a name="security_iam_service-with-iam"></a>

在您使用 IAM 管理對 VPC Lattice 的存取之前，請先了解哪些 IAM 功能可與 VPC Lattice 搭配使用。




| IAM 功能 | VPC Lattice 支援 | 
| --- | --- | 
|  [身分型政策](#security_iam_service-with-iam-id-based-policies)  |   是  | 
|  [資源型政策](#security_iam_service-with-iam-resource-based-policies)  |   是  | 
|  [政策動作](#security_iam_service-with-iam-id-based-policies-actions)  |   是  | 
|  [政策資源](#security_iam_service-with-iam-id-based-policies-resources)  |   是  | 
|  [政策條件索引鍵](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   是  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   否   | 
|  [ABAC (政策中的標籤)](#security_iam_service-with-iam-tags)  |   是  | 
|  [臨時憑證](#security_iam_service-with-iam-roles-tempcreds)  |   是  | 
|  [服務角色](#security_iam_service-with-iam-roles-service)  |   否   | 
|  [服務連結角色](#security_iam_service-with-iam-roles-service-linked)  |   是  | 

如需 VPC Lattice 和其他 AWS 服務如何與大多數 IAM 功能搭配使用的高階檢視，請參閱《[AWS IAM 使用者指南》中的與 IAM 搭配使用的 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。 **

## VPC Lattice 的身分型政策
<a name="security_iam_service-with-iam-id-based-policies"></a>

**支援身分型政策：**是

身分型政策是可以附加到身分 (例如 IAM 使用者、使用者群組或角色) 的 JSON 許可政策文件。這些政策可控制身分在何種條件下能對哪些資源執行哪些動作。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

使用 IAM 身分型政策，您可以指定允許或拒絕的動作和資源，以及在何種條件下允許或拒絕動作。如要了解您在 JSON 政策中使用的所有元素，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

## VPC Lattice 內的資源型政策
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**支援資源型政策：**是

以資源為基礎的政策是您連接到 中資源的 JSON 政策文件 AWS。在支援資源型政策的 AWS 服務中，服務管理員可以使用它們來控制對該 AWS 服務特定資源的存取。對於附加政策的資源，政策會定義指定的主體可以對該資源執行的動作以及在何種條件下執行的動作。您必須在資源型政策中指定主體。

VPC Lattice 支援*身分驗證政策*，這是一種以資源為基礎的政策，可讓您控制對服務網路中服務的存取。如需詳細資訊，請參閱[使用身分驗證政策控制對 VPC Lattice 服務的存取](auth-policies.md)。

VPC Lattice 也支援與 整合的資源型許可政策 AWS Resource Access Manager。您可以使用這些以資源為基礎的政策，授予許可來管理與其他 AWS 帳戶或組織的 服務、資源組態和服務網路的連線。如需詳細資訊，請參閱[分享您的 VPC Lattice 實體](sharing.md)。

## VPC Lattice 的政策動作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**支援政策動作：**是

在 IAM 政策陳述式中，您可以從任何支援 IAM 的服務指定任何 API 動作。對於 VPC Lattice，請使用下列字首搭配 API 動作的名稱：`vpc-lattice:`。例如：`vpc-lattice:CreateService`、`vpc-lattice:CreateTargetGroup` 和 `vpc-lattice:PutAuthPolicy`。

若要在單一陳述式中指定多個動作，請用逗號分隔，如下所示：

```
"Action": [ "vpc-lattice:action1", "vpc-lattice:action2" ]
```

您也可以使用萬用字元指定多個動作。例如，您可以指定名稱開頭為 `Get` 文字的所有動作，如下所示：

```
"Action": "vpc-lattice:Get*"
```

如需 VPC Lattice API 動作的完整清單，請參閱*《服務授權參考*》中的 [Amazon VPC Lattice 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html#amazonvpclattice-actions-as-permissions)。

## VPC Lattice 的政策資源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**支援政策資源：**是

在 IAM 政策陳述式中，`Resource` 元素指定陳述式所涵蓋的一個或多個物件。對於 VPC Lattice，每個 IAM 政策陳述式都適用於您使用其 ARNs指定的資源。

特定的 Amazon Resource Name (ARN) 格式取決於資源。當您提供 ARN 時，請將*斜體*文字取代為您的資源特定資訊。
+ **存取日誌訂閱：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:accesslogsubscription/access-log-subscription-id"
  ```
+ **接聽程式：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id/listener/listener-id"
  ```
+ **資源閘道**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:resourcegateway/resource-gateway-id"
  ```
+ **資源組態**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:resourceconfiguration/resource-configuration-id"
  ```
+ **規則：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id/listener/listener-id/rule/rule-id"
  ```
+ **服務：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id"
  ```
+ **服務網路：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetwork/service-network-id"
  ```
+ **服務網路服務關聯：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkserviceassociation/service-network-service-association-id"
  ```
+ **服務網路資源組態關聯**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkresourceassociation/service-network-resource-association-id"
  ```
+ **服務網路 VPC 關聯：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkvpcassociation/service-network-vpc-association-id"
  ```
+ **目標群組：**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:targetgroup/target-group-id"
  ```

## VPC Lattice 的政策條件索引鍵
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**支援服務特定政策條件金鑰：**是

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Condition` 元素會根據定義的條件，指定陳述式的執行時機。您可以建立使用[條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)的條件運算式 (例如等於或小於)，來比對政策中的條件和請求中的值。若要查看所有 AWS 全域條件索引鍵，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

若要查看 VPC Lattice 條件索引鍵的清單，請參閱*《服務授權參考*》中的 [Amazon VPC Lattice 的條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html#amazonvpclattice-policy-keys)。

AWS 支援全域條件金鑰和服務特定的條件金鑰。如需 AWS 全域條件索引鍵的資訊，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

## VPC Lattice 中的存取控制清單 (ACLs)
<a name="security_iam_service-with-iam-acls"></a>

**支援 ACL：**否 

存取控制清單 (ACL) 可控制哪些主體 (帳戶成員、使用者或角色) 擁有存取某資源的許可。ACL 類似於資源型政策，但它們不使用 JSON 政策文件格式。

## 具有 VPC Lattice 的屬性型存取控制 (ABAC)
<a name="security_iam_service-with-iam-tags"></a>

**支援 ABAC (政策中的標籤)：**是

屬性型存取控制 (ABAC) 是一種授權策略，依據稱為標籤的屬性來定義許可。您可以將標籤連接至 IAM 實體 AWS 和資源，然後設計 ABAC 政策，以便在委託人的標籤符合資源上的標籤時允許操作。

如需根據標籤控制存取，請使用 `aws:ResourceTag/key-name`、`aws:RequestTag/key-name` 或 `aws:TagKeys` 條件索引鍵，在政策的[條件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中，提供標籤資訊。

如果服務支援每個資源類型的全部三個條件金鑰，則對該服務而言，值為 **Yes**。如果服務僅支援某些資源類型的全部三個條件金鑰，則值為 **Partial**。

如需 ABAC 的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 ABAC 授權定義許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。如要查看含有設定 ABAC 步驟的教學課程，請參閱《*IAM 使用者指南*》中的[使用屬性型存取控制 (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

## 搭配 VPC Lattice 使用臨時登入資料
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**支援臨時憑證：**是

臨時登入資料提供 AWS 資源的短期存取權，當您使用聯合或切換角色時，會自動建立。 AWS 建議您動態產生臨時登入資料，而不是使用長期存取金鑰。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)與[可與 IAM 搭配運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## VPC Lattice 的服務角色
<a name="security_iam_service-with-iam-roles-service"></a>

**支援服務角色：**否 

 服務角色是服務擔任的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)，可代您執行動作。IAM 管理員可以從 IAM 內建立、修改和刪除服務角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
變更服務角色的許可可能會中斷 VPC Lattice 功能。只有在 VPC Lattice 提供指引時，才能編輯服務角色。

## VPC Lattice 的服務連結角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**支援服務連結角色：**是

 服務連結角色是連結至 的一種服務角色 AWS 服務。服務可以擔任代表您執行動作的角色。服務連結角色會出現在您的 中 AWS 帳戶 ，並由服務擁有。IAM 管理員可以檢視，但不能編輯服務連結角色的許可。

如需建立或管理 VPC Lattice 服務連結角色的資訊，請參閱 [使用 Amazon VPC Lattice 的服務連結角色](using-service-linked-roles.md)。

# Amazon VPC Lattice API 許可
<a name="additional-api-permissions"></a>

您必須授予 IAM 身分 （例如使用者或角色） 許可來呼叫他們所需的 VPC Lattice API 動作，如中所述[VPC Lattice 的政策動作](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions)。此外，對於某些 VPC Lattice 動作，您必須授予 IAM 身分從其他 AWS APIs許可。

## API 的必要許可
<a name="required-API-permissions"></a>

從 API 呼叫下列動作時，您必須授予 IAM 使用者呼叫指定動作的許可。

`CreateResourceConfiguration`  
+ `vpc-lattice:CreateResourceConfiguration`
+ `ec2:DescribeSubnets`
+ `rds:DescribeDBInstances`
+ `rds:DescribeDBClusters`

`CreateResourceGateway`  
+ `vpc-lattice:CreateResourceGateway`
+ `ec2:AssignPrivateIpAddresses`
+ `ec2:AssignIpv6Addresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`

`DeleteResourceGateway`  
+ `vpc-lattice:DeleteResourceGateway`
+ `ec2:DeleteNetworkInterface`

`UpdateResourceGateway`  
+ `vpc-lattice:UpdateResourceGateway`
+ `ec2:AssignPrivateIpAddresses`
+ `ec2:AssignIpv6Addresses`
+ `ec2:UnassignPrivateIpAddresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`
+ `ec2:ModifyNetworkInterfaceAttribute`

`CreateServiceNetworkResourceAssociation`  
+ `vpc-lattice:CreateServiceNetworkResourceAssociation`
+ `ec2:AssignIpv6Addresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DescribeNetworkInterfaces`

`CreateServiceNetworkVpcAssociation`  
+ `vpc-lattice:CreateServiceNetworkVpcAssociation`
+ `ec2:DescribeVpcs`
+ `ec2:DescribeSecurityGroups` （只有在提供安全群組時才需要）

`UpdateServiceNetworkVpcAssociation`  
+ `vpc-lattice:UpdateServiceNetworkVpcAssociation`
+ `ec2:DescribeSecurityGroups` （只有在提供安全群組時才需要）

`CreateTargetGroup`  
+ `vpc-lattice:CreateTargetGroup`
+ `ec2:DescribeVpcs`

`RegisterTargets`  
+ `vpc-lattice:RegisterTargets`
+ `ec2:DescribeInstances` （只有在 `INSTANCE`是目標群組類型時才需要）
+ `ec2:DescribeVpcs` （只有在 `INSTANCE`或 `IP`為目標群組類型時才需要）
+ `ec2:DescribeSubnets` （只有在 `INSTANCE`或 `IP`為目標群組類型時才需要）
+ `lambda:GetFunction` （只有在 `LAMBDA`是目標群組類型時才需要）
+ `lambda:AddPermission` （只有在目標群組尚未擁有叫用指定 Lambda 函數的許可時，才需要）

`DeregisterTargets`  
+ `vpc-lattice:DeregisterTargets`

`CreateAccessLogSubscription`  
+ `vpc-lattice:CreateAccessLogSubscription`
+ `logs:GetLogDelivery`
+ `logs:CreateLogDelivery`

`DeleteAccessLogSubscription`  
+ `vpc-lattice:DeleteAccessLogSubscription`
+ `logs:DeleteLogDelivery`

`UpdateAccessLogSubscription`  
+ `vpc-lattice:UpdateAccessLogSubscription`
+ `logs:UpdateLogDelivery`

# Amazon VPC Lattice 的身分型政策
<a name="security_iam_id-based-policies"></a>

根據預設，使用者和角色沒有建立或修改 VPC Lattice 資源的許可。若要授予使用者對其所需資源執行動作的許可，IAM 管理員可以建立 IAM 政策。

如需了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策，請參閱《*IAM 使用者指南*》中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

如需 VPC Lattice 定義的動作和資源類型的詳細資訊，包括每種資源類型的 ARNs 格式，請參閱*《服務授權參考*》中的 [Amazon VPC Lattice 的動作、資源和條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html)。

**Topics**
+ [政策最佳實務](#security_iam_service-with-iam-policy-best-practices)
+ [完整存取的其他必要許可](#security_iam_id-based-policy-additional-permissions)
+ [VPC Lattice 的身分型政策範例](#security_iam_id-based-policy-examples)

## 政策最佳實務
<a name="security_iam_service-with-iam-policy-best-practices"></a>

身分型政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 VPC Lattice 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時，請遵循下列準則及建議事項：
+ **開始使用 AWS 受管政策並邁向最低權限許可** – 若要開始將許可授予您的使用者和工作負載，請使用將許可授予許多常見使用案例的 *AWS 受管政策*。它們可在您的 中使用 AWS 帳戶。我們建議您定義特定於使用案例 AWS 的客戶受管政策，以進一步減少許可。如需更多資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **套用最低權限許可** – 設定 IAM 政策的許可時，請僅授予執行任務所需的許可。為實現此目的，您可以定義在特定條件下可以對特定資源採取的動作，這也稱為*最低權限許可*。如需使用 IAM 套用許可的更多相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 政策中的條件進一步限制存取權** – 您可以將條件新增至政策，以限制動作和資源的存取。例如，您可以撰寫政策條件，指定必須使用 SSL 傳送所有請求。如果透過特定 例如 使用服務動作 AWS 服務，您也可以使用條件來授予其存取權 CloudFormation。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 驗證 IAM 政策，確保許可安全且可正常運作** – IAM Access Analyzer 驗證新政策和現有政策，確保這些政策遵從 IAM 政策語言 (JSON) 和 IAM 最佳實務。IAM Access Analyzer 提供 100 多項政策檢查及切實可行的建議，可協助您撰寫安全且實用的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 IAM Access Analyzer 驗證政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重要素驗證 (MFA)** – 如果您的案例需要 IAM 使用者或 中的根使用者 AWS 帳戶，請開啟 MFA 以提高安全性。如需在呼叫 API 操作時請求 MFA，請將 MFA 條件新增至您的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[透過 MFA 的安全 API 存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

如需 IAM 中最佳實務的相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 完整存取的其他必要許可
<a name="security_iam_id-based-policy-additional-permissions"></a>

若要使用與 AWS VPC Lattice 整合的其他服務，以及整個 VPC Lattice 功能套件，您必須擁有特定的額外許可。由於[存在混淆代理人](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)權限提升風險，這些許可不包含在`VPCLatticeFullAccess`受管政策中。

您必須將下列政策連接至您的角色，並將其與 `VPCLatticeFullAccess`受管政策搭配使用。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "firehose:TagDeliveryStream",
                "lambda:AddPermission",
                "s3:PutBucketPolicy"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutResourcePolicy"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:CalledVia": [
                        "vpc-lattice.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery*"
        }
    ]
}
```

------

此政策提供下列其他許可：
+ `iam:AttachRolePolicy`：可讓您將指定的受管政策連接至指定的 IAM 角色。
+ `iam:PutRolePolicy`：可讓您新增或更新內嵌在指定 IAM 角色中的內嵌政策文件。
+ `s3:PutBucketPolicy`：可讓您將儲存貯體政策套用至 Amazon S3 儲存貯體。
+ `firehose:TagDeliveryStream`：可讓您新增或更新 Firehose 交付串流的標籤。

## VPC Lattice 的身分型政策範例
<a name="security_iam_id-based-policy-examples"></a>

**Topics**
+ [範例政策：管理與服務網路的 VPC 關聯](#security_iam_id-based-policy-examples-vpc-to-service-network-association)
+ [範例政策：建立與服務網路的服務關聯](#security_iam_id-based-policy-examples-service-to-service-network-association)
+ [範例政策：將標籤新增至資源](#security_iam_id-based-policy-examples-tag-resources)
+ [範例政策：建立服務連結角色](#security_iam_id-based-policy-examples-service-linked-role)

### 範例政策：管理與服務網路的 VPC 關聯
<a name="security_iam_id-based-policy-examples-vpc-to-service-network-association"></a>

以下範例示範一個政策，該政策為具有此政策的使用者提供許可，以建立、更新和刪除與服務網路的 VPC 關聯，但僅適用於 條件中指定的 VPC 和服務網路。如需指定條件索引鍵的詳細資訊，請參閱 [VPC Lattice 的政策條件索引鍵](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:CreateServiceNetworkVpcAssociation",
            "vpc-lattice:UpdateServiceNetworkVpcAssociation",
            "vpc-lattice:DeleteServiceNetworkVpcAssociation"
         ],
         "Resource": [
            "*"
         ],
         "Condition": {
            "StringEquals": { 
               "vpc-lattice:ServiceNetworkArn": "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-903004f88example",
               "vpc-lattice:VpcId": "vpc-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

### 範例政策：建立與服務網路的服務關聯
<a name="security_iam_id-based-policy-examples-service-to-service-network-association"></a>

如果您不是使用條件金鑰來控制對 VPC Lattice 資源的存取，您可以在 `Resource`元素中指定資源ARNs，以改為控制存取。

下列範例示範政策，透過指定可與 `CreateServiceNetworkServiceAssociation` API 動作搭配使用的 服務和 服務網路的 ARNs，將服務關聯限制為使用者可建立的服務網路。如需指定 ARN 值的詳細資訊，請參閱 [VPC Lattice 的政策資源](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources)。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:CreateServiceNetworkServiceAssociation"
         ],
         "Resource": [
            "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetworkserviceassociation/*",
            "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-04d5cc9b88example",
            "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-903004f88example"
         ]
      }
   ]
}
```

------

### 範例政策：將標籤新增至資源
<a name="security_iam_id-based-policy-examples-tag-resources"></a>

以下範例示範一個政策，該政策授予具有此政策的使用者在 VPC Lattice 資源上建立標籤的許可。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:TagResource"
         ],
         "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:*/*"
      }
   ]
}
```

------

### 範例政策：建立服務連結角色
<a name="security_iam_id-based-policy-examples-service-linked-role"></a>

當 中的任何使用者第一次建立 VPC Lattice 資源時，VPC Lattice 需要許可才能 AWS 帳戶 建立服務連結角色。如果服務連結角色尚不存在，VPC Lattice 會在您的帳戶中建立該角色。服務連結角色會授予 VPC Lattice 的許可，使其可以 AWS 服務 代表您呼叫其他 。如需詳細資訊，請參閱[使用 Amazon VPC Lattice 的服務連結角色](using-service-linked-roles.md)。

為能成功自動建立該角色，使用者必須已獲許可執行 `iam:CreateServiceLinkedRole` 動作。

```
"Action": "iam:CreateServiceLinkedRole"
```

下列範例示範一個政策，該政策授予具有此政策的使用者為 VPC Lattice 建立服務連結角色的許可。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": "iam:CreateServiceLinkedRole",
         "Resource": "arn:aws:iam::*:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice",
         "Condition": {
            "StringLike": {
               "iam:AWSServiceName":"vpc-lattice.amazonaws.com"
            }
         }
      }
   ]
}
```

------

如需詳細資訊，請參閱 *IAM 使用者指南*中的[服務連結角色許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

# 使用 Amazon VPC Lattice 的服務連結角色
<a name="using-service-linked-roles"></a>

Amazon VPC Lattice 會將服務連結角色用於 AWS 服務 代表您呼叫其他 所需的許可。如需詳細資訊，請參閱「IAM 使用者指南」**中的[服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)。

VPC Lattice 使用名為 的服務連結角色AWSServiceRoleForVpcLattice。

## VPC Lattice 的服務連結角色許可
<a name="slr-permissions"></a>

**AWSServiceRoleForVpcLattice** 服務連結角色信任下列服務擔任該角色：
+ `vpc-lattice.amazonaws.com`

名為 的角色許可政策AWSVpcLatticeServiceRolePolicy允許 VPC Lattice 在`AWS/VpcLattice`命名空間中發佈 CloudWatch 指標。如需詳細資訊，請參閱《 *AWS 受管政策參考*[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html)》中的 。

您必須設定許可，IAM 實體 (如使用者、群組或角色) 才可建立、編輯或刪除服務連結角色。如需詳細資訊，請參閱[範例政策：建立服務連結角色](security_iam_id-based-policies.md#security_iam_id-based-policy-examples-service-linked-role)。

## 為 VPC Lattice 建立服務連結角色
<a name="create-slr"></a>

您不需要手動建立服務連結角色，當您在 AWS 管理主控台、 AWS CLI或 AWS API 中建立 VPC Lattice 資源時，VPC Lattice 會為您建立服務連結角色。

若您刪除此服務連結角色，之後需要再次建立，您可以在帳戶中使用相同程序重新建立角色。當您建立 VPC Lattice 資源時，VPC Lattice 會再次為您建立服務連結角色。

## 編輯 VPC Lattice 的服務連結角色
<a name="edit-slr"></a>

您可以使用 IAM 編輯 **AWSServiceRoleForVpcLattice** 的描述。如需詳細資訊，請參閱 *IAM 使用者指南*中的[編輯服務連結角色描述](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-service-linked-role.html#edit-service-linked-role-iam-console)。

## 刪除 VPC Lattice 的服務連結角色
<a name="delete-slr"></a>

如果您不再需要使用 Amazon VPC Lattice，我們建議您刪除 **AWSServiceRoleForVpcLattice**。

只有在刪除 中的所有 VPC Lattice 資源後，才能刪除此服務連結角色 AWS 帳戶。

使用 IAM 主控台 AWS CLI、 或 AWS API 來刪除 **AWSServiceRoleForVpcLattice** 服務連結角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[刪除服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#id_roles_manage_delete_slr)。

刪除服務連結角色之後，當您在 中建立 VPC Lattice 資源時，VPC Lattice 會再次建立角色 AWS 帳戶。

## VPC Lattice 服務連結角色支援的 區域
<a name="slr-regions"></a>

VPC Lattice 支援在提供服務的所有區域中使用服務連結角色。

# AWS Amazon VPC Lattice 的 受管政策
<a name="managed-policies"></a>

 AWS 受管政策是由 AWS AWS 受管政策建立和管理的獨立政策旨在為許多常用案例提供許可，以便您可以開始將許可指派給使用者、群組和角色。

請記住， AWS 受管政策可能不會授予特定使用案例的最低權限許可，因為這些許可可供所有 AWS 客戶使用。我們建議您定義特定於使用案例的[客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)，以便進一步減少許可。

您無法變更 AWS 受管政策中定義的許可。如果 AWS 更新 AWS 受管政策中定義的許可，則更新會影響政策連接的所有主體身分 （使用者、群組和角色）。 AWS 服務 當新的 啟動或新的 API 操作可用於現有 服務時， AWS 最有可能更新 AWS 受管政策。

如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AWS 受管政策：VPCLatticeFullAccess
<a name="vpc-lattice-fullaccess-policy"></a>

此政策提供 Amazon VPC Lattice 的完整存取權，以及對其他相依服務的有限存取權。它包含執行下列動作的許可：
+ ACM – 擷取自訂網域名稱的 SSL/TLS 憑證 ARN。
+ CloudWatch – 檢視存取日誌和監控資料。
+ CloudWatch Logs – 設定存取日誌並將其傳送至 CloudWatch Logs。
+ Amazon EC2 – 設定網路介面並擷取 EC2 執行個體和 VPCs的相關資訊。這用於建立資源組態、資源閘道和目標群組、設定 VPC Lattice 實體關聯，以及註冊目標。
+ Elastic Load Balancing – 擷取 Application Load Balancer 的相關資訊，將其註冊為目標。
+ Firehose – 擷取用於存放存取日誌之交付串流的相關資訊。
+ Lambda – 擷取 Lambda 函數的相關資訊，將其註冊為目標。
+ Amazon RDS – 擷取 RDS 叢集和執行個體的相關資訊。
+ Amazon S3 – 擷取用於存放存取日誌之 S3 儲存貯體的相關資訊。

若要檢視此政策的許可，請參閱《 *AWS 受管政策參考*》中的 [VPCLatticeFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeFullAccess.html)。

若要使用與 AWS VPC Lattice 整合的其他服務，以及整個 VPC Lattice 功能套件，您必須擁有特定的額外許可。由於[存在混淆代理人](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)權限提升風險，這些許可不包含在`VPCLatticeFullAccess`受管政策中。如需詳細資訊，請參閱[完整存取的其他必要許可](security_iam_id-based-policies.md#security_iam_id-based-policy-additional-permissions)。

## AWS 受管政策：VPCLatticeReadOnlyAccess
<a name="vpc-lattice-read-onlyaccess-policy"></a>

此政策提供對 Amazon VPC Lattice 的唯讀存取權，以及對其他相依服務的有限存取權。它包含執行下列動作的許可：
+ ACM – 擷取自訂網域名稱的 SSL/TLS 憑證 ARN。
+ CloudWatch – 檢視存取日誌和監控資料。
+ CloudWatch Logs – 檢視存取日誌訂閱的日誌交付資訊。
+ Amazon EC2 – 擷取 EC2 執行個體和 VPCs 的相關資訊，以建立目標群組並註冊目標。
+ Elastic Load Balancing – 擷取 Application Load Balancer 的相關資訊。
+ Firehose – 擷取有關存取日誌交付的交付串流資訊。
+ Lambda – 檢視 Lambda 函數的相關資訊。
+ Amazon RDS – 擷取 RDS 叢集和執行個體的相關資訊。
+ Amazon S3 – 擷取存取日誌交付的 S3 儲存貯體相關資訊。

若要檢視此政策的許可，請參閱《 *AWS 受管政策參考*》中的 [VPCLatticeReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeReadOnlyAccess.html)。

## AWS 受管政策：VPCLatticeServicesInvokeAccess
<a name="vpc-lattice-services-invoke-access-policy"></a>

此政策提供叫用 Amazon VPC Lattice 服務的存取權。

若要檢視此政策的許可，請參閱《 *AWS 受管政策參考*》中的 [VPCLatticeServicesInvokeAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeServicesInvokeAccess.html)。

## AWS 受管政策：AWSVpcLatticeServiceRolePolicy
<a name="service-linked-role-policy"></a>

此政策會連接到名為 **AWSServiceRoleForVpcLattice** 的服務連結角色，以允許 VPC Lattice 代表您執行動作。您無法將此政策連接至 IAM 實體。如需詳細資訊，請參閱[使用 Amazon VPC Lattice 的服務連結角色](using-service-linked-roles.md)。

若要檢視此政策的許可，請參閱《 *AWS 受管政策參考*》中的 [AWSVpcLatticeServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html)。

## AWS 受管政策的 VPC Lattice 更新
<a name="policy-updates"></a>

檢視自此服務開始追蹤這些變更以來，VPC Lattice AWS 受管政策更新的詳細資訊。如需此頁面變更的自動提醒，請訂閱 VPC Lattice 使用者指南的 RSS 摘要。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
| [VPCLatticeFullAccess](#vpc-lattice-fullaccess-policy) | VPC Lattice 新增唯讀許可來描述 Amazon RDS 叢集和執行個體。 | 2024 年 12 月 1 日 | 
| [VPCLatticeReadOnlyAccess](#vpc-lattice-read-onlyaccess-policy) | VPC Lattice 新增唯讀許可來描述 Amazon RDS 叢集和執行個體。 | 2024 年 12 月 1 日 | 
| [AWSVpcLatticeServiceRolePolicy](#service-linked-role-policy) | VPC Lattice 新增許可，以允許 VPC Lattice 建立請求者管理的網路介面。 | 2024 年 12 月 1 日 | 
| [VPCLatticeFullAccess](#vpc-lattice-fullaccess-policy) | VPC Lattice 新增了新的政策，以授予對 Amazon VPC Lattice 的完整存取權，以及對其他相依服務的有限存取權。 | 2023 年 3 月 31 日 | 
| [VPCLatticeReadOnlyAccess](#vpc-lattice-read-onlyaccess-policy) | VPC Lattice 新增了新的政策，以授予對 Amazon VPC Lattice 的唯讀存取許可，以及對其他相依服務的有限存取許可。 | 2023 年 3 月 31 日 | 
| [VPCLatticeServicesInvokeAccess](#vpc-lattice-services-invoke-access-policy) | VPC Lattice 新增了新政策，以授予叫用 Amazon VPC Lattice 服務的存取權。 | 2023 年 3 月 31 日 | 
| [AWSVpcLatticeServiceRolePolicy](#service-linked-role-policy) | VPC Lattice 會將許可新增至其服務連結角色，以允許 VPC Lattice 在AWS/VpcLattice命名空間中發佈 CloudWatch 指標。此AWSVpcLatticeServiceRolePolicy政策包含呼叫 CloudWatch [PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html) API 動作的許可。如需詳細資訊，請參閱[使用 Amazon VPC Lattice 的服務連結角色](using-service-linked-roles.md)。 | 2022 年 12 月 5 日 | 
|  VPC Lattice 已開始追蹤變更  |  VPC Lattice 已開始追蹤其 AWS 受管政策的變更。  | 2022 年 12 月 5 日 | 

# Amazon VPC Lattice 的合規驗證
<a name="compliance-validation"></a>

在多個合規計畫中，第三方稽核人員會評估 Amazon VPC Lattice 的安全性和 AWS 合規性。

若要了解 是否 AWS 服務 在特定合規計劃範圍內，請參閱[AWS 服務 合規計劃範圍內](https://aws.amazon.com/compliance/services-in-scope/)然後選擇您感興趣的合規計劃。如需一般資訊，請參閱[AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告 AWS Artifact。如需詳細資訊，請參閱[在 中下載報告 AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

您使用 時的合規責任 AWS 服務 取決於資料的機密性、您公司的合規目標，以及適用的法律和法規。如需使用 時合規責任的詳細資訊 AWS 服務，請參閱 [AWS 安全文件](https://docs.aws.amazon.com/security/)。

# 使用介面端點存取 Amazon VPC Lattice (AWS PrivateLink)
<a name="vpc-interface-endpoints"></a>

您可以建立*介面 VPC 端點*，在 VPC 和 Amazon VPC Lattice 之間建立私有連線。介面端點採用 [AWS PrivateLink](https://aws.amazon.com/privatelink/)技術，可讓您在沒有網際網路閘道、NAT 裝置、VPN 連線或 Direct Connect 連線的情況下，私下存取 VPC Lattice APIs。VPC 中的執行個體不需要公有 IP 地址，即可與 VPC Lattice APIs通訊。

每個界面端點都由子網路中的一或多個[網路界面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)表示。

## 介面 VPC 端點的考量事項
<a name="vpc-endpoint-considerations"></a>

設定 VPC Lattice 的介面 VPC 端點之前，請務必檢閱 *AWS PrivateLink 指南*中的[AWS 服務 透過 存取 AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html)。

VPC Lattice 支援從您的 VPC 呼叫其所有 API 動作。

## 為 VPC Lattice 建立介面 VPC 端點
<a name="vpc-endpoint-create"></a>

您可以使用 Amazon VPC 主控台或 AWS Command Line Interface () 為 VPC Lattice 服務建立 VPC 端點AWS CLI。如需詳細資訊，請參閱《 *AWS PrivateLink 指南*》中的[建立介面 VPC 端點](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)。

使用下列服務名稱建立 VPC Lattice 的 VPC 端點：

`com.amazonaws.region.vpc-lattice`

如果您為端點啟用私有 DNS，則可以使用區域的預設 DNS 名稱向 VPC Lattice 提出 API 請求，例如 `vpc-lattice.us-east-1.amazonaws.com`。

# Amazon VPC Lattice 中的彈性
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基礎設施是以 AWS 區域 和可用區域為基礎建置。

AWS 區域 提供多個實體分隔和隔離的可用區域，這些可用區域與低延遲、高輸送量和高備援聯網連接。

透過可用區域，您可以設計與操作的應用程式和資料庫，在可用區域之間自動容錯移轉而不會發生中斷。可用區域的可用性、容錯能力和擴展能力，均較單一或多個資料中心的傳統基礎設施還高。

如需 AWS 區域 和可用區域的詳細資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

# Amazon VPC Lattice 中的基礎設施安全性
<a name="infrastructure-security"></a>

Amazon VPC Lattice 是受管服務，受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 VPC Lattice。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。