

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# の許可 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 KMS する AWS サービスで一般的に使用されます。サービスは、アカウント内のユーザーの代わりにグラントを作成し、そのアクセス許可を使用して、タスクが完了するとすぐにグラント廃止にします。 AWS サービス、グラントの使用方法の詳細については、サービスのユーザーガイドまたはデベロッパーガイドの*保管時の暗号化*トピックを参照してください。

権限は、きわめて柔軟で便利なアクセス制御メカニズムです。KMS キーのグラントを作成すると、このグラントは、グラントで指定されたすべての条件が満たされている場合に限り、被付与者プリンシパルが指定されたグラントオペレーションを KMS キーで呼び出すことを許可します。
+ 各グラントでは、正確に 1 つの KMS キーにアクセスできます。異なる AWS アカウントでKMS キーのグラントを作成できます。
+ グラントは KMS キーへのアクセスを許可できますが、アクセスを拒否することはできません。
+ 各グラントは、それぞれ 1 つの[被付与者プリンシパル](#terms-grantee-principal)を持っています。被付与者プリンシパルは、KMS キー AWS アカウント と同じ または別のアカウントの 1 つ以上の ID を表すことができます。
+ グラントは、[グラントオペレーション](#terms-grant-operations)のみを許可することができます。グラントオペレーションは、グラントの KMS キーによってサポートされている必要があります。サポートされていないオペレーションを指定すると、`ValidationError` の例外により、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストは失敗します。
+ 被付与者プリンシパルは、アクセス許可がキーポリシーまたは 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`) の許可を作成する権限を持つユーザーは、許可を使用して、 AWS サービスを含むユーザーとロールに KMS キーの使用を許可できます。プリンシパルは、独自の ID AWS アカウント でも、別のアカウントまたは組織の ID でもかまいません。
+ 許可は、 AWS KMS オペレーションのサブセットのみを許可できます。グラントを使用して、プリンシパルに KMS キーの表示、暗号化オペレーションでの使用、グラントの作成、グラントの廃止を許可できます。詳細については、「[グラントオペレーション](#terms-grant-operations)」を参照してください。[グラントの制約](create-grant-overview.md#grant-constraints)を使用して、対称暗号化キーに対するグラントにある許可を制限することもできます。
+ プリンシパルはアクセス許可を取得して、キーポリシーまたは IAM ポリシーからグラントを作成できます。ポリシーから `kms:CreateGrant` アクセス許可を取得したプリンシパルは、KMS キーの任意の[付与オペレーション](#terms-grant-operations)の許可を作成できます。これらのプリンシパルは、キーに対して付与している許可を持っている必要はありません。ポリシーで `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>
グラントのアクセス許可を制限する条件。現在、 は、[暗号化オペレーションのリクエストの暗号化コンテキスト](encrypt_context.md)に基づく許可制約 AWS KMS をサポートしています。詳細については、「[グラントの制約の使用](create-grant-overview.md#grant-constraints)」を参照してください。

**グラント ID**  <a name="terms-grant-id"></a>
KMS キーのグラントの一意の識別子。[キー識別子](concepts.md#key-id)と共にグラント 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 オペレーション。他のオペレーションを指定した場合、`ValidationError` の例外により、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストは失敗します。これらは、[グラントトークン](#grant_token)を承認するオペレーションでもあります。これらのアクセス許可の詳細については、[AWS KMS アクセス許可](kms-api-permissions-reference.md) を参照してください。  
これらのグラントオペレーションは、オペレーションを使用するアクセス許可を表します。したがって、`ReEncrypt` オペレーションの場合、`ReEncryptFrom`、`ReEncryptTo`、または両方の `ReEncrypt*` を指定できます。  
グラントオペレーション:  
+ 暗号化オペレーション
  + [Decrypt](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)
  + [Sign](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 キーでサポートされている必要があります。サポートされていないオペレーションを指定すると、`ValidationError` の例外により、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストは失敗します。例えば、対称暗号化 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` は、グラントトークンを返す唯一のオペレーションです。CreateGrant AWS KMS オペレーションの他のオペレーションまたは [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>
グラントで指定されたアクセス許可を取得する ID。各グラントはそれぞれ 1 つの被付与者プリンシパルを持っていますが、この被付与者プリンシパルは複数の ID を代表することができます。  
被付与者プリンシパルは、 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)、引き受けたロールユーザーなど、任意のプリンシ AWS パルにすることができます。被付与者プリンシパルは、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)にするプリンシパル。グラントで使用停止プリンシパルを指定できますが、必須ではありません。廃止するプリンシパルは、IAM ユーザー AWS アカウント、IAM ロール、フェデレーティッドユーザー、引き受けたロールユーザーなど、任意のプリンシ AWS パルにすることができます。使用停止プリンシパルは、KMS キーと同じアカウントか、別のアカウントにすることができます。  
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。
グラントで指定された廃止プリンシパルに加えて、グラントは、グラントが作成された AWS アカウント によって廃止できます。グラントで `RetireGrant` オペレーションが許可されている場合は、[被付与者プリンシパル](#terms-grantee-principal)がグラントを廃止にできます。また、廃止 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` パラメータがあります。
サービスのすべてのエンドポイントが新しいグラント状態で更新されるまで、グラントトークンはグラントの有効性を優先します。ほとんどの場合、結果整合性は 5 分以内に取得されます。
詳細については、「[AWS KMS  の結果整合性](accessing-kms.md#programming-eventual-consistency)」を参照してください。

# AWS KMS グラントのベストプラクティス
<a name="grant-best-practices"></a>

AWS KMS では、許可を作成、使用、管理する際に以下のベストプラクティスを推奨しています。
+ グラントのアクセス許可を、被付与者プリンシパルに必要なアクセス許可に制限します。[最小限の特権アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)の原則を使用します。
+ IAM ロールなどの特定の被付与者プリンシパルを使用し、被付与者プリンシパルに、必要な API オペレーションのみを使用するアクセス許可を付与します。
+ 暗号化コンテキストの[グラントの制約](grants.md#terms-grant-constraint)を使用して、発信者が意図した目的のために KMS キーを使用していることを保証します。リクエストで暗号化コンテキストを使用してデータを保護する方法の詳細については、 *AWS セキュリティブログ*の「 [AWS Key Management Service と EncryptionContext を使用して暗号化されたデータの整合性を保護する方法](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/)」を参照してください。
**ヒント**  
可能な限り、[EncryptionContextEqual](create-grant-overview.md#grant-constraints) のグラントの制約を使用します [EncryptionContextSubset](create-grant-overview.md#grant-constraints) のグラントの制約は、正しく使用するのが困難です。使用する必要がある場合は、ドキュメントをよく読み、グラントの制約をテストして、意図したとおりに動作することを確認してください。
+ 重複するグラントを削除します。重複するグラントには、同じキー ARN、API アクション、被付与者プリンシパル、暗号化コンテキスト、名前などがあります。元のグラントを廃止にしたか取り消したにも関わらず、重複したグラントが残った場合、残った重複グラントは意図しない特権エスカレーションを構成します。`CreateGrant` リクエストの再試行時にグラントが重複しないようにするには、[`Name` パラメータ](create-grant-overview.md#grant-create)を使用します。重複するグラントを検出するには、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。誤って重複するグラントを作成した場合は、できるだけ早く廃止にするか、取り消します。
**注記**  
[AWS マネージドキー](concepts.md#aws-managed-key)のグラントは重複しているようにみえますが、異なる被付与者プリンシパルを持っています。  
通常、`ListGrants` レスポンスの `GranteePrincipal` フィールドには、グラントの被付与者プリンシパルが含まれます。ただし、グラントの被付与者プリンシパルが AWS サービスである場合、 `GranteePrincipal`フィールドには、複数の異なる被付与者[プリンシ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)パルを表すサービスプリンシパルが含まれます。
+ グラントは、自動的に期限切れにならないことに注意してください。アクセス許可が不要になったら、すぐに[グラントの廃止または取り消し](grant-delete.md)をします。削除されないグラントは、暗号化されたリソースに対してセキュリティ上のリスクを引き起こす可能性があります。

# グラントへのアクセスを制御する
<a name="grant-authorization"></a>

キーポリシー、IAM ポリシー、グラントで、グラントを作成および管理するオペレーションへのアクセスを制御できます。グラントから `CreateGrant` 許可を取得したプリンシパルは、[より限定的な許可の付与](create-grant-overview.md#grant-creategrant)を行います。


| API オペレーション | キーポリシーまたは IAM ポリシー | 権限 | 
| --- | --- | --- | 
| CreateGrant | ✓ | ✓ | 
| ListGrants | ✓ | - | 
| ListRetirableGrants | ✓ | - | 
| 許可を使用停止にする | (制限あり。「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください) | ✓ | 
| RevokeGrant | ✓ | - | 

キーポリシーまたは IAM ポリシーを使用して、グラントを作成および管理するオペレーションへのアクセスを制御する場合、次のポリシー条件の 1 つ以上を使用してアクセス許可を制限できます。 は、次のグラント関連の条件キーをすべて AWS KMS サポートします。詳細と例については、「[AWS KMS 条件キー](conditions-kms.md)」を参照してください。

[kms:GrantConstraintType](conditions-kms.md#conditions-kms-grant-constraint-type)  
グラントに指定された[グラントの制約](create-grant-overview.md#grant-constraints)が含まれている場合にのみ、プリンシパルにグラントの作成を許可します。

[kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource)  
[と統合された AWS サービスが AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)プリンシパルに代わってリクエストを送信する`RevokeGrant`場合にのみ`ListGrants`、プリンシパルが `CreateGrant`、、または を呼び出すことを許可します。

[kms:GrantOperations](conditions-kms.md#conditions-kms-grant-operations)  
プリンシパルにグラントの作成を許可しますが、グラントを指定されたオペレーションに制限します。

[kms:GranteePrincipal](conditions-kms.md#conditions-kms-grantee-principal)  
指定された[被付与者プリンシパル](grants.md#terms-grantee-principal)に対してのみ、グラントの作成を許可します。

[kms:RetiringPrincipal](conditions-kms.md#conditions-kms-retiring-principal)  
グラントが特定の[使用停止プリンシパル](grants.md#terms-retiring-principal)を指定する場合にのみ、プリンシパルにグラントの作成を許可します。

# グラントの作成
<a name="create-grant-overview"></a>

グラントを作成する前に、グラントをカスタマイズするためのオプションを確認します。グラントの制約を使用して、グラントのアクセス許可を制限することができます。`CreateGrant` アクセス許可の付与も参照してください。グラントからグラントを作成する許可を取得したプリンシパルは、作成できるグラントが制限されます。

**Topics**
+ [グラントの作成](#grant-create)
+ [CreateGrant アクセス許可の付与](#grant-creategrant)

## グラントの作成
<a name="grant-create"></a>

許可を作成するには、 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションを呼び出します。KMS キー、[被付与者プリンシパル](grants.md#terms-grantee-principal)、許可された[グラントオペレーション](grants.md#terms-grant-operations)のリストを指定します。オプションの[使用停止プリンシパル](grants.md#terms-retiring-principal)を指定することもできます。許可をカスタマイズするには、オプションの `Constraints` パラメータを使用して[許可の制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)を定義します。

グラントの作成、廃止、取り消しの際、変更が AWS KMS全体で利用可能になるまで短い遅延が発生する場合があります (通常は 5 分未満)。詳細については、「[結果整合性 (グラント用)](grants.md#terms-eventual-consistency)」を参照してください。

例えば、次の `CreateGrant` コマンドは、`keyUserRole` ロールを引き受ける権限を持つユーザーに、指定された[対称 KMS キー](symm-asymm-choose-key-spec.md#symmetric-cmks)で [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出すことを許可するグラントを作成します。グラントでは、`RetiringPrincipal` パラメータを使用して、グラントを廃止できるプリンシパルを指定します。また、リクエスト内の[暗号化コンテキスト](encrypt_context.md)に `"Department": "IT"` が含まれている場合にのみアクセス許可を付与する許可制約も含まれます。

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

コードが `CreateGrant` オペレーションを再試行するか、[AWS リクエストを自動的に再試行する SDK](https://docs.aws.amazon.com/general/latest/gr/api-retries.html) を使用する場合は、オプションの[名前](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name)パラメータを使用して、重複グラントの作成を防止します。が既存のグラントと同じプロパティを持つグラントの`CreateGrant`リクエスト AWS KMS を取得した場合、リクエストは再試行として認識され、新しいグラントは作成されません。`Name` 値を使用して、任意の AWS KMS オペレーションでグラントを識別することはできません。

**重要**  
グラント名には、機密情報や重要情報を含めないでください。これは、CloudTrail ログやその他の出力にプレーンテキストで表示される場合があります。

```
$ aws kms create-grant \
    --name IT-1234abcd-keyUserRole-decrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

複数のプログラミング言語でのグラントの作成方法を示すコード例については、「[AWS SDK または CLI `CreateGrant`で を使用する](example_kms_CreateGrant_section.md)」を参照してください。

### グラントの制約の使用
<a name="grant-constraints"></a>

[グラントの制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)は、グラントが被付与者プリンシパルに付与するアクセス許可の条件を設定します。グラントの制約は、[キーポリシー](key-policies.md)または [IAM ポリシー](iam-policies.md)で、[条件キー](policy-conditions.md)の代わりになります。各グラントの制約値には、最大 8 個の暗号化コンテキストペアを含めることができます。各グラントの制約の暗号化コンテキスト値は、384 文字を超えることはできません。

**重要**  
このフィールドには、機密情報や重要情報を含めないでください。このフィールドは、CloudTrail ログやその他の出力にプレーンテキストで表示される場合があります。

AWS KMS は、 `EncryptionContextEquals`と の 2 つの許可制約をサポートしています。どちらも`EncryptionContextSubset`、暗号化オペレーションのリクエストで暗号化[コンテキスト](encrypt_context.md)の要件を確立します。

暗号化コンテキストのグラントの制約は、暗号化コンテキストパラメータを持つ[グラントペレーション](grants.md#terms-grant-operations)で使用されるように設計されています。
+ 暗号化コンテキストの制約は、対称暗号化 KMS キーのグラントのみで有効です。他の KMS キーを使用する暗号化オペレーションは、暗号化コンテキストをサポートしません。
+ 暗号化コンテキストの制約は、`DescribeKey` および `RetireGrant` オペレーションでは無視されます。`DescribeKey` および `RetireGrant` には暗号化コンテキストパラメータはありませんが、暗号化コンテキストの制約を持つグラントにこれらのオペレーションを含めることができます。
+ `CreateGrant` オペレーションのグラントで、暗号化コンテキストの制約を使用することができます。暗号化コンテキストの制約では、`CreateGrant` 許可で作成された任意のグラントが、同様に厳密またはより厳密な暗号化コンテキストの制約を持っている必要があります。

AWS KMS では、次の暗号化コンテキスト許可の制約がサポートされています。

**EncryptionContextEquals**  
`EncryptionContextEquals` を使用して、許可されたリクエストの正確な暗号化コンテキストを指定します。  
`EncryptionContextEquals` では、リクエストの暗号化コンテキストペアが、グラントの制約の暗号化コンテキストペアと、大文字と小文字の区別で完全に一致することを要求します。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。  
例えば、`EncryptionContextEquals` のグラントの制約が `"Department": "IT"` 暗号化コンテキストペアを要求する場合、グラントはリクエストの暗号化コンテキストが完全に `"Department": "IT"` である場合にのみ、指定されたタイプのリクエストを許可します。

**EncryptionContextSubset**  
`EncryptionContextSubset` を使用して、リクエストに特定の暗号化コンテキストペアを含めるように要求します。  
`EncryptionContextSubset` では、リクエストにグラントの制約 (完全な大文字と小文字を区別する一致) のすべての暗号化コンテキストペアを含むことを要求しますが、リクエストが追加の暗号化コンテキストペアを持っている可能性もあります。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。  
例えば、`EncryptionContextSubset` のグラントの制約が、`Department=IT` の暗号化コンテキストペアを要求する場合、グラントはリクエストの暗号化コンテキストが `"Department": "IT"` の場合、またはリクエストが `"Department": "IT","Purpose": "Test"` のような他の暗号化コンテキストペアと共に `"Department": "IT"` を含む場合に、指定されたタイプのリクエストを許可します。

対称暗号化 KMS キーのグラントで暗号化コンテキストの制約を指定するには、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションの `Constraints` パラメータを使用します。このコマンドが作成する許可では、`keyUserRole` ロールを引き受ける権限を持つユーザーに、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出すためのアクセス許可を付与します。ただし、そのアクセス許可は `Decrypt` リクエストの暗号化コンテキストが、`"Department": "IT"` 暗号化コンテキストペアである場合にのみ有効です。

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextEquals={Department=IT}
```

したがって、グラントは以下のようになります。`keyUserRole` ロールに付与されるアクセス許可は、`Decrypt` リクエストがグラントの制約で指定された同じ暗号化コンテキストペアを使用する場合にのみ有効です。KMS キーでグラントを見つけるには、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。

```
$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "Decrypt"
            ],
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
            "CreationDate": 1568565290.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole"
        }
    ]
}
```

`EncryptionContextEquals` のグラントの制約を満たすために、`Decrypt` オペレーションのリクエストの暗号化コンテキストは、`"Department": "IT"` ペアである必要があります。被付与者プリンシパルからの次のようなリクエストは、`EncryptionContextEquals` のグラントの制約を満たします。

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

グラントの制約が `EncryptionContextSubset` の場合、リクエストの暗号化コンテキストペアは、グラントの制約の暗号化コンテキストペアを含む必要がありますが、リクエストは他の暗号化コンテキストペアを含んでいる可能性もあります。次のグラントの制約は、リクエスト内の暗号化コンテキストペアの 1 つが `"Deparment": "IT"` であることを要求します。

```
"Constraints": {
   "EncryptionContextSubset": {
       "Department": "IT"
   }
}
```

被付与者プリンシパルからの次のリクエストは、この例の `EncryptionContextEqual` および `EncryptionContextSubset` のグラントの制約両方を満たします

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

ただし、被付与者プリンシパルからの次のようなリクエストは、`EncryptionContextSubset` のグラントの制約を満たしますが、`EncryptionContextEquals` のグラントの制約は満たしません。

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT,Purpose=Test
```

AWS サービスは、多くの場合、 で KMS キーを使用するアクセス許可を付与する許可で暗号化コンテキスト制約を使用します AWS アカウント。例えば、Amazon DynamoDB では、次のようなグラントを使用して、アカウントで DynamoDB の [AWS マネージドキー](concepts.md#aws-managed-key) を使用するアクセス許可を取得します。このグラント内の `EncryptionContextSubset` のグラントの制約により、要求内の暗号化コンテキストに `"subscriberID": "111122223333"` と `"tableName": "Services"` ペアが含まれる場合にのみ、グラントの許可が有効になります。このグラントの制約は、DynamoDB が AWS アカウントの特定のテーブルに対してのみ、指定された KMS キーを使用することをグラントが許可することを意味します。

この出力を取得するには、アカウントの AWS マネージドキー for DynamoDB で [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを実行します。

```
$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{
    "Grants": [
        {
            "Operations": [
                "Decrypt",
                "Encrypt",
                "GenerateDataKey",
                "ReEncryptFrom",
                "ReEncryptTo",
                "RetireGrant",
                "DescribeKey"
            ],
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "Constraints": {
                "EncryptionContextSubset": {
                    "aws:dynamodb:tableName": "Services",
                    "aws:dynamodb:subscriberId": "111122223333"
                }
            },
            "CreationDate": 1518567315.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
            "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com",
            "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com",
            "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a",
            "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59"
        }
    ]
}
```

## CreateGrant アクセス許可の付与
<a name="grant-creategrant"></a>

グラントには、`CreateGrant` オペレーションを呼び出す許可を含めることができます。ただし、[被付与者プリンシパル](grants.md#terms-grantee-principal)が `CreateGrant` を呼び出す許可をポリシーからではなくグラントから取得すると、その許可は制限されます。
+ 被付与者プリンシパルは、親グラントで一部またはすべてのオペレーションを許可するグラントのみを作成できます。
+ 作成されたグラントの[グラントの制約](#grant-constraints)は、少なくとも親グラントの制約と同じくらい厳密である必要があります。

これらの制限は、`CreateGrant` 許可をポリシーから取得するプリンシパルには適用されませんが、プリンシパルの許可は[ポリシー条件](grant-authorization.md)によって制限されます。

例えば、被付与者プリンシパルが `GenerateDataKey`、`Decrypt`、および `CreateGrant` オペレーションを呼び出せるようにする許可について考えてみます。`CreateGrant` 許可、親グラントを許可するグラントを呼び出します。

```
# The original grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "GenerateDataKey",
                "Decrypt",
                "CreateGrant
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

被付与者プリンシパル、exampleUser はこのアクセス許可を使用して、`CreateGrant` や `Decrypt` などの元のグラントで、指定されたオペレーションのサブセットを含むグラントを作成できます。子グラントに `ScheduleKeyDeletion` または `ReEncrypt` などの他のオペレーションを含めることはできません。

また、子グラントの[グラントの制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)は、親グラントの制約と同じか、より厳密である必要があります。例えば、子グラントは親グラントの `EncryptionContextSubset` 制約にペアを追加できますが、削除することはできません。子グラントは `EncryptionContextSubset` 制約を `EncryptionContextEquals` 制約に変更することはできますが、その逆はできません。

IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

例えば、被付与者プリンシパルは、親グラントから取得した `CreateGrant` 許可を使用して、次の子グラントを作成します。子グラントのオペレーションは、親グラントのオペレーションのサブセットであり、グラントの制約がより限定的です。

```
# The child grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572249600.0,
            "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f",
            "Operations": [
                "CreateGrant"
                "Decrypt"
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

子グラントの被付与者プリンシパル、`anotherUser` は `CreateGrant` 許可を使用してグラントを作成できます。ただし、`anotherUser` が作成したグラントは親グラントまたはサブセット内のオペレーションを含める必要があり、グラントの制約は同じか、より厳密である必要があります。

# グラントの表示
<a name="grant-view"></a>

許可を表示するには、 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。グラントを適用する KMS キーを指定する必要があります。グラント ID または被付与者プリンシパルにより、グラントリストをフィルタリングすることもできます。その他の例については、「[AWS SDK または CLI `ListGrants`で を使用する](example_kms_ListGrants_section.md)」を参照してください。

特定の[廃止プリンシパル](grants.md#terms-retiring-principal)を持つ AWS アカウント および リージョンのすべての許可を表示するには、[ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html) を使用します。レスポンスには、各グラントの詳細が含まれます。

**注記**  
通常、`ListGrants` レスポンスの `GranteePrincipal` フィールドには、グラントの被付与者プリンシパルが含まれます。ただし、グラントの被付与者プリンシパルが AWS サービスである場合、 `GranteePrincipal`フィールドには[サービスプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)が含まれます。これは、複数の異なる被付与者プリンシパルを表す場合があります。

例えば、次のコマンドは KMS キーのすべてのグラントを一覧表示します。

```
$  aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Operations": [
                "Decrypt"
            ]
        }
    ]
}
```

# グラントトークンを使用する
<a name="using-grant-token"></a>

 AWS KMS API は[結果整合性](grants.md#terms-eventual-consistency)モデルに従います。グラントの作成時、グラントがすぐに有効にならないことがあります。変更が AWS KMS全体に適用されるまでに若干の遅延が生じることがあります。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。システム全体で変更が完全に伝播されると、被付与者プリンシパルはグラントトークンやグラントの証拠を指定せずに、グラントのアクセス許可を使用できます。ただし、まだすべての に知られていないほど新しい権限がある場合 AWS KMS、リクエストは`AccessDeniedException`エラーで失敗する可能性があります。

新しいグラントでアクセス許可をすぐに使用するには、グラントの[グラントトークン](grants.md#grant_token)を使用します。[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションによって返されるグラントトークンを保存します。次に、 AWS KMS オペレーションのリクエストで許可トークンを送信します。グラントトークンは任意の AWS KMS [グラントオペレーション](grants.md#terms-grant-operations)に送信でき、同じリクエストで複数のグラントトークンを送信できます。



次の例では、`CreateGrant` オペレーションを使用して、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを許可するグラントを作成します。これは、`CreateGrant` が `token` 変数で返すグラントトークンを保存します。次に、`GenerateDataKey` オペレーションへの呼び出しで、`token` 変数のグラントトークンを使用します。

```
# Create a grant; save the grant token 
$ token=$(aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:user/appUser \
    --retiring-principal arn:aws:iam::111122223333:user/acctAdmin \
    --operations GenerateDataKey Decrypt \
    --query GrantToken \
    --output text)

# Use the grant token in a request
$ aws kms generate-data-key \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    –-key-spec AES_256 \
    --grant-tokens $token
```

アクセス許可を持つプリンシパルは、そのグラントが AWS KMS全体で利用可能になる前であっても、グラントトークンを使用して新しいグラントを廃止することができます。(`RevokeGrant` オペレーションはグラントトークンを承認しません)。詳細については、「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください。

```
# Retire the grant
$ aws kms retire-grant --grant-token $token
```

# グラントの使用停止と取り消し
<a name="grant-delete"></a>

グラントを削除するには、グラントの廃止または取り消しをします。

[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) および [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) オペレーションは、互いに非常によく似ています。どちらのオペレーションもグラントを削除します。これにより、グラントが許可しているアクセス許可が削除されます。これらのオペレーションの主な違いは、オペレーションの認可方法です。

**RevokeGrant**  
ほとんどの AWS KMS オペレーションと同様に、`RevokeGrant`オペレーションへのアクセスは[キーポリシー](key-policies.md)と [IAM ポリシー](iam-policies.md)によって制御されます。[RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) API は、任意のプリンシパルから `kms:RevokeGrant` アクセス許可で呼び出すことができます。このアクセス許可は、キー管理者に付与される標準のアクセス許可に含まれています。通常、管理者はグラントを取り消して、グラントが許可するアクセス許可を拒否します。

**RetireGrant**  
グラントでは、グラントを廃止にできる管理者を決定できます。この設計により、キーポリシーや IAM ポリシーを変更することなく、グラントのライフサイクルを制御できます。通常、許可の使用を終了したら、グラントを廃止にします。  
グラントは、グラントで指定されたオプションの[廃止プリンシパル](grants.md#terms-retiring-principal)により廃止にできます。[被付与者プリンシパル](grants.md#terms-grantee-principal)もグラントを廃止にできますが、`RetireGrant` オペレーションを含むプリンシパルまたはグラントも同時に廃止にする場合に限られます。バックアップとして、グラントが作成された AWS アカウント はグラントを廃止できます。  
IAM ポリシーで使用できる `kms:RetireGrant` アクセス許可がありますが、ユーティリティは限られています。グラントで指定されたプリンシパルは、`kms:RetireGrant` アクセス許可なしでグラントを廃止にできます。`kms:RetireGrant` アクセス許可だけでは、プリンシパルにグラントの廃止を許可できません。`kms:RetireGrant` アクセス許可は、[キーポリシー](key-policies.md)および[リソースコントロールポリシー](resource-control-policies.md)では有効ではありません。  
+ グラントを廃止するアクセス許可を拒否するには、IAM ポリシーで `kms:RetireGrant` アクセス許可で `Deny` アクションを使用します。
+ KMS キーを所有 AWS アカウント する は、アカウントの IAM プリンシパルにアクセス`kms:RetireGrant`許可を委任できます。
+ 廃止プリンシパルが異なる場合 AWS アカウント、他のアカウントの管理者は `kms:RetireGrant` を使用して、そのアカウントの IAM プリンシパルに付与を廃止するアクセス許可を委任できます。

 AWS KMS API は[結果整合性](grants.md#terms-eventual-consistency)モデルに従います。グラントの作成、廃止、または取り消しを行うと、変更が AWS KMS全体に適用されるまでに若干の遅延が生じることがあります。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。新しい権限をすぐに削除する必要がある場合は、その権限トークン AWS KMS[を使用して権限](using-grant-token.md)を廃止します。グラントトークンを使用してグラントを取り消すことはできません。