AWS KMS 中的授權 - AWS Key Management Service

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

AWS KMS 中的授權

授權是一個政策工具,允許 AWS 主體使用密碼編譯操作中的 KMS 金鑰。它也可以讓其檢視 KMS 金鑰 (DescribeKey),並建立和管理授予。當授權存取 KMS 金鑰時,會考慮與金鑰政策IAM 政策一起授予。授予通常用於臨時許可,因為您可以建立授予、使用其許可並刪除授予,而無需變更金鑰政策或 IAM 政策。

授予通常會由與 AWS KMS 整合的 AWS 服務使用,以加密您的靜態資料。服務會代表帳戶中的使用者建立授予、使用其許可,並在其任務完成後立即淘汰授予。如需 AWS 服務如何使用授予的詳細資訊,請參閱服務使用者指南或開發人員指南中的 AWS 服務使用 AWS KMS 的方式靜態加密主題。

有關示範如何以幾種程式設計語言使用授予的程式碼範例,請參閱 使用授與

關於授予

授予是非常靈活和有用的存取控制機制。當您建立 KMS 金鑰的授予時,只要授予中的所有指定條件都滿足,授予就會允許承授者主體呼叫 KMS 金鑰上指定的授予操作。

  • 每個授予只允許存取一個 KMS 金鑰。您可以在不同的 AWS 帳戶 中為 KMS 金鑰建立授予。

  • 授予可以允許存取 KMS 金鑰,但不能拒絕存取。

  • 每個授予都有一個承授者主體。承授者主體可以在與 KMS 金鑰相同的 AWS 帳戶 中或不同的帳戶中代表一個或多個身分。

  • 授予只能允許授予操作。授予操作必須由授予中的 KMS 金鑰支援。如果您指定不支援的作業,則CreateGrant要求會失敗,並出現ValidationError例外狀況。

  • 承授者主體可以在不指定授予的情況下使用授予給予的許可,就如同許可來自金鑰政策或 IAM 政策一樣。然而,由於 AWS KMS API 遵循最終一致性模式,因此當您建立、淘汰或撤銷授權時,在該變更適用於整個 AWS KMS 之前,可能會有短暫延遲。若要立即使用授予中的許可,請使用授予字符

  • 授權主體可以刪除授予 (對其進行淘汰撤銷)。刪除授予會消除授予允許的所有許可。您不需要弄清楚要新增或移除哪些政策,即可復原授予。

  • AWS KMS 會限制每個 KMS 金鑰的授予數目。如需詳細資訊,請參閱 每個 KMS 金鑰的授予:50,000

建立授予和給予他人建立授予的許可時,請小心謹慎。建立授權的權限有安全性隱患,就像允許 kms: PutKeyPolicy 權限設定原則一樣。

  • 具有建立 KMS 金鑰 (kms:CreateGrant) 授予許可的使用者可以使用授予來允許使用者和角色,包括 AWS 服務,以使用 KMS 金鑰。主體可以是您自己 AWS 帳戶 中的身分或不同帳戶或組織中的身分。

  • 授予可以只允許 AWS KMS 操作子集。您可以使用授予來允許主體檢視 KMS 金鑰、在密碼編譯操作中使用 KMS 金鑰,以及建立和淘汰授予。如需詳細資訊,請參閱授予操作。您也可以使用授予限制條件來限制授予對稱加密金鑰中的許可。

  • 主體可以從金鑰政策或 IAM 政策取得建立授予的許可。針對 KMS 金鑰的任何授與操作,透過政策取得 kms:CreateGrant 許可的主體均可建立授與。這些主體不需擁有他們對金鑰授與的許可。當允許政策中的 kms:CreateGrant 許可時,您可以使用政策條件來限制此許可。

  • 主體也可以從授予取得建立授予的許可。這些主體只能委派其所授予的許可,即使他們有來自政策的其他許可。如需詳細資訊,請參閱 授予 CreateGrant 權限

