AWS Key Management Service
開発者ガイド

許可の使用

AWS KMS では、キーポリシーおよび許可という 2 つのアクセスコントロールメカニズムをサポートしています。許可を利用すると、KMS カスタマーマスターキー (CMK) の使用を他の AWS プリンシパルに、プログラムによって委任することができます。これらを使用してアクセスを許可できますが、拒否することはできません。通常、許可は一時的なアクセス許可またはより細かいアクセス許可を提供するために使用されます。

また、キーポリシーを使用すると、他のプリンシパルに CMK へのアクセスを許可することもできますが、キーポリシーが最適に機能するのは、アクセス権限を比較的静的に割り当てる場合です。また、キーポリシーでは、AWS ポリシーに標準のアクセス許可モデルを使用します。この場合、ユーザーはリソースを使用してアクションを実行する権限を持つ場合と、持たない場合があります。たとえば、CMK の kms:PutKeyPolicy アクセス権限を持っているユーザーは、CMK のキーポリシーを別の任意のキーポリシーと完全に置き換えることができます。より詳細なアクセス権限の管理を利用するには、許可を使用します。

許可を操作する方法を示すコード例については、「許可の使用」を参照してください。

許可を作成する

許可を作成するには、CreateGrant API オペレーションを呼び出します。CMK、CMK の使用を許可する被付与者プリンシパル、および許可されるオペレーションのリストを指定します。CreateGrant オペレーションは、後で実行するオペレーションで許可を識別する際に使用できる許可 ID を返します。許可をカスタマイズするには、オプションの Constraints パラメータを使用して許可の制約を定義します。

許可は、CMK で kms:RevokeGrant アクセス権限を持っているすべてのユーザーが取り消す (キャンセルする) ことができます。許可は次のいずれかによって削除することができます。

  • 許可が作成された AWS アカウント (ルートユーザー)

  • 許可の削除プリンシパル (存在する場合)

  • 被付与者プリンシパル (許可に kms:RetireGrant が含まれている場合)

制約の付与

制約の付与によって、被付与者プリンシパルが実行できる条件がアクセス許可で設定されます。サポートされている 2 つの制約を付与します。その両方ともに、暗号化オペレーションのリクエストの暗号化コンテキストが関連します。

  • EncryptionContextEquals は、リクエストの暗号化コンテキストペアが、許可の制約の暗号化コンテキストペアに大文字と小文字を区別して完全に一致する場合にのみ、許可が適用されることを指定します。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。

  • EncryptionContextSubset は、リクエストの暗号化コンテキストが、許可の制約に指定された暗号化コンテキストを含む場合にのみ、許可が適用されることを指定します。リクエストの暗号化コンテキストは、制約の暗号化コンテキストに大文字と小文字を区別して完全に一致する必要がありますが、追加の暗号化コンテキストペアを含むこともできます。このペアは任意の順序で表示できますが、含まれている各ペアのキーと値を変更することはできません。

たとえば、GenerateDataKey および Decrypt オペレーションを使用する許可について考えてみます。これには、次の値を持つ EncryptionContextSubset 制約が含まれています。

{"Department":"Finance","Classification":"Public"}

この例では、次のいずれかの暗号化コンテキスト値は、EncryptionContextSubset 制約を満たします。

  • {"Department":"Finance","Classification":"Public"}

  • {"Classification":"Public","Department":"Finance"}

  • {"Customer":"12345","Department":"Finance","Classification":"Public","Purpose":"Test"}

ただし、次の暗号化コンテキスト値は制約を満たしません。これは、値が不完全であるか、指定されたペアの大文字と小文字を区別する完全一致を含まないためです。

  • {"Department":"Finance"}

  • {"department":"finance","classification":"public"}

  • {"Classification":"Public","Customer":"12345"}

キーポリシーでの CreateGrant の許可

CreateGrant API オペレーションへのアクセスを制御するキーポリシーを作成するときは、1 つ以上のポリシー条件を使用してアクセス権限を制限できます。AWS KMS は、許可に関連する次のすべての条件キーをサポートしています。これらの条件キーの詳細については、「AWS KMS 条件キー」を参照してください。

CreateGrant アクセス権限の付与

CreateGrant オペレーションを呼び出すアクセス権限が許可に含まれている場合、その許可では、同様の制限またはさらに制限の高い許可を作成する被付与者プリンシパルのみが許可されます。

たとえば、被付与者プリンシパルが GenerateDataKeyDecrypt、および CreateGrant オペレーションを呼び出せるようにする許可について考えてみます。被付与者プリンシパルは、このアクセス許可を使用して、GenerateDataKeyDecrypt などの親許可で指定されたオペレーションのサブセットを含む許可を作成できます。ただし、ScheduleKeyDeletionReEncrypt など、他のオペレーションを含めることはできません。

また、子許可の許可の制約は、親許可と同様であるか、それよりも制限が高い必要があります。たとえば、子許可は親許可の EncryptionContextSubset 制約にペアを追加できますが、削除することはできません。子許可は EncryptionContextSubset 制約を EncryptionContextEquals 制約に変更することはできますが、その逆はできません。