使用身份驗證政策控制對 VPC 萊迪思服務的訪問 - Amazon VPC Lattice

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

使用身份驗證政策控制對 VPC 萊迪思服務的訪問

VPC 萊迪思身份驗證政策是您附加到服務網路或服務的 IAM 政策文件,用於控制指定的主體是否可以存取一組服務或特定服務。您可以將一個身份驗證策略附加到要控制訪問的每個服務網絡或服務。

驗證政策與以 IAM 身分為基礎的政策不同。IAM 身分型政策會附加至 IAM 使用者、群組或角色,並定義這些身分可對哪些資源執行的動作。驗證原則會附加至服務和服務網路。為了授權成功,身份驗證策略和基於身份的策略都需要具有明確的 allow 語句。如需詳細資訊,請參閱 授權如何運作

您可以使用 AWS CLI 和主控台來檢視、新增、更新或移除服務和服務網路上的驗證原則。使用時 AWS CLI,請記住您的命令會在為您的 AWS 區域 設定檔設定中執行。如果您想在不同區域中執行命令,則可變更設定檔的預設區域,或搭配 --region 參數使用命令。

要開始使用身份驗證策略,請按照以下步驟創建適用於服務網絡的身份驗證策略。對於不希望應用於其他服務的限制性更嚴格的權限,您可以選擇性地在單個服務上設置身份驗證策略。

下列 AWS CLI 工作說明如何使用驗證原則來管理服務網路的存取。如需使用主控台的指示,請參閱VPC 格子中的服務網絡

將身份驗證策略添加到服務網絡

請按照本節中的步驟使用以下操 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" }
  2. 使用命put-auth-policy令,指定要在其中添加身份驗證策略和要添加的身份驗證策略的服務網絡的 ID。

    例如,使用以下命令為具有 ID 的服務網絡創建身份驗證策略sn-0123456789abcdef0

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

    使用 JSON 建立原則定義。如需詳細資訊,請參閱 身份驗證策略中的常見元素

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

    { "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" }
  2. 使用命put-auth-policy令,指定要在其中添加身份驗證策略和要添加的身份驗證策略的服務網絡的 ID。

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

    使用 JSON 建立原則定義。如需詳細資訊,請參閱 身份驗證策略中的常見元素

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

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

變更服務網路的驗證類型

若要停用服務網路的驗證原則

將指update-service-network令與--auth-type選項和值搭配使用NONE

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

如果您稍後需要再次啟用身份驗證策略,請運行此命令並為該--auth-type選項AWS_IAM指定。

從服務網絡中刪除身份驗證策略

從服務網路移除驗證政策

使用 delete-auth-policy 命令。

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

如果您在將服務網絡的身份驗證類型更改為之前刪除身份驗證策略,則請求將失敗NONE

下列 AWS CLI 工作說明如何使用驗證原則來管理服務的存取權。如需使用主控台的指示,請參閱VPC 格子的服務

將身份驗證策略添加到服務

請依照下列步驟使 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" }
  2. 使用命put-auth-policy令,指定要在其中添加身份驗證策略和要添加的身份驗證策略的服務的 ID。

    例如,使用下列命令為識別碼 svc- 0123456789abcdef0 的服務建立驗證原則。

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

    使用 JSON 建立原則定義。如需詳細資訊,請參閱 身份驗證策略中的常見元素

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

    { "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" }
  2. 使用命put-auth-policy令,指定要在其中添加身份驗證策略和要添加的身份驗證策略的服務的 ID。

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

    使用 JSON 建立原則定義。如需詳細資訊,請參閱 身份驗證策略中的常見元素

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

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

更改服務的身份驗證類型

若要停用服務的驗證原則

將指update-service令與--auth-type選項和值搭配使用NONE

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

如果您稍後需要再次啟用身份驗證策略,請運行此命令並為該--auth-type選項AWS_IAM指定。

從服務中刪除身份驗證策略

從服務中刪除身份驗證策略

使用 delete-auth-policy 命令。

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

如果您在將服務的 auth 類型更改為之前刪除身份驗證策略,則請求將失敗NONE

如果您啟用需要對服務進行身份驗證請求的身份驗證策略,則對該服務的任何請求都必須包含使用簽名版本 4(SIGv4)計算的有效請求簽名。如需詳細資訊,請參閱 針對 Amazon VPC 格子進行 Sigv4 驗證請求

身份驗證策略中的常見元素

VPC 萊迪思驗證政策的指定語法與 IAM 政策相同。如需詳細資訊,請參閱 IAM 使用指南中的以身分識別為基礎的政策和以資源為基礎的政策。

