控制對外部金鑰存放區的存取 - AWS Key Management Service

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

控制對外部金鑰存放區的存取

對於外部金鑰存放區中的 KMS 金鑰而言,與標準 KMS 金鑰搭配使用的所有 AWS KMS 存取控制功能 (金鑰政策IAM 政策授予) 的運作方式相同。您可以使用 IAM 政策來控制對建立和管理外部金鑰存放區之 API 操作的存取。您可以使用 IAM 政策和金鑰政策,以控制對外部金鑰存放區中的 AWS KMS keys 的存取。您也可以使用 AWS 組織的服務控制政策VPC 端點政策來控制對外部金鑰存放區中 KMS 金鑰的存取。

建議您僅向使用者和角色提供執行任務所需的許可。

授權外部金鑰存放區管理器

建立及管理外部金鑰存放區的主體需要自訂金鑰存放區操作許可。以下清單說明了外部金鑰存放區管理器所需的最低許可。由於自訂金鑰存放區不是 AWS 資源,因此您無法為 AWS 帳戶 中的主體提供外部金鑰存放區許可。

  • kms:CreateCustomKeyStore

  • kms:DescribeCustomKeyStores

  • kms:ConnectCustomKeyStore

  • kms:DisconnectCustomKeyStore

  • kms:UpdateCustomKeyStore

  • kms:DeleteCustomKeyStore

建立外部金鑰存放區的主體需要許可,才能建立及設定外部金鑰存放區元件。主體只能在自己的帳戶中建立外部金鑰存放區。若要建立具有 VPC 端點服務連接的外部金鑰存放區,主體必須具有建立下列元件的許可:

  • Amazon VPC

  • 公有和私有子網路

  • 網路負載平衡器和目標群組

  • Amazon VPC 端點服務

如需詳細資訊,請參閱 Amazon VPC 的身分和存取管理VPC 端點和 VPC 端點服務的身分和存取管理以及 Elastic Load Balancing API 許可

授權外部金鑰存放區中 KMS 金鑰的使用者

在外部金鑰存放區建立和管理 AWS KMS keys 的主體,與在 AWS KMS 中建立和管理任何 KMS 金鑰的主體,需要相同的許可。外部金鑰存放區中 KMS 金鑰的預設金鑰政策與 AWS KMS 中 KMS 金鑰的預設金鑰政策完全相同。屬性型存取控制 (ABAC) 使用標籤和別名來控制對 KMS 金鑰的存取,對外部金鑰存放區中的 KMS 金鑰也有效。

將自訂金鑰存放區中的 KMS 金鑰用於密碼編譯操作的委託人,需要許可對 KMS 金鑰執行密碼編譯操作,例如 kms:Decrypt。您可以在 IAM 或金鑰政策中提供這些許可。但是,他們使用自訂金鑰存放區中的 KMS 金鑰並不需要任何額外的許可。

若要設定僅適用於外部金鑰存放區中 KMS 金鑰的許可,請使用值為 EXTERNAL_KEY_STOREkms:KeyOrigin 政策條件。您可以使用此條件來限制 kms:CreateKey權限或 KMS 金鑰資源專屬的任何權限。例如,下列 IAM 政策允許其所連接的身分,以便對帳戶中的所有 KMS 金鑰呼叫指定的操作,前提是 KMS 金鑰位於外部金鑰存放區中。請注意,您可以限制外部金鑰存放區中的 KMS 金鑰和 AWS 帳戶 中的 KMS 金鑰的許可,但不能限制帳戶中任何特定外部金鑰存放區的許可。

