グラントの作成 - AWS Key Management Service

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

グラントの作成

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

グラントの作成

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

グラントを作成、廃止、または取り消すと、変更が全体で利用可能になるまでに、通常は 5 分未満の短い遅延が発生する場合があります。 AWS KMS。 詳細については、「結果整合性 (許可の場合)」を参照してください。

例えば、次のCreateGrantコマンドは、keyUserRoleロールを引き受ける権限を持つユーザーが、指定された対称KMSキーDecrypt オペレーションを呼び出すことを許可する許可を作成します。グラントでは、RetiringPrincipal パラメータを使用して、グラントを廃止できるプリンシパルを指定します。また、リクエスト内の暗号化コンテキスト"Department": "IT" が含まれている場合にのみアクセス許可を付与する許可制約も含まれます。

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

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

重要

グラント名には、機密情報や重要情報を含めないでください。 CloudTrail ログやその他の出力にはプレーンテキストで表示される場合があります。

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

複数のプログラミング言語で許可を作成する方法を示すコード例については、「」を参照してくださいCreateGrant で を使用する AWS SDK または CLI

グラントの制約の使用

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

重要

このフィールドには、機密情報や重要情報を含めないでください。このフィールドは、 CloudTrail ログやその他の出力でプレーンテキストで表示される場合があります。

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

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

  • 暗号化コンテキストの制約は、対称暗号化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パラメータを使用します。このコマンドが作成する許可では、keyUserRole ロールを引き受ける権限を持つユーザーに、Decrypt オペレーションを呼び出すためのアクセス許可を付与します。ただし、そのアクセス許可は Decrypt リクエストの暗号化コンテキストが、"Department": "IT" 暗号化コンテキストペアである場合にのみ有効です。

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

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

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "Decrypt" ], "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole", "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 サービスでは、多くの場合、 のKMSキーを使用するアクセス許可を付与する許可で暗号化コンテキストの制約を使用します。 AWS アカウント。 例えば、Amazon DynamoDB は次のような許可を使用して、 を使用するアクセス許可を取得します。 AWS マネージドキー アカウントの DynamoDB 用。このグラント内の EncryptionContextSubset のグラントの制約により、要求内の暗号化コンテキストに "subscriberID": "111122223333""tableName": "Services" ペアが含まれる場合にのみ、グラントの許可が有効になります。この許可の制約は、その許可により、DynamoDB が 内の特定のテーブルに対してのみ指定されたKMSキーを使用できるようにすることを意味します。 AWS アカウント.

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

$ 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:role/keyUserRole", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, } ] }

被付与者プリンシパル はexampleUser、このアクセス許可を使用して、 CreateGrantや など、元のグラントで指定されたオペレーションのサブセットを含むグラントを作成できますDecrypt。子グラントに 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": { IAM best practices discourage the use of IAM users with long-term credentials. Whenever possible, use IAM roles, which provide temporary credentials. For details, see Security best practices in IAM in the IAM User Guide. "EncryptionContextEquals": { "Department": "IT" } }, } ] }

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