

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

# 在 中授予 AWS KMS
<a name="grants"></a>

*授權*是一個政策工具，允許 [AWS 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)使用密碼編譯操作中的 KMS 金鑰。它也可以讓其檢視 KMS 金鑰 (`DescribeKey`)，並建立和管理授予。當授權存取 KMS 金鑰時，會考慮與[金鑰政策](key-policies.md)和 [IAM 政策](iam-policies.md)一起授予。授予通常用於臨時許可，因為您可以建立授予、使用其許可並刪除授予，而無需變更金鑰政策或 IAM 政策。

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

授予是非常靈活和有用的存取控制機制。當您建立 KMS 金鑰的授予時，只要授予中的所有指定條件都滿足，授予就會允許承授者主體呼叫 KMS 金鑰上指定的授予操作。
+ 每個授予只允許存取一個 KMS 金鑰。您可以在不同的 AWS 帳戶中為 KMS 金鑰建立授予。
+ 授予可以允許存取 KMS 金鑰，但不能拒絕存取。
+ 每個授予都有一個[承授者主體](#terms-grantee-principal)。承授者主體可以在 AWS 帳戶 與 KMS 金鑰相同的 或不同帳戶中代表一或多個身分。
+ 授予只能允許[授予操作](#terms-grant-operations)。授予操作必須由授予中的 KMS 金鑰支援。若您指定不支援的操作，則 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 請求會失敗，`ValidationError` 為例外狀況。
+ 承授者主體可以在不指定授予的情況下使用授予給予的許可，就如同許可來自金鑰政策或 IAM 政策一樣。不過，由於 AWS KMS API 遵循[最終一致性](#terms-eventual-consistency)模型，當您建立、淘汰或撤銷授予時，在變更全面可用之前，可能會有短暫的延遲 AWS KMS。若要立即使用授予中的許可，請[使用授予字符](using-grant-token.md)。
+ 授權主體可以刪除授予 (對其進行[淘汰](#terms-retire-grant)或[撤銷](#terms-revoke-grant)）。刪除授予會消除授予允許的所有許可。您不需要弄清楚要新增或移除哪些政策，即可復原授予。
+ AWS KMS 會限制每個 KMS 金鑰的授予數量。如需詳細資訊，請參閱[每個 KMS 金鑰的授予：50,000](resource-limits.md#grants-per-key)。

建立授予和給予他人建立授予的許可時，請小心謹慎。建立授予的許可具有安全影響，就像允許 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 許可來設定政策。
+ 具有為 KMS 金鑰 (`kms:CreateGrant`) 建立授予許可的使用者可以使用授予來允許使用者和角色使用 KMS 金鑰，包括 AWS 服務。委託人可以是您自己的身分 AWS 帳戶 ，也可以是不同帳戶或組織中的身分。
+ 授予只能允許操作的子集 AWS KMS 。您可以使用授予來允許主體檢視 KMS 金鑰、在密碼編譯操作中使用 KMS 金鑰，以及建立和淘汰授予。如需詳細資訊，請參閱[授予操作](#terms-grant-operations)。您也可以使用[授予限制條件](create-grant-overview.md#grant-constraints)來限制授予對稱加密金鑰中的許可。
+ 主體可以從金鑰政策或 IAM 政策取得建立授予的許可。針對 KMS 金鑰的任何[授與操作](#terms-grant-operations)，透過政策取得 `kms:CreateGrant` 許可的主體均可建立授與。這些主體不需擁有他們對金鑰授與的許可。當允許政策中的 `kms:CreateGrant` 許可時，您可以使用[政策條件](grant-authorization.md)來限制此許可。
+ 主體也可以從授予取得建立授予的許可。這些委託人只能委派其獲授予的許可，即使他們擁有政策的其他許可。如需詳細資訊，請參閱[授與 CreateGrant 許可](create-grant-overview.md#grant-creategrant)。

## 授予概念
<a name="grant-concepts"></a>

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

**授予限制條件**  <a name="terms-grant-constraint"></a>
限制授予中許可的條件。目前， AWS KMS 支援根據密碼編譯操作請求中的[加密內容](encrypt_context.md)來授予限制。如需詳細資訊，請參閱[使用授予限制條件](create-grant-overview.md#grant-constraints)。

**授予 ID**  <a name="terms-grant-id"></a>
用於 KMS 金鑰的授予唯一識別符。您可以使用授予 ID，與[金鑰識別符](concepts.md#key-id)一起，以識別 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 或 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) 請求。

**授予操作**  <a name="terms-grant-operations"></a>
您可以在授予中允許 AWS KMS 的操作。如果您指定其他操作，則 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 請求會失敗，`ValidationError` 為例外狀況。這些也是接受[授予字符](#grant_token)的操作。如需有關這些許可的詳細資訊，請參閱 [AWS KMS 許可](kms-api-permissions-reference.md)。  
這些授予操作實際上代表使用操作的許可。因此，對於 `ReEncrypt` 操作，您可以指定 `ReEncryptFrom`、`ReEncryptTo`，或兩者的 `ReEncrypt*`。  
授予操作包括：  
+ 密碼編譯操作
  + [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)
  + [加密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
  + [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
  + [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)
  + [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)
  + [ReEncryptFrom](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [ReEncryptTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [符號](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)
  + [確認](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)
  + [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)
+ 其他操作
  + [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
  + [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
  + [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)
  + [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)
您允許的授予作業必須由授予中的 KMS 金鑰支援。若您指定不支援的操作，則 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 請求會失敗，`ValidationError` 為例外狀況。例如，對稱加密 KMS 金鑰的授予不允許 [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)、[Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)、[https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) 或 [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 操作。非對稱 KMS 金鑰的授予不允許任何產生資料金鑰或資料金鑰對的操作。

**授予字符**  <a name="grant_token"></a>
 AWS KMS API 遵循[最終一致性](#terms-eventual-consistency)模型。當您建立授權時，在該變更適用於整個 AWS KMS之前，可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間，但在某些情況下可能需要幾分鐘。如果您在整個系統中完全傳播授權之前嘗試使用授權，則可能會收到拒絕存取錯誤。授予字符可讓您參考授予並立即使用授予許可。  
*授予字符*是唯一的，非秘密的，可變長度的，base64 編碼的字串，代表授予。您可以使用授予字符來識別任何[授予操作](#terms-grant-operations)中的授予。但是，由於字符值是雜湊摘要，因此它不會顯示有關授予的任何詳細資訊。  
授權字符設計為只能在整個 AWS KMS中完全傳播授權之後才能使用。在此之後，[承授者主體](#terms-grantee-principal)可以使用授予中的許可，而不提供授予字符或任何其他授予的證據。您可以隨時使用授予字符，但一旦授予最終一致， AWS KMS 會使用授予來確定許可，而不是授予字符。  
例如，下列命令會呼叫 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 操作。它使用授予字符來表示授予呼叫者 (承授者主體) 許可來呼叫指定 KMS 金鑰上的 `GenerateDataKey`。  

```
$ aws kms generate-data-key \
        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
        --key-spec AES_256 \
        --grant-token $token
```
您也可以使用授予字符來識別管理授予之操作中的授予。例如，[淘汰主體](#terms-retiring-principal)可以在 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 操作的呼叫中使用授予字符。  

```
$ aws kms retire-grant \
        --grant-token $token
```
`CreateGrant` 是傳回授予字符的唯一操作。您無法從任何其他 AWS KMS 操作或從 CreateGrant 操作的 [CloudTrail 日誌事件](ct-creategrant.md)取得授予字符。[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 和 [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html) 操作會傳回[授予 ID](#terms-grant-id)，但不是授予字符。  
如需詳細資訊，請參閱[使用授予字符](using-grant-token.md)。

**承授者主體**  <a name="terms-grantee-principal"></a>
取得授予中所指定許可的身分。每個授予都有一個承授者主體，但承授者主體可以代表多個身分。  
承授者委託人可以是任何 AWS 委託人，包括 AWS 帳戶 （根）、[IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)、[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)、[聯合角色或使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)，或擔任角色的使用者。承授者主體可以在與 KMS 金鑰相同的帳戶中，也可以在不同的帳戶中。不過，承授者主體不能是[服務主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)、[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)，或 [AWS 組織](https://docs.aws.amazon.com/organizations/latest/userguide/)。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

**淘汰授予**  <a name="terms-retire-grant"></a>
終止授予。當您完成使用許可時，就會淘汰授予。  
撤銷和淘汰授予都會刪除授予。但是，由授予中指定的主體完成淘汰動作。撤銷通常是由金鑰管理員完成。如需詳細資訊，請參閱[淘汰和撤銷授予](grant-delete.md)。

**淘汰主體**  <a name="terms-retiring-principal"></a>
可以[淘汰授予](#terms-retire-grant)的主體。您可以在授予中指定淘汰的主體，但不是必需的。淘汰委託人可以是任何 AWS 委託人，包括 AWS 帳戶 IAM 使用者、IAM 角色、聯合身分使用者和擔任的角色使用者。淘汰的主體可以在與 KMS 金鑰相同的帳戶中，也可以在不同的帳戶中。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
除了授予中指定的淘汰委託人之外，授予也可以由建立授予 AWS 帳戶 的 淘汰。[承授者主體](#terms-grantee-principal)可以淘汰授予 (如果授予允許 `RetireGrant` 操作)。此外， AWS 帳戶 或 是淘汰主體 AWS 帳戶 的 可以將淘汰授予的許可委派給相同 中的 IAM 主體 AWS 帳戶。如需詳細資訊，請參閱[淘汰和撤銷授予](grant-delete.md)。

**撤銷 (授予)**  <a name="terms-revoke-grant"></a>
終止授予。您撤銷授予，以主動拒絕授予允許的許可。  
撤銷和淘汰授予都會刪除授予。但是，由授予中指定的主體完成淘汰動作。撤銷通常是由金鑰管理員完成。如需詳細資訊，請參閱[淘汰和撤銷授予](grant-delete.md)。

**最終一致性 (用於授予)**  <a name="terms-eventual-consistency"></a>
 AWS KMS API 遵循[最終一致性](https://en.wikipedia.org/wiki/Eventual_consistency)模型。當您建立、淘汰或撤銷授權時，在該變更適用於整個 AWS KMS之前，可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間，但在某些情況下可能需要幾分鐘。  
如果遇到非預期的錯誤，您可能會發現這個短暫的延遲。例如，如果您在完全知道授予之前嘗試管理新的授予或使用新授予中的許可 AWS KMS，您可能會收到存取遭拒錯誤。如果您淘汰或撤銷授予，承授者主體可能仍然可以在短期內使用其許可，直到授予完全刪除為止。典型的策略是重試請求，而 AWS SDKs 包含自動退避和重試邏輯。  
AWS KMS 具有可減輕此短暫延遲的功能。  
+ 若要立即使用新授予中的許可，請使用[授予字符](using-grant-token.md)。您可以使用授予字符來引用任何[授予操作](#terms-grant-operations)中的授予。如需說明，請參閱[使用授予字符](using-grant-token.md)。
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作具有 `Name` 參數，可防止重試操作建立重複授予。
授予許可會取代授予的有效性，直到服務中的所有端點都更新為新的授予狀態為止。在大多數情況下，最終一致性將在五分鐘內達成。
如需詳細資訊，請參閱《[AWS KMS 最終一致性](accessing-kms.md#programming-eventual-consistency)》。