允許其他帳戶中的使用者使用KMS金鑰 - AWS Key Management Service

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

允許其他帳戶中的使用者使用KMS金鑰

您可以允許不同 中的使用者或角色在帳戶中 AWS 帳戶 使用KMS金鑰。跨帳戶存取需要在KMS金鑰的金鑰政策以及外部使用者帳戶IAM的政策中取得許可。

跨帳戶許可僅適用於下列操作:

如果您提供許可給不同帳戶中的使用者,讓他們能夠進行其他操作,則這些許可沒有任何作用。例如,如果您在不同的帳戶 kms 中授予委託人:ListKeysIAM政策中的許可或 kms:ScheduleKeyDeletion金鑰政策中KMS金鑰的許可,使用者嘗試呼叫資源上的這些操作仍會失敗。

如需在不同帳戶中使用KMS金鑰進行 AWS KMS 操作的詳細資訊,請參閱 AWS KMS 許可和 中的跨帳戶使用在其他帳戶中使用KMS金鑰AWS Key Management Service API 參考 中的每個API描述中也有跨帳戶使用區段。

警告

請謹慎授予委託人使用KMS金鑰的許可。只要有可能,請遵循最低權限原則。讓使用者只能存取他們所需的KMS金鑰,只能存取他們所需的操作。

此外,請謹慎使用任何不熟悉的KMS金鑰,尤其是不同帳戶中的KMS金鑰。惡意使用者可能會授予您許可,讓您使用其KMS金鑰來取得有關您或您帳戶的資訊。

如需使用政策來保護帳戶中資源的詳細資訊,請參閱 IAM 政策的最佳實務

若要准許使用KMS金鑰給另一個帳戶中的使用者和角色,您必須使用兩種不同類型的政策:

  • KMS 金鑰的金鑰政策必須授予外部帳戶 (或外部帳戶中的使用者和角色) 使用KMS金鑰的許可。金鑰政策位於擁有KMS金鑰的帳戶中。

  • 外部帳戶中IAM的政策必須將金鑰政策許可委派給其使用者和角色。這些政策會在外部帳戶中設定,並提供許可給該帳戶中的使用者和角色。

金鑰政策會決定誰可以存取KMS金鑰。此IAM政策會決定誰可以存取 KMS金鑰。金鑰政策或單獨IAM政策都不夠,您必須同時變更兩者。

若要編輯金鑰政策,您可以使用 中的政策檢視, AWS Management Console 或使用 CreateKeyPutKeyPolicy操作。

如需編輯IAM政策的說明,請參閱 搭配 使用IAM政策 AWS KMS

如需顯示金鑰政策和IAM政策如何一起運作以允許在不同帳戶中使用KMS金鑰的範例,請參閱 範例 2:使用者擔任的角色具有在不同 中使用KMS金鑰的許可 AWS 帳戶

您可以在AWS CloudTrail 日誌 中的 KMS金鑰上檢視產生的跨帳戶 AWS KMS 操作。在其他帳戶中使用KMS金鑰的操作會同時記錄到呼叫者的 帳戶和KMS金鑰擁有者帳戶。

注意

本主題中的範例示範如何使用金鑰政策和IAM政策來提供和限制對KMS金鑰的存取。這些一般範例無意代表任何特定 AWS 服務 需要的KMS金鑰許可。如需 AWS 服務 所需許可的相關資訊,請參閱 服務文件中的加密主題。

步驟 1:在本機帳戶中新增金鑰政策陳述式

KMS 金鑰的金鑰政策是誰可以存取KMS金鑰及其可執行的操作的主要決定因素。金鑰政策一律位於擁有KMS金鑰的帳戶中。與IAM政策不同,金鑰政策不會指定資源。資源是與KMS金鑰政策相關聯的金鑰。提供跨帳戶許可時,KMS金鑰的金鑰政策必須授予外部帳戶 (或外部帳戶中的使用者和角色) 使用KMS金鑰的許可。

若要授予外部帳戶使用KMS金鑰的許可,請將陳述式新增至指定外部帳戶的金鑰政策。在金鑰政策的 Principal元素中,輸入外部帳戶的 Amazon Resource Name (ARN)。

