でのグラント AWS KMS - AWS Key Management Service

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

でのグラント AWS KMS

グラントはポリシーツールであり、AWS プリンシパルに暗号化オペレーションでの KMS キーの使用を許可します。また、KMS キー (DescribeKey) を表示して、グラントの作成、管理をできるようにします。KMS キーへのアクセスを認可する際、グラントはキーポリシーおよび IAM ポリシーと共に考慮されます。グラントは、作成してそのアクセス許可を使用し、キーポリシーまたは IAM ポリシーを変更することなく削除できるため、一時的なアクセス許可としてよく使用されます。

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

複数のプログラミング言語による、グラントのオペレーション方法を示すコード例については、「許可の使用」を参照してください。

グラントについて

権限は、きわめて柔軟で便利なアクセス制御メカニズムです。KMS キーのグラントを作成すると、このグラントは、グラントで指定されたすべての条件が満たされている場合に限り、被付与者プリンシパルが指定されたグラントオペレーションを KMS キーで呼び出すことを許可します。

  • 各グラントでは、正確に 1 つの KMS キーにアクセスできます。異なる AWS アカウントでKMS キーのグラントを作成できます。

  • グラントは KMS キーへのアクセスを許可できますが、アクセスを拒否することはできません。

  • 各グラントは、それぞれ 1 つの被付与者プリンシパルを持っています。被付与者プリンシパルは、KMS キー AWS アカウント と同じ または別のアカウントの 1 つ以上の ID を表すことができます。

  • グラントは、グラントオペレーションのみを許可することができます。グラントオペレーションは、グラントの KMS キーによってサポートされている必要があります。サポートされていないオペレーションを指定すると、ValidationError例外が発生してCreateGrantリクエストは失敗します。

  • 被付与者プリンシパルは、アクセス許可がキーポリシーまたは IAM ポリシーから付与された場合と同様に、グラントを指定せずに付与されたアクセス許可を使用できます。ただし、 AWS KMS API は結果整合性モデルに従うため、グラントを作成、廃止、または取り消すと、変更が 全体で利用可能になるまでに少し時間がかかる場合があります AWS KMS。権限でアクセス許可をすぐに使用するには、権限トークンを使用します

  • 認可されたプリンシパルはグラントを削除できます (グラントの廃止または失効)。グラントを削除すると、グラントが許可したすべてのアクセス許可が削除されます。グラントを取り消すために追加または削除するポリシーを特定する必要はありません。

  • AWS KMS は、各 KMS キーに対する許可の数を制限します。詳細については、「KMS キーあたりのグラント: 50,000」を参照してください。

グラントを作成するとき、およびグラントを作成する許可を他のユーザーに付与するときは注意が必要です。許可を作成するアクセス許可は、kmsPutKeyPolicy: ポリシーを設定するアクセス許可を許可するのと同様に、セキュリティに影響します。

  • KMS キー (kms:CreateGrant) の権限を作成する権限を持つユーザーは、権限を使用して、 AWS サービスを含むユーザーとロールに KMS キーの使用を許可できます。プリンシパルは、独自の ID AWS アカウント でも、別のアカウントまたは組織の ID でもかまいません。

  • 許可では、 AWS KMS オペレーションのサブセットのみを許可できます。グラントを使用して、プリンシパルに KMS キーの表示、暗号化オペレーションでの使用、グラントの作成、グラントの廃止を許可できます。詳細については、「グラントオペレーション」を参照してください。グラントの制約を使用して、対称暗号化キーに対するグラントにある許可を制限することもできます。

  • プリンシパルはアクセス許可を取得して、キーポリシーまたは IAM ポリシーからグラントを作成できます。ポリシーから kms:CreateGrant アクセス許可を取得したプリンシパルは、KMS キーの任意の付与オペレーションの許可を作成できます。これらのプリンシパルは、キーに対して付与している許可を持っている必要はありません。ポリシーで kms:CreateGrant アクセス許可を許可する場合は、ポリシー条件を使用してこの許可を制限します。

  • プリンシパルは、グラントからグラントを作成する許可を取得することもできます。これらのプリンシパルは、ポリシーからの他のアクセス許可を持っている場合でも、付与されたアクセス許可のみを委任できます。詳細については、「アクセス CreateGrant 許可の付与」を参照してください。