身份驗證策略包含以下元素:

  • 主體 — 允許存取陳述式中動作與資源的人員或應用程式。在驗證政策中,主體是身為此權限接收者的 IAM 實體。主體會經過驗證為 IAM 實體,以便向特定資源或資源群組發出請求,就像服務網路中的服務一樣。

    您必須在資源型政策中指定主體。主參與者可以包括帳戶、使用者、角色、同盟使用者或 AWS 服務。如需詳細資訊,請參閱 IAM 使用者指南中的 AWS JSON 政策元素:主體

  • 效果 — 指定主參與者要求特定動作時的效果。可以是 AllowDeny。根據預設,當您使用 IAM 對服務或服務網路啟用存取控制時,主體沒有向服務或服務網路發出請求的權限。

  • — 您授與或拒絕權限的特定 API 動作。VPC 格子支援使用vpc-lattice-svcs前置詞的動作。如需詳細資訊,請參閱服務授權參考資料中的 Amazon VPC 萊迪思服務定義的動作。

  • 資源 — 受動作影響的服務。

  • 條件 — 條件是選擇性的。您可以使用它們來控制政策的生效時間。如需詳細資訊,請參閱服務授權參考中的 Amazon VPC 萊迪思服務的條件金鑰

建立和管理驗證政策時,您可能需要使用 IAM 政策產生器

需求

JSON 中的策略不得包含換行符或空行。

身份驗證策略的資源格式

您可以通過創建使用具有模式的匹配<serviceARN>/<path>模式的身份驗證策略來限制對特定資源的Resource訪問,如以下示例所示。

身份驗證策略的資源示例
通訊協定 範例
HTTP
  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/rates"

  • "Resource": "*/rates"

  • "Resource": "*/*"

gRPC
  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/api.parking/GetRates"

  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/api.parking/*"

  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/*"

使用下列 Amazon 資源名稱 (ARN) 資源格式<serviceARN>

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

例如:

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

可以在身份驗證策略中使用的條件密鑰

訪問可以通過身份驗證策略的條件元素中的條件鍵進一步控制。根據通訊協定以及要求是使用簽章版本 4 (SIGv4) 還是匿名簽署,這些條件金鑰可供評估。條件金鑰名稱有區分大小寫。

AWS 提供可用來控制存取的全域條件索引鍵,例如aws:PrincipalOrgIDaws:SourceIp。若要查看 AWS 全域條件金鑰清單,請參閱《IAM 使用者指南》中的AWS 全域條件內容金鑰

下面的故事列出了 VPC 格子條件鍵。如需詳細資訊,請參閱服務授權參考中的 Amazon VPC 萊迪思服務的條件金鑰

身份驗證策略的條件密鑰
條件索引鍵 描述 範例 可用於匿名(未經身份驗證的)呼叫者? 適用於 gRPC 嗎?
vpc-lattice-svcs:Port 根據要求對其進行的服務連接埠篩選存取 80
vpc-lattice-svcs:RequestMethod 依請求的方法來篩選存取權 GET 總是張貼
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

匿名 (未驗證) 主體

匿名主體是指未使用簽章版本 4 (SIGv4) 簽署 AWS 要求的來電者,且位於連線至服務網路的 VPC 內。如果身份驗證策略允許,匿名主體可以向服務網絡中的服務發出未經驗證的請求。

驗證政策示例

以下是需要經過驗證的主體提出要求的範例驗證原則。

所有範例均使用「us-west-2地區」,並包含虛擬帳號 ID。

範例 1:限制特定 AWS 組織對服務的存取

以下身份驗證策略示例授予任何經過身份驗證的請求的權限,以訪問該策略適用的服務網絡中的任何服務。但是,請求必須來自屬於條件中指定 AWS 組織的主參與者。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "vpc-lattice-svcs:Invoke", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": [ "o-123456example" ] } } } ] }
範例 2:依特定 IAM 角色限制對服務的存取

以下身份驗證策略示例授予任何使用 IAM 角色rates-clientResource元素中指定的服務上發出 HTTP GET 請求的身份驗證請求的許可。Resource元素中的資源與附加策略的服務相同。

{ "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 ID 為的 VPC 中主體的已驗證請求。vpc-1a2b3c4d

{ "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" } } } ] }

授權如何運作

當 VPC 萊迪思服務收到請求時, AWS 強制代碼會一起評估所有相關權限策略,以確定是否授權還是拒絕請求。它會評估授權期間適用於請求內容的所有 IAM 身分型政策和驗證政策。默認情況下,當 auth 類型為AWS_IAM時,所有請求都被隱式拒絕。來自所有相關策略的明確允許會覆寫預設值。

授權包括:

  • 收集所有相關的 IAM 身分型政策和身份驗證政策。

  • 評估產生的原則集:

    • 確認請求者 (例如 IAM 使用者或角色) 具有從要求者所屬帳戶執行作業的權限。如果沒有明確的 allow 聲明,則 AWS 不授權請求。

    • 驗證服務網絡的身份驗證策略允許該請求。如果啟用了身份驗證策略,但沒有明確的 allow 語句,則 AWS 不授權請求。如果有明確的 allow 語句,或者 auth 類型是NONE,則代碼將繼續。

    • 驗證服務的身份驗證策略是否允許該請求。如果啟用了身份驗證策略,但沒有明確的 allow 語句,則 AWS 不授權請求。如果有明確的 allow 語句,或者 auth 類型是NONE,則強制代碼返回允許的最終決定。

    • 任何政策中的明確拒絕會覆寫任何允許。

該圖顯示了授權工作流程。提出要求時,相關原則會允許或拒絕要求存取特定服務。

授權工作流