當您在金鑰政策中指定外部帳戶時,外部帳戶中的IAM管理員可以使用IAM政策將這些許可委派給外部帳戶中的任何使用者和角色。他們也能決定使用者和角色可以執行金鑰政策中所指定的哪些動作。

只有在託管KMS金鑰及其金鑰政策的區域中啟用外部帳戶時,授予外部帳戶及其主體的許可才有效。如需相關資訊了解哪些區域預設為未啟用 (「選擇加入區域」),請參閱《AWS 一般參考》 的管理 AWS 區域

例如,假設您想要允許帳戶444455556666在帳戶 中使用對稱加密KMS金鑰111122223333。若要這麼做,請將類似下列範例中的政策陳述式新增至帳戶 中金鑰的KMS金鑰政策111122223333。此政策陳述式授予外部帳戶 許可444455556666,以將KMS金鑰用於對稱加密KMS金鑰的密碼編譯操作。

注意

下列範例代表與其他 帳戶共用KMS金鑰的金鑰政策範例。將範例 SidPrincipalAction值取代為適用於您KMS金鑰的指定用途的有效值。

{ "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

您可以在金鑰政策中指定特定的外部使用者和角色,而不用提供許可給外部帳戶。不過,這些使用者和角色無法使用KMS金鑰,直到外部帳戶中的IAM管理員將適當的IAM政策連接到其身分。這些IAM政策可以授予許可給金鑰政策中指定的全部或部分外部使用者和角色。而且,其可允許金鑰政策中指定的全部動作或部分動作。

在金鑰政策中指定身分會限制外部帳戶中的IAM管理員可以提供的許可。然而,這會讓兩個帳戶的政策管理作業更加複雜。舉例來說,假設您需要新增使用者或角色。您必須在擁有金鑰的帳戶中將該身分新增至KMS金鑰政策,並在身分的帳戶中建立IAM政策。

若要在金鑰政策中指定特定外部使用者或角色,請在 Principal 元素中輸入外部帳戶中使用者或角色的 Amazon Resource Name (ARN)。

例如,下列範例金鑰政策陳述式允許 ExampleRole 帳戶中444455556666使用 帳戶中的KMS金鑰111122223333。此金鑰政策陳述式授予外部帳戶 許可444455556666,以將KMS金鑰用於對稱加密KMS金鑰的密碼編譯操作。

注意

下列範例代表與其他 帳戶共用KMS金鑰的金鑰政策範例。將範例 SidPrincipalAction值取代為適用於您KMS金鑰的指定用途的有效值。

{ "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }
注意

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

您也需要決定要提供哪些許可給外部帳戶。例如,您可能想要授予使用者解密但不加密的許可,或檢視KMS金鑰但不使用金鑰的許可。如需KMS金鑰的許可清單,請參閱 AWS KMS 許可

建立金鑰時設定KMS金鑰政策

當您使用 CreateKey操作建立KMS金鑰時,您可以使用其Policy參數來指定金鑰政策,以授予外部帳戶或外部使用者和角色使用KMS金鑰的許可。

當您在 中建立KMS金鑰時 AWS Management Console,您也可以建立其金鑰政策。當您在金鑰管理員金鑰使用者區段中選取身分時, 會將這些身分的政策陳述 AWS KMS 式新增至KMS金鑰的金鑰政策。Key Users (金鑰使用者) 區段也可讓您將外部帳戶做為金鑰使用者予以新增。

當您輸入外部帳戶的帳戶 ID 時, 會將兩個陳述式 AWS KMS 新增至金鑰政策。此動作只會影響金鑰政策。外部帳戶中的使用者和角色無法使用 KMS金鑰,除非您連接IAM政策,以授予部分或全部的這些許可。

第一個金鑰政策陳述式授予外部帳戶在密碼編譯操作中使用KMS金鑰的許可。第二個金鑰政策陳述式允許外部帳戶在KMS金鑰上建立、檢視和撤銷授予,但前提是請求來自AWS 與 整合的服務 AWS KMS。這些許可允許加密使用者資料的其他 AWS 服務使用 KMS金鑰。這些許可專為加密 服務中 AWS 使用者資料的KMS金鑰而設計

步驟 2:在外部帳戶中新增IAM政策

擁有金鑰之帳戶中的KMS金鑰政策會設定許可的有效範圍。但是,除非您連接委派這些許可IAM的政策,或使用授予來管理KMS對金鑰的存取,否則外部帳戶中的使用者和角色無法使用KMS金鑰。這些IAM政策是在外部帳戶中設定。

如果金鑰政策授予外部帳戶的許可,您可以將IAM政策連接到帳戶中的任何使用者或角色。但是,如果金鑰政策授予指定使用者或角色的許可,則IAM政策只能將這些許可授予指定使用者和角色的全部或部分。如果IAM政策將KMS金鑰存取權授予其他外部使用者或角色,則不會有任何影響。

金鑰政策也會限制IAM政策中的動作。IAM 政策可以委派金鑰政策中指定的全部或部分動作。如果IAM政策列出金鑰政策中未指定的動作,則這些許可無效。

下列範例IAM政策允許主體在 帳戶中使用KMS金鑰111122223333進行密碼編譯操作。若要提供此許可給帳戶 444455556666 中的使用者和角色,請連接政策至帳戶 444455556666 中的使用者或角色。

注意

下列範例代表與其他 帳戶共用KMS金鑰的範例IAM政策。將範例 SidResourceAction值取代為適用於您KMS金鑰的指定用途的有效值。

{ "Sid": "AllowUseOfKeyInAccount111122223333", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }

請注意有關此政策的下列詳細資訊:

  • 與金鑰政策不同,IAM政策陳述式不包含 Principal元素。在IAM政策中,主體是附加政策的身分。

  • IAM 政策中的 Resource元素會識別主體可以使用的KMS金鑰。若要指定KMS金鑰,請將其金鑰ARN新增至 Resource元素。

  • 您可以在 Resource元素中指定多個KMS金鑰。但是,如果您未在 Resource元素中指定特定KMS金鑰,則可能會不小心授予比預期更多的KMS金鑰存取權。

  • 若要允許外部使用者將KMS金鑰與 AWS 整合的服務搭配使用 AWS KMS,您可能需要將許可新增至金鑰政策或IAM政策。如需詳細資訊,請參閱 允許將外部KMS金鑰與 搭配使用 AWS 服務

如需使用IAM政策的詳細資訊,請參閱 IAM 政策

允許將外部KMS金鑰與 搭配使用 AWS 服務

您可以授予不同帳戶的使用者許可,以使用與 整合的服務來使用KMS金鑰 AWS KMS。例如,外部帳戶中的使用者可以使用您的KMS金鑰來加密 Amazon S3 儲存貯體中的物件,或加密存放在 中的秘密 AWS Secrets Manager。

金鑰政策必須授予外部使用者或外部使用者帳戶使用KMS金鑰的許可。此外,您需要將IAM政策連接至授予使用者使用 許可的身分 AWS 服務。該服務也可能要求使用者在金鑰政策中擁有其他許可IAM。如需 客戶受管金鑰上 AWS 服務 所需的許可清單,請參閱 服務使用者指南或開發人員指南的安全章節中的資料保護主題。

在其他帳戶中使用KMS金鑰

如果您有在不同 中使用KMS金鑰的許可 AWS 帳戶,您可以使用 AWS Management Console、 AWS SDKs AWS CLI和 中的KMS金鑰 AWS Tools for PowerShell。

若要在 Shell 命令或API請求中識別不同帳戶中的KMS金鑰,請使用下列金鑰識別符

如果您只輸入金鑰 ID 或別名名稱, 會 AWS 假設KMS金鑰位於您的帳戶中。

即使您有使用金鑰的許可, AWS KMS 主控台也不會在其他帳戶中顯示KMS金鑰。此外, AWS 其他服務主控台中顯示的KMS金鑰清單不包括其他帳戶中的KMS金鑰。

若要在 AWS 服務主控台的不同帳戶中指定KMS金鑰,您必須輸入ARNKMS金鑰的金鑰ARN或別名。所需的金鑰識別符會隨服務而異,而且服務主控台及其API操作可能會有所不同。如需詳細資訊,請參閱服務文件。