グラントに関する概念については、Grant terminology を参照してください。

グラントの概念

グラントを効果的に使用するには、 AWS KMS が使用する用語と概念を理解する必要があります。

グラントの制約

グラントのアクセス許可を制限する条件。現在、 は、暗号化オペレーションのリクエストの暗号化コンテキストに基づいて、制約を付与 AWS KMS します。詳細については、「グラントの制約の使用」を参照してください。

グラント ID

KMS キーのグラントの一意の識別子。グラント ID とキー識別子 を使用して、 または RevokeGrantリクエストのグラントを識別できます。 RetireGrant

グラントオペレーション

グラントで許可できる AWS KMS オペレーション。他のオペレーションを指定した場合、CreateGrantリクエストはValidationError例外で失敗します。これらは、グラントトークンを承認するオペレーションでもあります。これらのアクセス許可の詳細については、AWS KMS アクセス許可 を参照してください。

これらのグラントオペレーションは、オペレーションを使用するアクセス許可を表します。したがって、ReEncrypt オペレーションの場合、ReEncryptFromReEncryptTo、または両方の ReEncrypt* を指定できます。

グラントオペレーション:

許可するグラントオペレーションは、許可の KMS キーでサポートされている必要があります。サポートされていないオペレーションを指定すると、ValidationError例外が発生してCreateGrantリクエストは失敗します。例えば、対称暗号化 KMS キーのグラントは、SignVerifyGenerateMac または 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オペレーションの呼び出しでグラントトークンを使用できます。

$ aws kms retire-grant \ --grant-token $token

CreateGrant は、グラントトークンを返す唯一のオペレーションです。他のオペレーションまたは AWS KMS オペレーションのCloudTrail ログイベントからグラントトークンを取得することはできません CreateGrant 。ListGrants および ListRetirableGrantsオペレーションはグラント ID を返しますが、グラントトークンは返しません。

詳細については、「グラントトークンを使用する」を参照してください。

被付与者プリンシパル

グラントで指定されたアクセス許可を取得する ID。各グラントはそれぞれ 1 つの被付与者プリンシパルを持っていますが、この被付与者プリンシパルは複数の ID を代表することができます。

被付与者プリンシパルは、 AWS アカウント (ルート)、IAM ユーザー IAM ロール 、フェデレーティッドロールまたはユーザー 、または引き受けたロールユーザーを含む任意の AWS プリンシパルです。被付与者プリンシパルは、KMS キーと同じアカウントか、別のアカウントにすることができます。ただし、被付与者プリンシパルを、サービスプリンシパルIAM グループAWS 組織にすることはできません。

注記

IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティのベストプラクティス」を参照してください。

(グラント) を廃止にする

グラントを終了します。アクセス許可の使用が終了したら、グラントを廃止にします。

グラントの取り消しと使用停止のどちらも、グラント限を削除します。ただし、使用停止はグラントで指定されたプリンシパルによって行われます。通常、取り消しはキー管理者が行います。詳細については、「グラントの使用停止と取り消し」を参照してください。

プリンシパルを使用停止にする

グラントを廃止にするプリンシパル。グラントで使用停止プリンシパルを指定できますが、必須ではありません。廃止するプリンシパルは、、IAM ユーザー AWS アカウント、IAM ロール、フェデレーティッドユーザー、引き受けたロールユーザーなど、任意の AWS プリンシパルにすることができます。使用停止プリンシパルは、KMS キーと同じアカウントか、別のアカウントにすることができます。

注記

IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティのベストプラクティス」を参照してください。

グラントで指定された廃止プリンシパルに加えて、グラントは、グラントが作成された AWS アカウント によって廃止される可能性があります。グラントで RetireGrant オペレーションが許可されている場合は、被付与者プリンシパルがグラントを廃止にできます。また、廃止するプリンシパル AWS アカウント である AWS アカウント または は、同じ の IAM プリンシパルに付与を廃止するアクセス許可を委任できます AWS アカウント。詳細については、「グラントの使用停止と取り消し」を参照してください。

