

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

# 使用身分驗證政策控制對 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)。


| 條件索引鍵 | 說明 | 範例 | 適用於匿名 （未驗證） 來電者？ | 適用於 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)