如需授予相關概念的說明,請參閱授予術語

授予概念

若要有效地使用授予,您需要了解 AWS KMS 使用的條款和概念。

授予限制條件

限制授予中許可的條件。目前,基於請求中的加密內容,AWS KMS 支援用於密碼編譯操作的授予限制條件。如需詳細資訊,請參閱 使用授予限制條件

授予 ID

用於 KMS 金鑰的授予唯一識別符。您可以使用授權 ID 以及金鑰識別碼來識別RetireGrantRevokeGrant請求中的授權。

授予操作

您可以在授予中允許的 AWS KMS 操作。如果您指定其他作業,則CreateGrant要求會失敗,並出現ValidationError例外狀況。這些也是接受授予字符的操作。如需有關這些許可的詳細資訊,請參閱 AWS KMS 權限

這些授予操作實際上代表使用操作的許可。因此,對於 ReEncrypt 操作,您可以指定 ReEncryptFromReEncryptTo,或兩者的 ReEncrypt*

授予操作包括:

您允許的授予作業必須由授予中的 KMS 金鑰支援。如果您指定不支援的作業,則CreateGrant要求會失敗,並出現ValidationError例外狀況。例如,對稱加密 KMS 金鑰的授予不允許 SignVerifyGenerateMacVerifyMac 操作。非對稱 KMS 金鑰的授予不允許任何產生資料金鑰或資料金鑰對的操作。

授予字符

AWS KMS API 遵循最終一致性模式。當您建立授權時,在該變更適用於整個 AWS KMS 之前,可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間,但在某些情況下可能需要幾分鐘。如果您在整個系統中完全傳播授權之前嘗試使用授權,則可能會收到拒絕存取錯誤。授予字符可讓您參考授予並立即使用授予許可。

授予字符是唯一的,非秘密的,可變長度的,base64 編碼的字串,代表授予。您可以使用授予字符來識別任何授予操作中的授予。但是,由於字符值是雜湊摘要,因此它不會顯示有關授予的任何詳細資訊。

授權字符設計為只能在整個 AWS KMS 中完全傳播授權之後才能使用。在此之後,承授者主體可以使用授予中的許可,而不提供授予字符或任何其他授予的證據。您可以隨時使用授予令牌,但是一旦授予最終達成一致,AWS KMS 會使用授予來確定許可,而不是授予字符。

例如,下列命令會呼叫GenerateDataKey作業。它使用授予字符來表示授予呼叫者 (承授者主體) 許可來呼叫指定 KMS 金鑰上的 GenerateDataKey

$ aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --key-spec AES_256 \ --grant-token $token

您也可以使用授予字符來識別管理授予之操作中的授予。例如,淘汰的主體可以在呼叫RetireGrant作業時使用授與 Token。

$ aws kms retire-grant \ --grant-token $token

CreateGrant 是傳回授予字符的唯一操作。您無法從任何其他AWS KMS操作或操作的CloudTrail 日誌事件中獲取 CreateGrant 授予令牌。ListGrants和作ListRetirableGrants業會傳回授權 ID,但不會傳回授權記號。

如需詳細資訊,請參閱 使用授予字符

承授者主體

取得授予中所指定許可的身分。每個授予都有一個承授者主體,但承授者主體可以代表多個身分。

承授者主體可以是任何 AWS 主體,包括 AWS 帳戶 (根)、IAM 使用者IAM 角色同盟角色或使用者,或假定角色使用者。承授者主體可以在與 KMS 金鑰相同的帳戶中,也可以在不同的帳戶中。不過,承授者主體不能是服務主體IAM 群組,或 AWS 組織

注意

IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 中的安全性最佳實務

淘汰授予

終止授予。當您完成使用許可時,就會淘汰授予。

撤銷和淘汰授予都會刪除授予。但是,由授予中指定的主體完成淘汰動作。撤銷通常是由金鑰管理員完成。如需詳細資訊,請參閱 淘汰和撤銷授予

淘汰主體

