建立金鑰政策 - AWS Key Management Service

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

建立金鑰政策

您可以使用 AWS KMS API 操作,例如、和或使用AWS CloudFormation 範本,在 AWS KMS 主控台中建立和PutKeyPolicy管理金鑰政策。CreateKeyReplicateKey

在主控台中建立 KMS 金鑰時, AWS KMS 主控台會引導您完成根據主控台預設金鑰原則建立金鑰原則的步驟。使用 CreateKeyReplicateKey API 時,若不指定金鑰政策,這些 API 便會為以程式設計方式建立之金鑰,套用預設金鑰政策。當您採用 PutKeyPolicy API 時,必須指定金鑰政策。

每個政策文件可以擁有一個或多個政策陳述式。以下範例顯示具有一個政策陳述式的有效金鑰政策文件。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Describe the policy statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeySpec": "SYMMETRIC_DEFAULT" } } } ] }

金鑰政策格式

金鑰政策文件必須符合以下規則:

  • 最大為 32 KB (32,768 個位元組)

  • 金鑰政策陳述式中的 Sid 元素可包含空格。(IAM 政策文件的 Sid 元素中禁止使用空格。)

金鑰政策文件僅可包含以下字元:

  • 可印出的 ASCII 字元

  • 基本拉丁字母和拉丁字母補充-1 字元集中的可印出字元

  • Tab (\u0009)、換行字元 (\u000A) 和歸位字元 (\u000D) 特殊字元

金鑰政策中的元素

金鑰政策文件必須擁有下列元素︰

版本

指定金鑰政策文件版本。將版本設定為 2012-10-17 (最新版本)。

陳述式

包含政策陳述式。金鑰政策文件必須至少包含一個陳述式。

每個金鑰政策陳述式最多可包含六個元素。需要 EffectPrincipalActionResource 元素。

Sid

(選用) 陳述式識別符 (Sid) 為可用來描述陳述式的任意字串。金鑰政策中的 Sid 可包含空格。(不得在 IAM 政策 Sid 元素中包含空格。)

Effect

(必要) 決定是允許還是拒絕政策陳述式中的許可。有效值為 AllowDeny。如果您未明確允許存取 KMS 金鑰,將會隱含拒絕存取。您也可以明確拒絕存取 KMS 金鑰。您可以這樣做以確保使用者無法存取 CMK,即使其他政策允許存取。

Principal

(必要) 主體是取得政策陳述式中指定許可的身分。您可以在 AWS 帳戶金鑰政策中將 IAM 使用者、IAM 角色和某些 AWS 服務指定為主體。IAM 使用者群組在任何政策類型中都不是有效的主體。

星號值,例如 "AWS": "*" 代表所有帳戶的所有 AWS 身份。

重要

除非採用條件來限制金鑰政策,否則請勿在任何允許許可的金鑰政策陳述式將主體設為星號 (*)。星號會提供每個使用 KMS 金鑰的 AWS 帳戶 權限中的每個身分識別,除非另一個原則陳述式明確拒絕該金鑰。其他使用者只要在自己的帳戶中有對應的權限,就 AWS 帳戶 可以使用您的 KMS 金鑰。

注意

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

若金鑰政策陳述式中的主體是以 arn:aws:iam::111122223333:root" 表達的 AWS 帳戶 主體,則政策陳述式不會向任何 IAM 主體授予許可。而是 AWS 帳戶 授予使用 IAM 政策委派金鑰政策中指定的許可的權限。(雖然帳戶識別符中使用了「根」,但採用 arn:aws:iam::111122223333:root" 格式的主體代表AWS 帳戶根使用者。然而,帳戶主體代表帳戶及其管理員,包括帳戶根用戶。)

當主體是其他主體 AWS 帳戶 或其主體時,只有在具有 KMS 金鑰和金鑰原則的區域中啟用帳戶時,權限才會生效。如需相關資訊了解哪些區域預設為未啟用 (「選擇加入區域」),請參閱《AWS 一般參考》 的管理 AWS 區域

若要允許不同 AWS 帳戶 或其主體使用 KMS 金鑰,您必須在金鑰政策和其他帳戶的 IAM 政策中提供權限。如需詳細資訊,請參閱 允許其他帳戶中的使用者使用 KMS 金鑰

動作

(必要) 指定要允許或拒絕的 API 操作。例如,kms:Encrypt動作對應於「 AWS KMS 加密」作業。您可以在政策陳述式中列出多個動作。如需詳細資訊,請參閱 許可參考

資源

(必要) 在金鑰政策中,Resource 元素的值是 "*",表示「此 KMS 金鑰」。星號 ("*") 會識別金鑰政策所連接的 KMS 金鑰。

注意

如果必要的 Resource 元素在金鑰政策陳述式中遺失,則政策陳述式沒有任何效果。沒有 Resource 元素的金鑰政策不適用於任何 KMS 金鑰。

當金鑰原則陳述式遺失其Resource元素時, AWS KMS 主控台會正確回報錯誤,但即使原則陳述式無效,CreateKeyPutKeyPolicyAPI 也會成功。

條件

(選用) 條件則會指定金鑰政策生效必須符合的需求。使用條件時, AWS 可以評估 API 請求的內容,以確定策略聲明是否適用。

若要指定條件,請使用預先定義的條件關鍵字。 AWS KMS 支持AWS 全局條件鍵AWS KMS 條件鍵。若要支援以屬性為基礎的存取控制 (ABAC), AWS KMS 提供可根據標籤和別名控制 KMS 金鑰存取的條件金鑰。如需詳細資訊,請參閱 AWS KMS 的 ABAC

條件的格式為:

"Condition": {"condition operator": {"condition key": "condition value"}}

例如:

"Condition": {"StringEquals": {"kms:CallerAccount": "111122223333"}}

如需有關 AWS 政策語法的詳細資訊,請參閱AWS IAM 使用者指南中的 IAM 政策參考

範例金鑰政策

下列範例顯示對稱加密 KMS 金鑰的完整金鑰政策。在閱讀本章中的關鍵政策概念時,您可以將其用作參考。此金鑰政策將先前預設金鑰政策一節的範例政策陳述式結合至單一金鑰政策,來完成以下任務:

  • 允許此範例 AWS 帳戶 111122223333 完整存取 KMS 金鑰。它允許帳戶及其管理員 (包括帳戶根使用者 (緊急情況)) 在帳戶中使用 IAM 政策,以允許對 KMS 金鑰的存取。

  • 允許 ExampleAdminRole IAM 角色管理 KMS 金鑰。

  • 允許 ExampleUserRole IAM 角色使用 KMS 金鑰。

{ "Id": "key-consolepolicy", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleAdminRole" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion", "kms:RotateKeyOnDemand" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }