許可の使用 - AWS Key Management Service

許可の使用

AWS KMS では、キーポリシーおよび許可という 2 つのアクセスコントロールメカニズムをサポートしています。許可を利用すると、KMS カスタマーマスターキー (CMK) の使用を他の AWS プリンシパルにプログラムにより委任できます。これらを使用してアクセスを許可できますが、拒否することはできません。許可は限定的であり、作成と取り消しが容易であるため、一時的なアクセス許可やより詳細なアクセス許可を付与するためによく使用されます。

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

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

許可を作成する

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

たとえば、次の CreateGrant コマンドは、指定された対称 CMKDecrypt オペレーションを exampleUser が呼び出せる許可を作成します。許可では、RetiringPrincipal パラメータを使用して、許可を無効にできるプリンシパルを指定します。また、リクエスト内の 暗号化コンテキスト"Department": "IT" が含まれている場合にのみアクセス許可を許可する許可制約も含まれます。

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

許可を表示するには、ListGrants オペレーションを使用します。

注記

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

$ 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": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514", "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" ] } ] }

許可は、CMK で kms:RevokeGrant アクセス許可を持っているすべてのユーザーが取り消す(削除する)ことができます。

許可は以下のプリンシパルによって削除することができます。

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

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

  • 被付与者プリンシパル (RetireGrant オペレーションが許可される場合)。

対称 CMK および非対称 CMK の許可

対称 CMK または非対称 CMK へのアクセスを制御する許可を作成できます。ただし、プリンシパルが CMK でサポートされていないオペレーションを実行できるようにする許可を作成することはできません。試した場合、AWS KMS は ValidationError 例外を返します。

対称 CMK

対称 CMK の許可では、SignVerify、または GetPublicKey の各オペレーションを許可できません(レガシーオペレーションの場合、この規則には限定的な例外がありますが、AWS KMS がサポートしないオペレーションには許可を作成しないでください)。

非対称 CMK

非対称 CMK の許可では、データキーまたはデータキーペアを生成するオペレーションは許可されません。また、自動キーローテーションインポートされたキーマテリアル、またはカスタムキーストア内の CMK に関連するオペレーションも許可できません。

キーの使用方法が SIGN_VERIFY である CMK の許可では、暗号化オペレーションを許可できません。キーの使用方法が ENCRYPT_DECRYPT である CMK の許可では、Sign または Verify オペレーションを許可できません。

制約の付与

制約の付与は、被付与者プリンシパルが実行できる権限の条件を設定します。AWS KMS は、2 つのサポートされている制約をサポートしています。どちらの制約も、暗号化オペレーションのリクエストにも暗号化コンテキストが関係しています。

注記

非対称 CMK の許可では、暗号化コンテキスト許可制約を使用できません。AWS KMS が使用する非対称暗号化アルゴリズムは、暗号化コンテキストをサポートしていません。

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

CreateGrant アクセス許可の付与

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

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

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