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

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

AWS KMS でのグラント

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

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

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

グラントについて

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

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

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

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

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

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

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

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

グラントを作成するとき、およびグラントを作成する許可を他のユーザーに付与するときは注意が必要です。許可を作成するアクセス許可にはセキュリティ上の影響があります。これは、kms:PutKeyPolicy ポリシーを設定するアクセス許可を許可するのと似ています。

  • KMS キー (kms:CreateGrant) のグラントを作成するためのアクセス許可を持つユーザーは、グラントを使用してユーザーとロール (AWS のサービスを含む) に KMS キーの使用を許可します。プリンシパルは独自の AWS アカウント、または異なるアカウントや組織のアイデンティティにすることができます。

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

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

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

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

グラントの概念

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

グラントの制約

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

グラント ID

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

グラントオペレーション

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

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

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

許可するグラントオペレーションは、許可の KMS キーでサポートされている必要があります。サポートされていないオペレーションを指定すると、CreateGrantリクエストは ValidationError 例外で失敗します。例えば、対称暗号化 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オペレーションまたは CreateGrant オペレーションのCloudTrail ログイベントから取得することはできません。ListGrants および ListRetirableGrantsオペレーションはグラント ID を返しますが、グラントトークンは返しません。

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

被付与者プリンシパル

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

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

注記

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

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

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

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

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

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

注記

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

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

(グラント) を取り消す

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

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

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

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

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

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 フィールドにはサービスプリンシパルが含まれます。これは、複数の異なる被付与者プリンシパルを表す場合があります。

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