権限の作成 - AWS Key Management Service

権限の作成

権限を作成する前に、権限をカスタマイズするためのオプションを確認します。権限の制約を使用して、権限のアクセス許可を制限することができます。CreateGrant アクセス許可の付与も参照してください。権限から権限を作成する許可を取得したプリンシパルは、作成できる権限が制限されます。

許可の作成

許可を作成するには、 CreateGrant オペレーションを呼び出します。KMS キー、被付与者プリンシパル、許可された権限オペレーションのリストを指定します。オプションの使用停止プリンシパルを指定することもできます。許可をカスタマイズするには、オプションの Constraints パラメータを使用して 許可の制約を定義します。

権限の作成、使用停止、取り消しの際、オペレーションが結果整合性を取得するまで短い遅延が発生することがあります (通常は 5 分未満)。

例えば、次の CreateGrant コマンドは、指定された 対称 KMS キーDecrypt オペレーションを呼び出し、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}

コードが CreateGrant オペレーションを再試行するか、AWS リクエストを自動的に再試行する SDKを使用する場合は、オプションの名前パラメータを使用して、重複権限の作成を防止します。AWS KMS が同じプロパティの権限の CreateGrant リクエストを、名前を含む既存の権限として取得する場合、リクエストは再試行として認識され、新しい権限は作成されません。Name 値を使用して、任意の AWS KMS オペレーションで権限を識別することはできません。

$ aws kms create-grant \ --name IT-1234abcd-exampleUser-decrypt \ --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}

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

権限の制約の使用

権限の制約は、権限が被付与者プリンシパルに付与するアクセス許可の条件を設定します。権限の制約は、キーポリシーまたは IAM ポリシー、条件キーの代わりになります。各権限の制約値には、最大 8 個の暗号化コンテキストペアを含めることができます。各権限の制約の暗号化コンテキスト値は、384 文字を超えることはできません。

AWS KMS では、EncryptionContextEquals および EncryptionContextSubset の 2 つの権限の制約をサポートします。どちらの制約も暗号化オペレーションのリクエストで、暗号化コンテキストの要件を確立します。

暗号化コンテキストの権限の制約は、暗号化コンテキストパラメータを持つ権限オペレーションで使用されるように設計されています。

  • 暗号化コンテキストの制約は、対称暗号化 KMS キーの権限のみで有効です。他の KMS キーを使用する暗号化オペレーションは、暗号化コンテキストをサポートしません。

  • 暗号化コンテキストの制約は、DescribeKey および RetireGrant オペレーションでは無視されます。DescribeKey および RetireGrant には暗号化コンテキストパラメータはありませんが、暗号化コンテキストの制約を持つ権限にこれらのオペレーションを含めることができます。

  • CreateGrant オペレーションの権限で、暗号化コンテキストの制約を使用することができます。暗号化コンテキストの制約では、CreateGrant 許可で作成された任意の権限が、同様に厳密またはより厳密な暗号化コンテキストの制約を持っている必要があります。

AWS KMS は、次の暗号化コンテキストの権限の制約をサポートします。

EncryptionContextEquals

EncryptionContextEquals を使用して、許可されたリクエストの正確な暗号化コンテキストを指定します。

EncryptionContextEquals では、リクエストの暗号化コンテキストペアが、権限の制約の暗号化コンテキストペアと、大文字と小文字の区別で完全に一致することを要求します。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。

例えば、EncryptionContextEquals の権限の制約が "Department": "IT" 暗号化コンテキストペアを要求する場合、権限はリクエストの暗号化コンテキストが完全に "Department": "IT" である場合にのみ、指定されたタイプのリクエストを許可します。

EncryptionContextSubset

EncryptionContextSubset を使用して、リクエストに特定の暗号化コンテキストペアを含めるように要求します。

EncryptionContextSubset では、リクエストに権限の制約 (完全な大文字と小文字を区別する一致) のすべての暗号化コンテキストペアを含むことを要求しますが、リクエストが追加の暗号化コンテキストペアを持っている可能性もあります。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。

例えば、EncryptionContextSubset の権限の制約が、Department=IT の暗号化コンテキストペアを要求する場合、権限はリクエストの暗号化コンテキストが "Department": "IT" の場合、またはリクエストが "Department": "IT","Purpose": "Test" のような他の暗号化コンテキストペアと共に "Department": "IT" を含む場合に、指定されたタイプのリクエストを許可します。

対称暗号化 KMS キーの権限で暗号化コンテキストの制約を指定するには、CreateGrant オペレーションの Constraints パラメータを使用します。このコマンドが作成する許可では、exampleUser復号 オペレーションを呼び出すためのアクセス許可を付与します。ただし、そのアクセス許可は Decrypt リクエストの暗号化コンテキストが、"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 EncryptionContextEquals={Department=IT}