(グラント) を取り消す

グラントを終了します。グラントを取り消して、グラントが許可するアクセス許可をアクティブに拒否します。

権限の取り消しと使用停止のどちらも、権限を削除します。ただし、使用停止はグラントで指定されたプリンシパルによって行われます。通常、取り消しはキー管理者が行います。詳細については、「グラントの使用停止と取り消し」を参照してください。

結果整合性 (グラント用)

AWS KMS API は結果整合性モデルに従います。グラントの作成、廃止、または取り消しを行うと、変更が AWS KMS全体に適用されるまでに若干の遅延が生じることがあります。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。

想定外のエラーが発生する場合は、この短い遅延に注意する必要があります。例えば、 全体でグラントが認識される前に、新しいグラントを管理したり、新しいグラントで許可を使用したりしようとすると AWS KMS、アクセス拒否エラーが発生する可能性があります。グラントを廃止にするか取り消す場合でも、被付与者プリンシパルは、グラントが完全に削除されるまで、そのアクセス許可を短い期間使用できる可能性があります。一般的な戦略はリクエストを再試行することであり、一部の AWS SDKsには自動バックオフと再試行ロジックが含まれています。

AWS KMS には、この短い遅延を軽減する機能があります。

注記

サービスのすべてのエンドポイントが新しいグラント状態で更新されるまで、グラントトークンはグラントの有効性を優先します。ほとんどの場合、結果整合性は 5 分以内に取得されます。

詳細については、「AWS KMS  の結果整合性」を参照してください。

AWS KMS グラントのベストプラクティス

AWS KMS では、グラントを作成、使用、管理する際に、以下のベストプラクティスを推奨しています。

  • グラントのアクセス許可を、被付与者プリンシパルに必要なアクセス許可に制限します。最小限の特権アクセスの原則を使用します。

  • IAM ロールなどの特定の被付与者プリンシパルを使用し、被付与者プリンシパルに、必要な API オペレーションのみを使用するアクセス許可を付与します。

  • 暗号化コンテキストのグラントの制約を使用して、発信者が意図した目的のために KMS キーを使用していることを保証します。リクエストで暗号化コンテキストを使用してデータを保護する方法の詳細については、 AWS セキュリティブログ「 AWS Key Management Service と を使用して暗号化されたデータの完全性を保護する方法 EncryptionContext」を参照してください。

    ヒント

    可能な限り、EncryptionContextEqual許可の制約を使用します。EncryptionContextSubset グラントの制約を正しく使用することはより困難です。使用する必要がある場合は、ドキュメントをよく読み、グラントの制約をテストして、意図したとおりに動作することを確認してください。

  • 重複するグラントを削除します。重複するグラントには、同じキー ARN、API アクション、被付与者プリンシパル、暗号化コンテキスト、名前などがあります。元のグラントを廃止にしたか取り消したにも関わらず、重複したグラントが残った場合、残った重複グラントは意図しない特権エスカレーションを構成します。CreateGrant リクエストの再試行時にグラントが重複しないようにするには、Name パラメータを使用します。重複する権限を検出するには、 ListGrantsオペレーションを使用します。誤って重複するグラントを作成した場合は、できるだけ早く廃止にするか、取り消します。

    注記

    AWS マネージドキーのグラントは重複しているようにみえますが、異なる被付与者プリンシパルを持っています。

    通常、ListGrants レスポンスの GranteePrincipal フィールドには、グラントの被付与者プリンシパルが含まれます。ただし、グラントの被付与者プリンシパルが AWS サービスの場合、 GranteePrincipalフィールドにはサービスプリンシパル が含まれます。これは、複数の異なる被付与者プリンシパルを表す場合があります。

  • グラントは、自動的に期限切れにならないことに注意してください。アクセス許可が不要になったら、すぐにグラントの廃止または取り消しをします。削除されないグラントは、暗号化されたリソースに対してセキュリティ上のリスクを引き起こす可能性があります。