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 つ以上の被付与者プリンシパルを持つ必要があります。被付与者プリンシパルは、異なる AWS アカウント のアイデンティティである可能性があります。

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

  • 非付与者プリンシパルは、アクセス許可がキーポリシーまたは IAM ポリシーから付与された場合と同様に、権限を指定せずに付与されたアクセス許可を使用できます。ただし、権限の作成、使用停止、取り消しの際、オペレーションが結果整合性を取得するまで短い遅延が発生することがあります (通常は 5 分未満)。権限でアクセス許可をすぐに使用するには、権限トークンを使用します

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

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

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

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

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

  • プリンシパルはアクセス許可を取得して、キーポリシーまたは IAM ポリシーから権限を作成できます。これらのプリンシパルは、アクセス許可がない場合でも、KMS キーで権限オペレーションの権限を作成することができます。ポリシーで kms:CreateGrant アクセス許可を許可する場合は、ポリシー条件を使用してこの許可を制限します。

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

権限に関する概念については、Grant terminology を参照してください。

権限の概念

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

権限の制約

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

権限 ID

KMS キーの権限の一意の識別子。キー識別子と共に権限 ID を使用し、RetireGrant または RevokeGrant リクエストで権限を識別できます。

権限オペレーション

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

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

権限オペレーション:

許可する権限オペレーションは、許可の KMS キーでサポートされている必要があります。サポートされていないオペレーションを指定すると、ValidationError の例外により、CreateGrant リクエストは失敗します。例えば、対称暗号化 KMS キーの権限は、SignVerifyGenerateMac または VerifyMac オペレーションを許可できません。非対称 KMS キーの権限は、データキーまたはデータキーペアを生成するオペレーションを許可できません。

権限トークン

権限の作成時に、新しい権限が AWS KMS 全体で利用可能になるまで (結果整合性を取得するまで)、通常は 5 分未満の短い遅延が発生する場合があります。権限が結果整合性を取得する前に権限を使用すると、アクセス拒否エラーが発生する可能性があります。権限トークンを使用すると、権限を参照し、権限のアクセス許可をすぐに使用できます。

権限トークンは、一意、非シークレット、可変長、base64 エンコードの、権限を表す文字列です。権限トークンを使用して、任意の権限オペレーションで権限を識別できます。ただし、トークン値はハッシュダイジェストであるため、権限の詳細は明らかになりません。

権限トークンは、権限が結果整合性を取得するまでのみ使用されるように設計されています。その後、被付与者プリンシパルは、権限トークンやその他の権限の証拠を提供することなく、権限でアクセス許可を使用することができます。権限トークンは常時使用できますが、権限が最終的な整合性を取得した時点で、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 を返します。

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

被付与者プリンシパル

権限で指定されたアクセス許可を取得するアイデンティティ。権限には 1 つ以上の被付与者プリンシパルが必要です。被付与者プリンシパルは、AWS アカウント (ルート)、IAM ユーザーIAM ロールフェデレーティッドロールまたはユーザー、引き受けたロールユーザーなどの、任意の AWS プリンシパルとすることができます。被付与者プリンシパルは、KMS キーと同じアカウントか、別のアカウントにすることができます。ただし、被付与者プリンシパルを、サービスプリンシパルIAM グループAWS 組織にすることはできません。

(権限) を使用停止にする

権限を終了します。アクセス許可の使用が終了したら、権限を使用停止にします。

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

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

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

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

(権限) を取り消す

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

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

結果整合性 (権限用)

権限の作成、使用停止、取り消しの際、変更が AWS KMS 全体で利用可能になるまで短い遅延が発生する場合があります (通常は 5 分未満)。この遅延が終了すると、オペレーションが結果整合性を取得したとみなされます。

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

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

  • 新しい権限でアクセス許可をすぐに使用するには、権限トークンを使用します。権限トークンを使用して、任意の権限のオペレーションの権限を参照できます。手順については、権限トークンを使用する を参照してください。

  • CreateGrant オペレーションには、再試行オペレーションが重複する権限を作成することを防ぐ、Name パラメータがあります。

注記

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

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

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