したがって、許可は以下のようになります。exampleUser に付与されるアクセス許可は、Decrypt リクエストが権限の制約で指定された同じ暗号化コンテキストペアを使用する場合にのみ有効です。KMS キーで権限を見つけるには、ListGrants オペレーションを使用します。

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "8c94d1f12f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2", "Operations": [ "Decrypt" ], "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Constraints": { "EncryptionContextEquals": { "Department": "IT" } }, "CreationDate": 1568565290.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole" } ] }

EncryptionContextEquals の権限の制約を満たすために、Decrypt オペレーションのリクエストの暗号化コンテキストは、"Department": "IT" ペアである必要があります。被付与者プリンシパルからの次のようなリクエストは、EncryptionContextEquals の権限の制約を満たします。

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT

権限の制約が EncryptionContextSubset の場合、リクエストの暗号化コンテキストペアは、権限の制約の暗号化コンテキストペアを含む必要がありますが、リクエストは他の暗号化コンテキストペアを含んでいる可能性もあります。次の権限の制約は、リクエスト内の暗号化コンテキストペアの 1 つが "Deparment": "IT" であることを要求します。

"Constraints": { "EncryptionContextSubset": { "Department": "IT" } }

被付与者プリンシパルからの次のリクエストは、この例の EncryptionContextEqual および EncryptionContextSubset の権限の制約両方を満たします

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT

ただし、被付与者プリンシパルからの次のようなリクエストは、EncryptionContextSubset の権限の制約を満たしますが、EncryptionContextEquals の権限の制約は満たしません。

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT,Purpose=Test

AWS のサービスは、多くの場合、AWS アカウント で KMS キーを使用するためのアクセス許可を付与する権限に、暗号化コンテキストの制約を使用します。例えば、Amazon DynamoDB では、次のような権限を使用して、アカウントで DynamoDB の AWS マネージドキー を使用するアクセス許可を取得します。この EncryptionContextSubset 許可の許可制約により、要求内の暗号化コンテキストに "subscriberID": "111122223333""tableName": "Services" ペアが含まれる場合にのみ、許可の許可が有効になります。この権限の制約は、DynamoDB が AWS アカウント の特定のテーブルに対してのみ、指定された KMS キーを使用することを権限が許可することを意味します。

この出力を取得するには、アカウントの DynamoDB の AWS マネージドキー で、ListGrants オペレーションを実行します。

$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321 { "Grants": [ { "Operations": [ "Decrypt", "Encrypt", "GenerateDataKey", "ReEncryptFrom", "ReEncryptTo", "RetireGrant", "DescribeKey" ], "IssuingAccount": "arn:aws:iam::111122223333:root", "Constraints": { "EncryptionContextSubset": { "aws:dynamodb:tableName": "Services", "aws:dynamodb:subscriberId": "111122223333" } }, "CreationDate": 1518567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com", "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com", "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a", "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59" } ] }

CreateGrant アクセス許可の付与

権限には、CreateGrant オペレーションを呼び出す許可を含めることができます。ただし、被付与者プリンシパルCreateGrant を呼び出す許可をポリシーからではなく権限から取得すると、その許可は制限されます。

  • 被付与者プリンシパルは、親権限で一部またはすべてのオペレーションを許可する権限のみを作成できます。

  • 作成された権限の権限の制約は、少なくとも親権限の制約と同じくらい厳密である必要があります。

これらの制限は、CreateGrant 許可をポリシーから取得するプリンシパルには適用されませんが、プリンシパルの許可はポリシー条件によって制限されます。

例えば、被付与者プリンシパルが GenerateDataKeyDecrypt、および CreateGrant オペレーションを呼び出せるようにする許可について考えてみます。CreateGrant 許可、親権限を許可する権限を呼び出します。

# The original grant in a ListGrants response. { "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572216195.0, "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "GenerateDataKey", "Decrypt", "CreateGrant ] "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, } ] }

被付与者プリンシパル、exampleUser はこのアクセス許可を使用して、CreateGrantDecrypt などの元の権限で、指定されたオペレーションのサブセットを含む権限を作成できます。子権限ScheduleKeyDeletion または ReEncrypt などの他のオペレーションを含めることはできません。

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

例えば、被付与者プリンシパルは、親権限から取得した CreateGrant 許可を使用して、次の子権限を作成します。子権限のオペレーションは、親権限のオペレーションのサブセットであり、権限の制約がより限定的です。

# The child grant in a ListGrants response. { "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572249600.0, "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f", "Operations": [ "CreateGrant" "Decrypt" ] "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser", "Constraints": { "EncryptionContextEquals": { "Department": "IT" } }, } ] }

子権限の被付与者プリンシパル、anotherUserCreateGrant 許可を使用して権限を作成できます。ただし、anotherUser が作成した権限は親権限またはサブセット内のオペレーションを含める必要があり、権限の制約は同じか、より厳密である必要があります。