本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 以及金鑰識別碼來識別RetireGrant或RevokeGrant請求中的授權。
- 授予操作
-
您可以在授予中允許的 AWS KMS 操作。如果您指定其他作業,則CreateGrant要求會失敗,並出現
ValidationError
例外狀況。這些也是接受授予字符的操作。如需有關這些許可的詳細資訊,請參閱 AWS KMS 權限。這些授予操作實際上代表使用操作的許可。因此,對於
ReEncrypt
操作,您可以指定ReEncryptFrom
、ReEncryptTo
,或兩者的ReEncrypt*
。授予操作包括:
-
密碼編譯操作
-
其他操作
您允許的授予作業必須由授予中的 KMS 金鑰支援。如果您指定不支援的作業,則CreateGrant要求會失敗,並出現
ValidationError
例外狀況。例如,對稱加密 KMS 金鑰的授予不允許 Sign、Verify、GenerateMac
或VerifyMac
操作。非對稱 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 具有緩解此短暫延遲的功能。
-
若要立即使用新授予中的許可,請使用授予字符。您可以使用授予字符來引用任何授予操作中的授予。如需說明,請參閱使用授予字符。
-
CreateGrant作業具有可防止重試作業建立重複授權的
Name
參數。
注意
授予許可會取代授予的有效性,直到服務中的所有端點都更新為新的授予狀態為止。在大多數情況下,最終一致性將在五分鐘內達成。
如需詳細資訊,請參閱《AWS KMS 最終一致性》。
-
AWS KMS 授予的最佳實務
建立、使用和管理授予時,AWS KMS 會推薦下列最佳實務。
-
將授予中的許可限制為承授者主體需要的許可。使用最低權限存取的原則。
-
使用特定承授者主體 (例如 IAM 角色),並讓承授者主體僅使用其所需 API 操作的許可。
-
使用加密內容授予限制條件,以確保呼叫者使用 KMS 金鑰來達到預期目的。如需如何在要求中使用加密內容來保護資料的詳細資訊,請參閱如何使用AWS Key Management Service和AWS安全性部落格 EncryptionContext中的保護加密資料
的完整性。 提示
盡可能使用EncryptionContextEqual授予約束。EncryptionContextSubset授予約束更難以正確使用。如果您需要使用,請仔細閱讀文件並測試授予限制條件,以確保其按預期工作。
-
刪除重複的授予。重複授予具有相同的金鑰 ARN、API 動作、承授者主體、加密內容和名稱。如果您淘汰或撤銷原始授予但保留重複項目,則剩餘的重複授予會構成非預期的權限升級。為了避免在重試
CreateGrant
請求時重複授予,請使用 Name 參數。若要偵測重複的授權,請使用此ListGrants作業。如果意外建立了重複授予,請儘快淘汰或撤銷該授予。 -
請記住,授予不會自動過期。不再需要許可時,即刻淘汰或撤銷授予。未刪除的授予可能會對加密資源造成安全風險。