{ "Sid": "AllowKeysInExternalKeyStores", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:KeyOrigin": "EXTERNAL_KEY_STORE" } } }

授權 AWS KMS 與外部金鑰存放區代理通訊

AWS KMS 只能透過您提供的外部金鑰存放區代理與外部金鑰管理器通訊。AWS KMS 透過搭配使用第 4 版簽署程序 (SigV4) 和您指定的外部金鑰存放區代理身分驗證憑證來簽署其請求,從而對代理進行身分驗證。如果您將公有端點連接用於外部金鑰存放區代理,則 AWS KMS 不需要任何其他許可。

不過,如果您使用的是 VPC 端點服務連接,則必須為 AWS KMS 授予許可,才能建立 Amazon VPC 端點服務的介面端點。無論外部金鑰存放區代理位於您的 VPC 中或者外部金鑰存放區代理位於其他位置,但使用 VPC 端點服務與 AWS KMS 通訊,則都需要此許可。

若AWS KMS要允許建立介面端點,請使用 Amazon VPC 主控台ModifyVpcEndpointServicePermissions操作。允許下列主體的許可:cks.kms.<region>.amazonaws.com

例如,下列 AWS CLI 命令允許 AWS KMS 連接到美國西部 (奧勒岡) (us-west-2) 區域中指定的 VPC 端點服務。使用此命令之前,請將 Amazon VPC 服務 ID 和 AWS 區域 取代為您組態的有效值。

modify-vpc-endpoint-service-permissions --service-id vpce-svc-12abc34567def0987 --add-allowed-principals '["cks.kms.us-west-2.amazonaws.com"]'

若要移除此權限,請使用 Amazon VPC 主控台或與RemoveAllowedPrincipals參數ModifyVpcEndpointServicePermissions搭配使用。

外部金鑰存放區代理授權 (選用)

某些外部金鑰存放區代理會實作使用其外部金鑰的授權需求。允許外部金鑰存放區代理 (但不是必需的) 來設計和實作授權方案,該方案允許特定使用者僅在特定條件下請求特定操作。例如,代理可能會設定為允許使用者 A 使用特定的外部金鑰進行加密,但無法使用其進行解密。

代理授權獨立於 AWS KMS 對所有外部金鑰存放區代理所要求的基於 SigV4 的代理身分驗證。其也獨立於金鑰政策、IAM 政策和授予,其可授權存取會影響外部金鑰存放區或其 KMS 金鑰的操作。

若要透過外部金鑰存放區代理啟用授權,AWS KMS 會在每個代理 API 請求中包含中繼資料,這包括呼叫者、KMS 金鑰、AWS KMS 操作、AWS 服務 (如果有的話)。外部金鑰代理 API 第 1 版 (v1) 的請求中繼資料如下所示。

"requestMetadata": { "awsPrincipalArn": string, "awsSourceVpc": string, // optional "awsSourceVpce": string, // optional "kmsKeyArn": string, "kmsOperation": string, "kmsRequestId": string, "kmsViaService": string // optional }

例如,您可以將代理設定為允許來自特定主體 (awsPrincipalArn) 的請求,但只有當特定 AWS 服務 (kmsViaService) 代表主體提出請求時才可以。

如果代理授權失敗,相關 AWS KMS 操作會失敗,並顯示說明錯誤的訊息。如需詳細資訊,請參閱 代理授權問題

mTLS 身份驗證 (選用)

若要讓外部金鑰存放區代理對來自 AWS KMS 的請求進行身分驗證,AWS KMS 會使用外部金鑰存放區的 Signature V4 (SigV4) 代理身分驗證憑證將所有請求簽署至外部金鑰存放區代理。

為了進一步保證外部金鑰存放區代理僅回應 AWS KMS 請求,某些外部金鑰代理支援交互式 Transport Layer Security (mTLS),在這種情況下,交易雙方都使用憑證來互相驗證。mTLS 會將用戶端身分驗證 (外部金鑰存放區代理伺服器會驗證 AWS KMS 用戶端) 新增至標準 TLS 提供的伺服器端身分驗證。在極少數情況下,您的代理身分驗證憑證會洩露,mTLS 會防止第三方對外部金鑰存放區代理發出成功的 API 請求。

若要實作 mTLS,請將外部金鑰存放區代理設定為僅接受具有下列屬性的用戶端 TLS 憑證:

  • TLS 憑證上的主體通用名稱必須為 cks.kms.<Region>.amazonaws.com,例如 cks.kms.eu-west-3.amazonaws.com

  • 憑證必須鏈結至與 Amazon Trust Services 相關聯的憑證授權機構。