可以淘汰授予的主體。您可以在授予中指定淘汰的主體,但不是必需的。淘汰的主體可以是任何 AWS 主體,包括 AWS 帳戶、IAM 使用者、IAM 角色、聯合身分使用者和假設的角色使用者。淘汰的主體可以在與 KMS 金鑰相同的帳戶中,也可以在不同的帳戶中。

注意

IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 中的安全性最佳實務

除了授予內指定的淘汰主體外,還可以由在其中建立授予的 AWS 帳戶 淘汰授予。承授者主體可以淘汰授予 (如果授予允許 RetireGrant 操作)。另外,淘汰主體的 AWS 帳戶 或 AWS 帳戶 可以委派許可,以在相同 AWS 帳戶 中淘汰對 IAM 主體的授予。如需詳細資訊,請參閱 淘汰和撤銷授予

撤銷 (授予)

終止授予。您撤銷授予,以主動拒絕授予允許的許可。

撤銷和淘汰授予都會刪除授予。但是,由授予中指定的主體完成淘汰動作。撤銷通常是由金鑰管理員完成。如需詳細資訊,請參閱 淘汰和撤銷授予

最終一致性 (用於授予)

AWS KMS API 遵循最終一致性模式。當您建立、淘汰或撤銷授權時,在該變更適用於整個 AWS KMS 之前,可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間,但在某些情況下可能需要幾分鐘。

如果遇到非預期的錯誤,您可能會發現這個短暫的延遲。例如,如果在授予適用於整個 AWS KMS 之前嘗試管理新的授予,或在新的授予中使用許可,則您可能會遇到存取遭拒的錯誤。如果您淘汰或撤銷授予,承授者主體可能仍然可以在短期內使用其許可,直到授予完全刪除為止。典型的策略是重試請求,有些 AWS 開發套件包括自動退回和重試邏輯。

AWS KMS 具有緩解此短暫延遲的功能。

注意

授予許可會取代授予的有效性,直到服務中的所有端點都更新為新的授予狀態為止。在大多數情況下,最終一致性將在五分鐘內達成。

如需詳細資訊,請參閱《AWS KMS 最終一致性》。

AWS KMS 授予的最佳實務

建立、使用和管理授予時,AWS KMS 會推薦下列最佳實務。

  • 將授予中的許可限制為承授者主體需要的許可。使用最低權限存取的原則。

  • 使用特定承授者主體 (例如 IAM 角色),並讓承授者主體僅使用其所需 API 操作的許可。

  • 使用加密內容授予限制條件,以確保呼叫者使用 KMS 金鑰來達到預期目的。如需如何在要求中使用加密內容來保護資料的詳細資訊,請參閱如何使用AWS Key Management Service和AWS安全性部落格 EncryptionContext中的保護加密資料的完整性。

    提示

    盡可能使用EncryptionContextEqual授予約束。EncryptionContextSubset授予約束更難以正確使用。如果您需要使用,請仔細閱讀文件並測試授予限制條件,以確保其按預期工作。

  • 刪除重複的授予。重複授予具有相同的金鑰 ARN、API 動作、承授者主體、加密內容和名稱。如果您淘汰或撤銷原始授予但保留重複項目,則剩餘的重複授予會構成非預期的權限升級。為了避免在重試 CreateGrant 請求時重複授予,請使用 Name 參數。若要偵測重複的授權,請使用此ListGrants作業。如果意外建立了重複授予,請儘快淘汰或撤銷該授予。

    注意

    AWS 受管金鑰授予可能看起來像重複項,但具有不同的承授者主體。

    GranteePrincipal 回應中的 ListGrants 欄位通常包含授與的承授者主體。不過,當授予中的承授者主體是 AWS 服務時,GranteePrincipal 欄位會包含服務主體,這可能代表數個不同的承授者主體。

  • 請記住,授予不會自動過期。不再需要許可時,即刻淘汰或撤銷授予。未刪除的授予可能會對加密資源造成安全風險。