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

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

グラントの作成

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

グラントの作成

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

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

例えば、次のCreateGrantコマンドは、keyUserRoleロールを引き受ける権限を持つユーザーに、指定された対称KMSキー 復号オペレーションを呼び出す許可を作成します。グラントでは、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 パラメータを使用して、重複するグラントの作成を防ぎます。が、名前を含む既存のグラントと同じプロパティを持つグラントのCreateGrantリクエスト AWS KMS を取得すると、リクエストは再試行として認識され、新しいグラントは作成されません。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}

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

グラントの制約の使用

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

重要

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

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

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

  • 暗号化コンテキストの制約は、対称暗号化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 では、次のようなグラントを使用して、アカウントで DynamoDB の AWS マネージドキー を使用するアクセス許可を取得します。このグラント内の EncryptionContextSubset のグラントの制約により、要求内の暗号化コンテキストに "subscriberID": "111122223333""tableName": "Services" ペアが含まれる場合にのみ、グラントの許可が有効になります。この許可の制約は、DynamoDB が 内の特定のテーブルに対してのみ指定されたKMSキーを使用できるようにすることを意味します AWS アカウント。

この出力を取得するには、アカウントの AWS マネージドキー for DynamoDB で 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:role/keyUserRole", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, } ] }

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

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

IAM ベストプラクティスでは、長期的な認証情報を持つIAMユーザーの使用をお勧めしていません。可能な限り、一時的な認証情報を提供するIAMロールを使用します。詳細については、「 ユーザーガイド」の「 セキュリティのベストプラクティスIAM」を参照してください。 IAM

例えば、被付与者プリンシパルは、親グラントから取得した 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 が作成したグラントは親グラントまたはサブセット内のオペレーションを含める必要があり、グラントの制約は同じか、より厳密である必要があります。