AWS KMS でのポリシー条件の使用 - AWS Key Management Service

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

AWS KMS でのポリシー条件の使用

キーポリシーおよびキーポリシーで条件を指定できます。AWS Identity and Access Managementポリシー (IAM ポリシーへのアクセスを制御するAWS KMSリソースの使用料金を見積もることができます。ポリシーステートメントは、条件が true の場合にのみ有効です。たとえば、特定の日付の後にのみ適用されるポリシーステートメントが必要になる場合があります。また、特定の値が API リクエストに表示されているときにのみ、ポリシーステートメントによるアクセスコントロールが必要になる場合もあります。

条件を指定するには、あらかじめ定義された条件を使用します。条件キー()Conditionを持つポリシーステートメントのIAM 条件ポリシーオペレータ。条件キーは、AWS に一般的に適用されるものや、AWS KMS に固有のものがあります。

AWS グローバル条件キー

AWSdefinesグローバル条件キーすべてのポリシー条件キーです。AWSアクセスコントロールに IAM を使用するサービス。グローバル条件キーを使用して、AWS KMSキーポリシーと IAM ポリシーの各設定を行います。

たとえば、次の設定をaws:PrincipalArnグローバル条件キーを使用すると、リクエスト内のプリンシパルが条件キー値の Amazon リソースネーム(ARN)で表されている場合にのみ、カスタマーマスターキー(CMK)へのアクセスを許可できます。を使用するには属性ベースのアクセスコントロール(ABAC)AWS KMS「」を使用できます。AWS: ResourceTag/tag-keyグローバル条件キーを使用して、特定のタグを持つ CMK へのアクセスを許可します。

AWS KMS は、次のものを除くすべての AWS グローバル条件キーをサポートします。

については、を参照してください。AWSグローバル条件キー (使用可能なリクエストのタイプを含む) については、AWSグローバル条件コンテキストキー()IAM ユーザーガイド。IAM ポリシーでグローバル条件キーを使用する例については、リクエストへのアクセスの制御およびタグキーの制御()IAM ユーザーガイド

以下のトピックでは、IP アドレスと VPC エンドポイントに基づく条件キーを使用するための特別なガイダンスを提供します。

AWS KMS アクセス許可を持つポリシーでの IP アドレス条件の使用

AWS KMS を使用して、統合された AWS サービスでデータを保護できます。ただし、同じポリシーステートメントで、 へのアクセスを許可または拒否する IP アドレス条件の演算子aws:SourceIpまたは AWS KMS 条件キーを指定するときは注意が必要です。たとえば、AWS: へのアクセスを拒否するAWS送信元 IP に基づいての制約事項AWSアクションを指定した IP 範囲からの要求に適用します。

次のシナリオを考えてみます。

  1. 次のようなポリシーをアタッチします。AWS: へのアクセスを拒否するAWS送信元 IP に基づいてIAM ユーザーに送信します。aws:SourceIp 条件キーの値は、ユーザーの会社の IP アドレス範囲に設定します。この IAM ユーザーには、Amazon EBS、Amazon EC2、およびAWS KMS。

  2. ユーザーは、暗号化された EBS ボリュームを EC2 インスタンスにアタッチしようとします。このアクションは、関連するすべてのサービスを使用するためのアクセス権限がユーザーに付与されているにもかかわらず、承認エラーが発生して失敗します。

への要求のため、ステップ 2 は失敗します。AWS KMSボリュームの暗号化されたデータキーの復号化は、Amazon EC2 インフラストラクチャに関連付けられた IP アドレスから送信されます。成功させるには、リクエストは、元のユーザーの IP アドレスからリクエストが送られてこなければなりません。ステップ 1 のポリシーでは、指定されたもの以外の IP アドレスからのすべてのリクエストが明示的に拒否されるため、Amazon EC2 は EBS ボリュームの暗号化されたデータキーを復号化する権限を拒否されます。

また、aws:sourceIPリクエストがから送信されている場合、条件キーは無効です。Amazon VPC エンドポイント。リクエストを AWS KMS VPC エンドポイントなどの VPC エンドポイントに制限するには、aws:sourceVpce または aws:sourceVpc 条件キーを使用します。詳細については、Amazon VPC ユーザーガイドの「VPC エンドポイント - エンドポイントの使用の管理」を参照してください。

AWS KMS アクセス許可を持つポリシーでの VPC エンドポイント条件の使用

AWS KMSAmazon Virtual Private Cloud (Amazon VPC) エンドポイントをサポートしますによって供給されるAWSPrivateLink。以下を使用できます。グローバル条件キーキーポリシーおよび IAM ポリシーを使用して、AWS KMSリクエストが VPC から送信されたとき、または VPC エンドポイントを使用するときに、リソースを返します。詳細については、「」を参照してくださいポリシーステートメントでの VPC エンドポイントの使用

  • aws:SourceVpc は、指定した VPC からのリクエストにアクセスを制限します。

  • aws:SourceVpce は、指定した VPC エンドポイントからのリクエストにアクセスを制限します。

これらの条件キーをキーポリシーステートメントで使用して、AWS KMSCMK を使用すると、不注意にAWSを使用するサービスAWS KMSユーザーに代わって引きます。

IP アドレス条件キーの例のような状況にならないように注意してください。CMK のリクエストを VPC または VPC エンドポイントに制限すると、AWS KMSAmazon S3 や Amazon EBS などの統合サービスから送信すると、失敗する可能性があります。ソースリクエストの最初の送信元が VPC 内または VPC エンドポイントであっても、これは発生することがあります。

AWS KMS 条件キー

AWS KMSには、キーポリシーと IAM ポリシーで使用できる、事前に定義された追加の条件キーのセットが用意されています。これらの条件キーは AWS KMS に固有です。たとえば、次の設定をkms:EncryptionContext:context-key条件キーを使用して、特定の暗号化コンテキストへのアクセスを制御するときにAWS KMS対称カスタマーマスターキー (CMK)。

API オペレーションリクエストの条件

多数AWS KMS条件キーは、CMK へのアクセスを制御します。これは、AWS KMSオペレーション. たとえば、次の設定をkms:CustomerMasterKeySpec条件キーを使用して、CreateKeyの値がのである場合にのみオペレーションするCustomerMasterKeySpecパラメータ内CreateKeyリクエストはRSA_4096

このタイプの条件は、パラメータのデフォルト値を使用する場合など、リクエストにパラメータが表示されない場合でも機能します。たとえば、kms:CustomerMasterKeySpec 条件キーを使用すると、CustomerMasterKeySpec パラメータの値が SYMMETRIC_DEFAULT(デフォルト値)の場合にのみ CreateKey オペレーションを使用できるようになります。この条件では、SYMMETRIC_DEFAULT 値を持つ CustomerMasterKeySpec パラメータを持つリクエストと、CustomerMasterKeySpec パラメータを持たないリクエストが許可されます。

API オペレーションで使用される CMK の条件

ある程度AWS KMS条件キーは、オペレーションで使用される CMK のプロパティに基づいてオペレーションへのアクセスを制御できます。たとえば、 KMS: KeyOrigin 条件を使用すると、CMK のがである場合にのみ、プリンシパルが CMK で GenerateDataKey を呼び出すことができます AWS_KMSOriginこの方法で条件キーを使用できるかどうかを確認するには、条件キーの説明を参照してください。

このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。 ListKeysなど、特定の CMK リソースに対して許可されていない操作でこのタイプの条件キー, を使用すると、条件が満たされないため、アクセス許可は有効になりません。ListKeys オペレーションの承認に関与する CMK リソースはなく、CustomerMasterKeySpec プロパティもありません。

次のトピックでは、ポリシー構文を示すポリシーステートメントの例を含む各 AWS KMS の条件キーを説明します。

条件キーでの set 演算子の使用

ポリシー条件が、リクエスト内のタグセットやポリシー内のタグセットなどの 2 つの値のセットを比較する場合、AWSセットを比較する方法。IAM は、2 つのセット演算子ForAnyValueおよびForAllValuesこの目的のために。セット演算子は複数の値を持つ条件キーそれらを必要とする。セット演算子を使用しないでください単一値条件キー。ポリシーステートメントは、本稼働環境の環境で使用する前に徹底的にテストしてください。

条件キーは単一値または多値のキーです。かどうかを決定するにはAWS KMS条件キーが単一値または多値の場合は、値の型列を条件キーの説明に入力します。

  • 単一値値条件キーは、認可コンテキスト(要求またはリソース)に最大で 1 つの値を持ちます。たとえば、各 API 呼び出しは 1 つの AWS アカウント ,kms:CallerAccountは単一の値の条件キーです。単一値の条件キーで set 演算子を使用しないでください。

  • 複数値値条件キーには、認可コンテキスト(要求またはリソース)に複数の値があります。たとえば、各 CMK に複数のエイリアスを設定できるため、KMS: リソースエイリアス複数の値を持つことができます。複数値の条件キーには、set 演算子が必要です。

単一値条件キーと複数値の条件キーの違いは、ポリシー条件の値の数ではなく、認可コンテキストの値の数によって異なります。

警告

単一値の条件キーで set 演算子を使用すると、過度に許容される (または過度に制限される) ポリシーステートメントを作成できます。集合演算子は、複数値を持つ条件キーでのみ使用してください。

ポリシーを作成または更新する場合、ForAllValuesKMS を使用して set 演算子:EncryptionContext:コンテキストキーまたはaws:RequestTag/tag-key条件キーAWS KMS次のエラーメッセージを返します。

OverlyPermissiveCondition: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified [encryption context or tag] or with an unspecified [encryption context or tag]. To fix, remove ForAllValues.

詳細については、ForAnyValueおよびForAllValues演算子のセットについては、複数のキーと値の使用()IAM ユーザーガイド。使用のリスクの詳細については、「」を参照してください。ForAllValues集合演算子を単一値の条件で使用する場合は、セキュリティ警告-単一の値キーを持つForAllValues()IAM ユーザーガイド

kms:BypassPolicyLockoutSafetyCheck

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:BypassPolicyLockoutSafetyCheck

Boolean

単一値値

CreateKey

PutKeyPolicy

IAM ポリシーのみ

キーポリシーと IAM ポリシー

kms:BypassPolicyLockoutSafetyCheck 条件キーは、リクエストの パラメータの値に基づき、CreateKey オペレーションおよび PutKeyPolicyBypassPolicyLockoutSafetyCheck オペレーションへのアクセスを制御します。

次の IAM ポリシーステートメント例では、 CreateKey リクエストの BypassPolicyLockoutSafetyCheck パラメータの値が true.

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }

IAM ポリシーまたはキーポリシーで kms:BypassPolicyLockoutSafetyCheck 条件キーを使用して、 PutKeyPolicy オペレーションへのアクセスを制御することもできます。次のキーポリシーのポリシーステートメントの例では、CMK のポリシーを変更する際にユーザーがポリシーのロックアウト安全チェックを回避できないようにします。

明示的なDenyの場合、このポリシーステートAllowとのNull 条件演算子リクエストに含まれていない場合にのみ、アクセスを許可するBypassPolicyLockoutSafetyCheckパラメータ。パラメータが使用されていない場合、デフォルト値は false です。バイパスが必要な限定された状況では、ポリシーステートメントの強度がわずかに弱くなると上書きされる場合があります。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }

以下の資料も参照してください。

kms:CallerAccount

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:CallerAccount

文字列

単一値値

CMK リソースオペレーション

カスタムキーストアのオペレーション

キーポリシーと IAM ポリシー

この条件キーを使用して、すべての ID(IAM ユーザーおよびロール)へのアクセスを許可または拒否できます。 AWS アカウント 。キーポリシーでは、Principal 要素を使って、ポリシーステートメントが適用される ID を指定できます。の構文Principal要素では、すべての ID を指定する方法は提供されません AWS アカウント 。しかし、この条件キーを、すべての Principal ID を指定する AWS 要素と組み合わせることによって、これを実現することができます。

これを使用して、任意のCMK リソースオペレーションである。つまり、任意のAWS KMS操作で特定の CMK を使用します。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。また、管理するオペレーションにも有効です。カスタムキーストア

たとえば、次のキーポリシーステートメントは、kms:CallerAccount条件キー。このポリシーステートメントは、AWSAmazon EBS 向けマネージドCMK。これは、Principalすべてを指定する要素AWSIDkms:CallerAccount条件キーを使用して、すべての ID へのアクセスを効果的に許可します。 AWS アカウント 111122223333. これには、追加のAWS KMS条件キー (kms:ViaService) を使用して、Amazon EBS 経由のリクエストのみを許可して、アクセス許可をさらに制限します。詳細については、「kms:ViaService」を参照してください。

{ "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": {"AWS": "*"}, "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "ec2.us-west-2.amazonaws.com" } }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" }

kms:CustomerMasterKeySpec

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:CustomerMasterKeySpec

文字列

単一値値

CreateKey

CMK リソースオペレーション

IAM ポリシー

キーポリシーと IAM ポリシー

kms:CustomerMasterKeySpec 条件キーは、オペレーションによって作成される、またはオペレーションで使用される CMK CustomerMasterKeySpec のプロパティの値に基づいて、オペレーションへのアクセスを制御します。

IAM ポリシーでこの条件キーを使用して、CreateKeyの値に基づいてオペレーションするCustomerMasterKeySpecパラメータ内CreateKeyリクエスト. たとえば、この条件を使用すると、ユーザーが対称 CMK のみを作成、または RSA キーを持つ CMK のみを作成することを許可できます。

以下の IAM ポリシーステートメント例では、 kms:CustomerMasterKeySpec 条件キーを使用して、リクエストのがである場合にのみプリンシパルが CustomerMasterKeySpec CMK を作成できるようにします RSA_4096

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "RSA_4096" } } }

kms:CustomerMasterKeySpec 条件キーを使用して、操作に使用される CMK CustomerMasterKeySpec のプロパティに基づいて CMK を使用または管理する操作へのアクセスを制御することもできます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次の IAM ポリシーでは、プリンシパルは指定した CMK リソース操作の実行を許可しますが、アカウントのシンメトリック CMK のみを許可します。

{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "SYMMETRIC_DEFAULT" } } }

以下の資料も参照してください。

kms:CustomerMasterKeyUsage

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:CustomerMasterKeyUsage

文字列

単一値値

CreateKey

CMK リソースオペレーション

IAM ポリシー

キーポリシーと IAM ポリシー

kms:CustomerMasterKeyUsage 条件キーは、オペレーションによって作成される、またはオペレーションで使用される CMK KeyUsage のプロパティの値に基づいて、オペレーションへのアクセスを制御します。

この条件キーを使用して、CreateKeyの値に基づいてオペレーションするKeyUsageリクエストする。KeyUsage の有効値は、ENCRYPT_DECRYPTSIGN_VERIFY です。

たとえば、KeyUsageENCRYPT_DECRYPT である場合のみユーザーに CMK の作成を許可し、KeyUsageSIGN_VERIFY の場合に、ユーザーアクセス許可を拒否できます。

次の IAM ポリシーステートメントの例では、kms:CustomerMasterKeyUsage 条件キーを使用して、KeyUsageENCRYPT_DECRYPT の場合にのみユーザーが CMK を作成できるようにしています。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "ENCRYPT_DECRYPT" } } }

kms:CustomerMasterKeyUsage 条件キーを使用して、操作に使用される CMK KeyUsage のプロパティに基づいて CMK を使用または管理する操作へのアクセスを制御することもできます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次の IAM ポリシーでは、プリンシパルは指定した CMK リソース操作の実行を許可しますが、署名と検証に使用されるアカウントの CMK のみを許可します。

{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:DescribeKey", "kms:GetPublicKey", "kms:ScheduleKeyDeletion" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "SIGN_VERIFY" } } }

以下の資料も参照してください。

kms:DataKeyPairSpec

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:DataKeyPairSpec

文字列

単一値値

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

キーポリシーと IAM ポリシー

この条件キーを使用して、GenerateDataKeyPairおよびGenerateDataKeyPairWithoutPlaintextの値に基づいて、オペレーションするKeyPairSpecリクエストする。たとえば、特定のタイプのデータキーペアのみを生成することをユーザーに許可できます。

次のキーポリシーステートメントの例では、kms:DataKeyPairSpec 条件キーを使用して、ユーザーが CMK を使用して RSA データキーペアのみを生成できるようにしています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext" ], "Resource": "*", "Condition": { "StringLike": { "kms:DataKeyPairSpec": "RSA*" } } }

以下の資料も参照してください。

kms:EncryptionAlgorithm

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:EncryptionAlgorithm

文字列

単一値値

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

キーポリシーと IAM ポリシー

kms:EncryptionAlgorithm 条件キーを使用して、オペレーションで使用される暗号化アルゴリズムに基づいて暗号化オペレーションへのアクセスを制御できます。 暗号化, 、復号, 化、および 再暗号化 操作の場合、要求の EncryptionAlgorithm パラメーターの値に基づいてアクセスを制御します。データキーとデータキーペアを生成するオペレーションでは、データキーの暗号化に使用される暗号化アルゴリズムに基づいてアクセスを制御します。

この条件キーは、AWS KMS 外の非対称 CMK ペアでパブリックキーを使用した暗号化など、AWS KMS の外部で実行されるオペレーションには影響しません。

リクエスト内の暗号化アルゴリズムパラメータ

ユーザーが CMK で特定の暗号化アルゴリズムのみを使用できるようにするには、Deny 効果と StringNotEquals 条件演算子を含むポリシーステートメントを使用します。たとえば、次のキーポリシーステートメントの例では、リクエストの暗号化アルゴリズムが RSAES_OAEP_SHA_256 でない限り、ExampleRole ロールを引き受けるプリンシパルが、指定された暗号化オペレーションでこの対称 CMK を使用することを禁止しています。

ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このような二重否定を持つポリシーステートメントは、この CMK に対する他のポリシーおよび許可によって、このロールが他の暗号化アルゴリズムを使用することを防止します。-Denyこのキーポリシーステートメントのは、キーポリシーまたは IAM ポリシーよりも優先され、Allowエフェクトに含まれ、この CMK およびそのプリンシパルのすべての許可よりも優先されます。

{ "Sid": "Allow only one encryption algorithm with this asymmetric CMK", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256" } } }

オペレーションに使用される暗号化アルゴリズム

また、 を使用することもできますkms:EncryptionAlgorithm条件キーを使用して、リクエストでアルゴリズムが指定されていない場合でも、オペレーションで使用される暗号化アルゴリズムに基づいてオペレーションへのアクセスを制御します。これにより、要求または禁止することができますSYMMETRIC_DEFAULTアルゴリズムを使用します。これは、デフォルト値であるため、リクエストで指定されていない可能性があります。

この機能を使用すると、kms:EncryptionAlgorithm条件キーを使用して、データキーとデータキーペアを生成するオペレーションへのアクセスを制御します。これらのオペレーションでは、対称 CMK と SYMMETRIC_DEFAULT アルゴリズムのみが使用されます。

たとえば、この IAM ポリシーは、プリンシパルを対称暗号化に制限します。リクエストで指定された、またはオペレーションで使用されている暗号化アルゴリズムが SYMMETRIC_DEFAULT でない限り、暗号化オペレーションのサンプルアカウントにある CMK へのアクセスを拒否します。以下を含むGenerateDataKey*addsGenerateDataKey,GenerateDataKeyWithoutPlaintext,GenerateDataKeyPair, およびGenerateDataKeyPairWithoutPlaintextアクセス許可に変更します。この条件は、常に対称暗号化アルゴリズムを使用するため、これらの操作には影響しません。

{ "Sid": "AllowOnlySymmetricAlgorithm", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } } }

以下の資料も参照してください。

kms:EncryptionContext:コンテキストキー

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:EncryptionContext:context-key

文字列

単一値値

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

キーポリシーと IAM ポリシー

「」を使用できます。kms:EncryptionContext:context-key条件キーを使用して、対称 CMKに基づいて暗号化コンテキストの要求で暗号化オペレーション。暗号化コンテキストペアのキーと値の両方を評価するには、この条件キーを使用します。暗号化コンテキストキーのみを評価したり、キーまたは値にかかわらず、暗号化コンテキストを要求するには、kms:EncryptionContextKeys条件キー。

非対称 CMK を使用して、暗号化オペレーションの暗号化コンテキストを指定することはできません。標準の非対称暗号化アルゴリズムAWS KMSの使用は、暗号化コンテキストをサポートしていません。

kms: EncryptionContext を使用するには、次の手順に従います。コンテキストキー条件キーで置き換えるには、コンテキストキープレースホルダーを暗号化コンテキストキーに置き換えます。Replaceコンテキスト値プレースホルダーを暗号化コンテキスト値で置き換えます。

"kms:EncryptionContext:context-key": "context-value"

たとえば、次の条件キーでは、キーがである暗号化コンテキストを指定します。AppNameであり、値はExampleApp(AppName = ExampleApp).

"kms:EncryptionContext:AppName": "ExampleApp"

これは単一値の条件キー。条件キーのキーは、特定の暗号化コンテキストキー(コンテキストキー). 各 API リクエストに複数の暗号化コンテキストペアを含めることができますが、指定したコンテキストキー設定できる値は 1 つのみです。たとえば、kms:EncryptionContext:Department条件キーは、暗号化コンテキストペアにDepartmentキーと、指定された暗号化コンテキストのペアをDepartmentキーには設定できる値は 1 つのみです。

セット演算子をkms:EncryptionContext:context-key条件キー。ポリシーステートメントをAllowアクションの場合、kms:EncryptionContext:context-key条件キー、およびForAllValuesset 演算子を使用する場合、条件は暗号化コンテキストのない要求と、ポリシー条件で指定されていない暗号化コンテキストペアを持つ要求を許可します。

警告

使用しないForAnyValueまたはForAllValuesセット演算子を、この単一値の条件キーで設定します。これらのセット演算子は、要求する値を必要としないポリシー条件を作成し、禁止する値を許可できます。

ポリシーを作成または更新する場合、ForAllValuesKMS を使用して set 演算子:EncryptionContext:コンテキストキー,AWS KMS次のエラーメッセージを返します。

OverlyPermissiveCondition:EncryptionContext: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified encryption context or with an unspecified encryption context. To fix, remove ForAllValues.

特定の暗号化コンテキストペアを要求するには、kms:EncryptionContext:context-key条件キーをStringEqualsoperator.

次のキーポリシーステートメントの例では、ロールを引き受けることができるプリンシパルに、GenerateDataKeyリクエストの暗号化コンテキストにAppName:ExampleAppペア. 他の暗号化コンテキストのペアも許可されます。

キー名では、大文字と小文字は区別されません。値の大文字と小文字の区別は、条件演算子 (StringEquals。詳細については、「」を参照してください暗号化コンテキスト条件での大文字と小文字の区別

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }

暗号化コンテキストペアを要求し、他のすべての暗号化コンテキストペアを禁止するには、両方の KMS: EncryptionContext を使用します。コンテキストキーおよびkms:EncryptionContextKeysポリシーステートメントに。次のキーポリシーステートメントでは、kms:EncryptionContext:AppName条件をAppName=ExampleApp暗号化コンテキストのペアをリクエストに追加します。また、kms:EncryptionContextKeys条件キーをForAllValues設定演算子のみを許可するAppName暗号化コンテキストキー。

-ForAllValuesset オペレータは、リクエストの暗号化コンテキストキーをAppName。そのファイルにkms:EncryptionContextKeys条件をForAllValuesset 演算子がポリシーステートメントで単独で使用された場合、この set 演算子は暗号化コンテキストのない要求を許可します。ただし、要求に暗号化コンテキストがない場合、kms:EncryptionContext:AppName条件は失敗します。.ForAllValuesset 演算子の詳細については、複数のキーと値の使用()IAM ユーザーガイド

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::712816755609:user/alice" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" }, "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "AppName" ] } } }

また、この条件キーを使用して、特定の操作の CMK へのアクセスを拒否することもできます。次のキーポリシーステートメント例では、Denyリクエストの暗号化コンテキストにが含まれている場合に、プリンシパルに CMK の使用を禁止します。Stage=Restricted暗号化コンテキストペア。この条件により、他の暗号化コンテキストペアを含む要求が許可されます。これには、Stageキーとその他の値 (Stage=Test

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": "Restricted" } } }

複数の暗号化コンテキストペアの使用

複数の暗号化コンテキストペアを要求または禁止できます。また、複数の暗号化コンテキストペアの 1 つを要求することもできます。これらの条件を解釈するために使用されるロジックの詳細については、複数のキーまたは値を持つ条件の作成IAM ユーザーガイド

注記

このトピックの以前のバージョンでは、ForAnyValueおよびForAllValuesKMS を使用して演算子を設定する:EncryptionContext:コンテキストキー条件キー。セット演算子を使用して単一値の条件キーは、暗号化コンテキストのない要求と暗号化コンテキストのペアが指定されていない要求を許可するポリシーになります。

たとえば、ポリシー条件がAllow効果の場合、ForAllValues集合演算子、および"kms:EncryptionContext:Department": "IT"条件キーは暗号化コンテキストを「Department=it」ペアに制限しません。これは、暗号化コンテキストのない要求と、暗号化コンテキストのペアが指定されていない要求を許可します。Stage=Restricted

ポリシーを確認し、KMS: EncryptionContext を使用して任意の条件から set 演算子を排除してください。コンテキストキー。この形式のポリシーを作成または更新しようとすると、OverlyPermissiveCondition例外. このエラーを解決するには、set 演算子を削除します。

複数の暗号化コンテキストのペアを要求するには、同じ条件でペアをリストします。次のキーポリシーステートメントの例では、2 つの暗号化コンテキストペアDepartment=ITおよびProject=Alpha。条件には異なるキー(kms:EncryptionContext:Departmentおよびkms:EncryptionContext:Project)、それらは暗黙的にAND演算子によって接続されます。他の暗号化コンテキストのペアは許可されますが、必須ではありません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT", "kms:EncryptionContext:Project": "Alpha" } } }

1 つの暗号化コンテキストペアまたは別のペアを要求するには、各条件キーを個別のポリシーステートメントに配置します。次のキーポリシー例では、次のキーポリシーが必要です。Department=IT または Project=Alphaのペア、またはその両方です。他の暗号化コンテキストのペアは許可されますが、必須ではありません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Project": "Alpha" } } }

特定の暗号化ペアを要求し、他のすべての暗号化コンテキストペアを除外するには、両方の KMS: EncryptionContext を使用します。コンテキストキーおよびkms:EncryptionContextKeysポリシーステートメントに。次のキーポリシーステートメントは、kms: EncryptionContext を使用していますコンテキストキー両方の暗号化コンテキストを要求する条件Department=IT および Project=Alphaペア. を使用するにはkms:EncryptionContextKeys条件キーをForAllValues設定演算子のみを許可するDepartmentおよびProject暗号化コンテキストキー。

-ForAllValuesset オペレータは、リクエストの暗号化コンテキストキーをDepartmentおよびProject。条件内で単独で使用された場合、この set 演算子は、暗号化コンテキストのない要求を許可しますが、この設定では、KMS: EncryptionContext:コンテキストキーこの状態では失敗します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::712816755609:user/alice" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT", "kms:EncryptionContext:Project": "Alpha" }, "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "Department", "Project" ] } } }

また、複数の暗号化コンテキストペアを禁止することもできます。次のキーポリシーステートメント例では、Denyリクエストの暗号化コンテキストにが含まれている場合に、プリンシパルに CMK の使用を禁止します。Stage=RestrictedまたはStage=Production.pair.

複数の値 (RestrictedおよびProduction)を同じキー(kms:EncryptionContext:Stage)は、暗黙的にORによって接続されています。詳細については、「」を参照してください。複数のキーまたは値を持つ条件の評価ロジック()IAM ユーザーガイド

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": [ "Restricted", "Production" ] } } }

暗号化コンテキスト条件での大文字と小文字の区別

復号オペレーションで指定される暗号化コンテキストは、暗号化オペレーションで指定される暗号化コンテキストに大文字と小文字を区別して完全に一致する必要があります。複数のペアの暗号化コンテキストのペアの順序のみを変更できます。

ただし、ポリシー条件では、条件キーの大文字と小文字は区別されません。条件値の大文字と小文字の区別は、使用する ポリシー条件演算子StringEquals やなど)によって決まります StringEqualsIgnoreCase

したがって、kms:EncryptionContext: プレフィックスと context-key の置換で構成される条件キーでは、大文字と小文字は区別されません。この条件を使用するポリシーでは、条件キーのいずれの要素もチェックされません。値の大文字と小文字の区別 (context-value の置換) は、ポリシー条件演算子によって決まります。

たとえば、次のポリシーステートメントでは、大文字と小文字に関係なく暗号化コンテキストに Appname キーが含まれている場合にオペレーションが許可されます。この StringEquals 条件では、指定時に ExampleApp を大文字にする必要があります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Appname": "ExampleApp" } } }

大文字と小文字を区別する暗号化コンテキストキーを要求するには、kms:EncryptionContextKeys ポリシー条件と、大文字と小文字が区別される条件演算子 (StringEquals など) を使用します。このポリシー条件では、暗号化コンテキストキーがこのポリシー条件の値であるため、大文字と小文字の区別は条件演算子によって決まります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }

暗号化コンテキストキーと値の両方について大文字と小文字を区別する評価を要求するには、kms:EncryptionContextKeysと kms: EncryptionContext:コンテキストキーポリシー条件を 1 つのポリシーステートメントでまとめて指定します 大文字と小文字を区別する条件演算子 (StringEquals) は、常に条件の値に適用されます。暗号化コンテキストキー (AppName) の値です。kms:EncryptionContextKeys条件. 暗号化コンテキスト値 (ExampleApp) は、KMS: 暗号化コンテキストの値です。コンテキストキー条件.

たとえば、次のキーポリシーステートメント例では、StringEquals演算子で大文字と小文字が区別されるため、暗号化コンテキストキーと暗号化コンテキスト値の両方で大文字と小文字が区別されます。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" }, "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }

暗号化コンテキスト条件での変数の使用

暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など別の型を使用する場合、AWS KMS ではリテラル文字列として解釈されます。

"encryptionContext": { "department": "10103.0" }

ただし、kms:EncryptionContext:context-key条件キーにはIAM ポリシー変数。これらのポリシー変数はリクエストの値に基づいて実行時に解決されます。たとえば、aws:CurrentTime はリクエストの時間に解決され、aws:username は呼び出し元のフレンドリ名に解決されます。

これらのポリシー変数を使用し、ポリシーステートメントを作成して、暗号化コンテキストに限定的な情報 (呼び出し元のユーザー名など) を必要とする条件を指定できます。ポリシーステートメントに変数を含めるため、ロールを引き受けることができるすべてのユーザーに同じポリシーステートメントを使用できます。ユーザー別にポリシーステートメントを記述する必要はありません。

ロールを引き受けることができるすべてのユーザーが同じ CMK を使用してデータを暗号化および復号する状況を考えます。ただし、それらのユーザーに自分が暗号化したデータのみの復号を許可するとします。まず、AWS KMS へのすべてのリクエストに、キーが user であり、値が呼び出し元の AWS ユーザー名である暗号化コンテキストを含めることを要件とします。

"encryptionContext": { "user": "bob" }

次に、この要件を定義するために、以下の例のようなポリシーステートメントを使用できます。このポリシーステートメントは、TestTeam ロールに、CMK を使用してデータを暗号化および復号するためのアクセス許可を付与します。ただし、そのアクセス許可は、"user": "<username>" ペアがリクエストの暗号化コンテキストに含まれる場合にのみ有効です。条件では、ユーザー名を表すために p aws:username olicy 変数を使用します。

リクエストが評価されるとき、条件の変数が呼び出し元のユーザー名に置き換えられます。そのため条件では、「bob」には "user": "bob"、「alice」には "user": "alice" の暗号化コンテキストを必須とします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:user": "${aws:username}" } } }

IAM ポリシー変数は、kms:EncryptionContext:context-key条件キー。キーで変数を使用することはできません。

変数に プロバイダ固有のコンテキストキー を使用することもできます。これらのコンテキストキーにより、Web ID フェデレーションを使用して AWS にログインしたユーザーが一意に識別されます。

すべての変数と同様に、これらの変数は、実際の暗号化コンテキストではなく kms:EncryptionContext:context-key ポリシー条件でのみ使用できます。また、条件のキーではなく値でのみ使用できます。

たとえば、以下のキーポリシーステートメントは前のものと似ています。ただし、この条件では、暗号化コンテキストのキーがsubおよび値は、Amazon Cognito ユーザープールにログインしたユーザーを一意に識別します。Amazon Cognito でのユーザーおよびロールの識別について詳しくは、IAM ロール()Amazon Cognito 開発者ガイド

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}" } } }

以下の資料も参照してください。

kms:EncryptionContextKeys

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:EncryptionContextKeys

文字列 (リスト)

複数値値

CreateGrant

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

キーポリシーと IAM ポリシー

「」を使用できます。kms:EncryptionContextKeys条件キーを使用して、対称 CMKに基づいて暗号化コンテキスト暗号化操作の要求で。各暗号化コンテキストペアのキーのみを評価するには、この条件キーを使用します。暗号化コンテキストでキーと値の両方を評価するには、kms:EncryptionContext:context-key条件キー。

非対称 CMK を使用して、暗号化オペレーションの暗号化コンテキストを指定することはできません。標準の非対称暗号化アルゴリズムAWS KMSの使用は、暗号化コンテキストをサポートしていません。

これは複数の値を持つ条件キー。各 API リクエストで複数の暗号化コンテキストペアを指定できます。kms:EncryptionContextKeysは、要求の暗号化コンテキストキーと、ポリシー内の暗号化コンテキストキーのセットを比較します。これらのセットがどのように比較されるかを決定するには、ForAnyValueまたはForAllValuesset 演算子をポリシー条件で使用します。set 演算子の詳細については、「」を参照してください。複数のキーと値の使用IAM ユーザーガイド

  • ForAnyValue: リクエスト内の少なくとも 1 つの暗号化コンテキストキーは、ポリシー条件の暗号化コンテキストキーと一致する必要があります。その他の暗号化コンテキストキーも許可されます。リクエストに暗号化コンテキストが含まれていない場合、条件は満たされません。

  • ForAllValues: リクエスト内のすべての暗号化コンテキストキーは、ポリシー条件の暗号化コンテキストキーと一致する必要があります。この set 演算子は、暗号化コンテキストキーをポリシー条件内のキーに制限します。暗号化コンテキストキーは必要ありませんが、指定されていない暗号化コンテキストキーは禁止されています。

次のキーポリシーステートメント例では、kms:EncryptionContextKeys条件キーをForAnyValueセット演算子。このポリシーステートメントでは、指定されたオペレーションでの CMK の使用を許可します。ただし、リクエストの暗号化コンテキストペアの少なくとも 1 つに、AppNameキーの値に関係なく、

たとえば、このキーポリシーステートメントでは、GenerateDataKey要求を 2 つの暗号化コンテキストペア、AppName=HelperおよびProject=Alpha。これは、最初の暗号化コンテキストペアが条件を満たすためです。のみを持つリクエストProject=Alphaまたは暗号化コンテキストがないと失敗します。

なぜなら、StringEquals条件オペレーションで大文字と小文字が区別されるため、このポリシーステートメントでは、暗号化コンテキストキーのスペルおよび大文字と小文字の区別が必要になります。ただし、キーの大文字と小文字の区別を無視する条件演算子 (StringEqualsIgnoreCase など) を使用できます。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }

また、 を使用することもできますkms:EncryptionContextKeys条件キーを使用して、CMK を使用する暗号化オペレーションで暗号化コンテキスト(暗号化コンテキスト)を要求します。

次のキーポリシーステートメント例では、kms:EncryptionContextKeys条件キーをNull 条件演算子を使用して、API リクエストの暗号化コンテキストが null でない場合にのみ CMK へのアクセスを許可します。この条件では、暗号化コンテキストのキーまたは値はチェックされません。暗号化コンテキストが存在するかどうかだけが検証されます。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContextKeys": false } } }

以下の資料も参照してください。

kms:ExpirationModel

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:ExpirationModel

文字列

単一値値

ImportKeyMaterial

キーポリシーと IAM ポリシー

kms:ExpirationModel 条件キーは、リクエストの ExpirationModel パラメータの値に基づき、ImportKeyMaterial オペレーションへのアクセスを制御します。

ExpirationModel は、インポートされたキーマテリアルの有効期限が切れているかどうかを判断するオプションのパラメータです。有効な値は、KEY_MATERIAL_EXPIRES および KEY_MATERIAL_DOES_NOT_EXPIRE です。KEY_MATERIAL_EXPIRES はデフォルト値です。

有効期限の日付と時刻は、 Validto パラメーターの値によって決まります。ValidTo パラメータの値が ExpirationModel である場合を除き、KEY_MATERIAL_DOES_NOT_EXPIRE パラメータが必要です。また、kms:ValidTo 条件キーを使用して、アクセス条件として特定の有効期限を設定することもできます。

次のキーポリシーステートメント例では、kms:ExpirationModel条件キーを使用して、リクエストにが含まれる場合にのみ、ユーザーによる CMK へのキーマテリアルのインポートを許可します。ExpirationModelパラメータであり、その値はKEY_MATERIAL_DOES_NOT_EXPIRE

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "StringEquals": { "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE" } } }

また、 を使用することもできますkms:ExpirationModel条件キーを使用すると、キーマテリアルの期限が切れた場合にのみ、ユーザーによるキーマテリアルのインポートが可能になります。次のキーポリシーステートメント例では、kms:ExpirationModel条件キーをNull 条件演算子リクエストにが含まれていない場合にのみ、ユーザーがキーマテリアルをインポートできるようにするExpirationModelパラメータ。ExpirationModel デフォルト値はです。KEY_MATERIAL_EXPIRES

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "Null": { "kms:ExpirationModel": true } } }

以下の資料も参照してください。

kms:GrantConstraintType

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:GrantConstraintType

文字列

単一値値

CreateGrant

キーポリシーと IAM ポリシー

この条件キーを使用して、CreateGrant操作の種類に基づいて制約の付与リクエスト内。

許可の作成では、オプションで許可の制約を指定して、特定の暗号化コンテキストが存在する場合のみ、許可によってオペレーションを実行できます。許可の制約には、EncryptionContextEquals またはEncryptionContextSubset の 2 つのタイプがあります。この条件キーを使用して、リクエストにどちらのタイプが含まれているか確認できます。

次のキーポリシーステートメント例では、kms:GrantConstraintType条件キーを使用すると、リクエストにEncryptionContextEquals制約の付与。この例は、キーポリシーのポリシーステートメントを示しています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GrantConstraintType": "EncryptionContextEquals" } } }

以下の資料も参照してください。

kms:GrantIsForAWSResource

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:GrantIsForAWSResource

Boolean

単一値値

CreateGrant

ListGrants

RevokeGrant

キーポリシーと IAM ポリシー

許可または拒否するCreateGrant,ListGrants, またはRevokeGrant操作は、AWSと のサービスとの統合AWS KMSは、ユーザーに代わってオペレーションを呼び出します。このポリシー条件では、ユーザーがこれらの許可操作を直接呼び出すことはできません。

次のキーポリシーステートメント例では、 kms:GrantIsForAWSResource 条件キーを使用しています。許可しますAWSと統合されているサービスAWS KMS(Amazon EBS など) を使用して、指定されたユーザーに代わってこの CMK に許可を作成します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }

以下の資料も参照してください。

kms:GrantOperations

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:GrantOperations

文字列

複数値値

CreateGrant

キーポリシーと IAM ポリシー

この条件キーを使用して、CreateGrant操作に基づいて権限付与操作リクエスト内。たとえば、暗号化へのアクセス権限は委任するが、復号化へのアクセス権限は委任しない許可をユーザーが作成するようにできます。許可の詳細については、「許可する」を参照してください。許可の使用

これは複数の値を持つ条件キーkms:GrantOperationsの許可操作のセットを比較します。CreateGrantリクエストをポリシーの付与操作セットに適用します。これらのセットがどのように比較されるかを決定するには、ForAnyValueまたはForAllValuesset 演算子をポリシー条件で使用します。set 演算子の詳細については、「」を参照してください。複数のキーと値の使用IAM ユーザーガイド

  • ForAnyValue: リクエスト内の少なくとも 1 つの許可操作は、ポリシー条件内の許可操作の 1 つと一致する必要があります。その他の許可オペレーションも許可されます。

  • ForAllValues: リクエスト内のすべての許可操作は、ポリシー条件の許可操作と一致する必要があります。この set 演算子は、許可操作を、ポリシー条件で指定された操作に制限します。これは、任意の許可操作を必要としませんが、それは不特定の許可操作を禁止します。

    ForAllValues は、リクエストに許可操作がない場合にもtrueを返しますが、CreateGrantはそれを許可しません。そのファイルにOperationsパラメーターが見つからないか、NULL 値がある場合、CreateGrantリクエストが失敗します。

次のキーポリシーステートメント例では、kms:GrantOperations条件キーを使用すると、許可オペレーションがEncrypt,ReEncryptToか、または両方となります。許可に他の操作が含まれている場合、CreateGrantリクエストが失敗します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Encrypt", "ReEncryptTo" ] } } }

ポリシー条件の set 演算子をForAnyValueの場合、ポリシーステートメントでは、許可の少なくとも 1 つの許可操作がEncryptまたはReEncryptToなどの他の許可操作を許可しますが、DecryptまたはReEncryptFrom

以下の資料も参照してください。

kms:GranteePrincipal

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:GranteePrincipal

文字列

単一値値

CreateGrant

IAM とキーポリシー

この条件キーを使用して、リクエストの CreateGrant パラメータの値に基づき、GranteePrincipal オペレーションへのアクセスを制御できます。たとえば、CreateGrant リクエストの被付与者プリンシパルが、条件ステートメントで指定されているプリンシパルと一致した場合にのみ、ユーザーによる CMK を使用する許可の作成を許可します。

次のキーポリシーステートメント例では、kms:GranteePrincipal条件キーを使用して、許可の被付与者プリンシパルがの場合にのみ、ユーザーによる CMK の許可の作成を許可します。LimitedAdminRole

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole" } } }

以下の資料も参照してください。

kms:KeyOrigin

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:KeyOrigin

文字列

単一値値

CreateKey

CMK リソースオペレーション

IAM ポリシー

キーポリシーと IAM ポリシー

kms:KeyOrigin 条件キーは、オペレーションによって作成される、またはオペレーションで使用される CMK Origin のプロパティの値に基づいて、オペレーションへのアクセスを制御します。これは、リソース条件または要求条件として機能します。

この条件キーを使用して、CreateKey計算結果の値に基づいてOrigin (オリジン)リクエストする。Origin の有効値は、AWS_KMSAWS_CLOUDHSM、および EXTERNAL です。

たとえば、キーマテリアルがで生成された場合にのみ、ユーザーによる CMK の作成を許可できます。AWS KMS(AWS_KMS)、キーマテリアルがAWS CloudHSMクラスターに関連付けられているカスタムキーストア(AWS_CLOUDHSM)、またはキーマテリアルがインポートされますを外部ソース (EXTERNAL).

次のキーポリシーステートメント例では、kms:KeyOrigin条件キーを使用すると、ユーザーが CMK を作成できるのは、AWS KMSキーマテリアルを作成します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_KMS" } } }

kms:KeyOrigin 条件キーを使用して、操作に使用される CMK Origin のプロパティに基づいて CMK を使用または管理する操作へのアクセスを制御することもできます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次の IAM ポリシーでは、プリンシパルは指定した CMK リソース操作の実行を許可しますが、カスタムキーストアで作成されたアカウントの CMK のみを許可します。

{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_CLOUDHSM" } } }

以下の資料も参照してください。

kms:MessageType

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:MessageType

文字列

単一値値

Sign

Verify

キーポリシーと IAM ポリシー

-kms:MessageType条件キーは、Signおよび検証の値に基づいて、オペレーションするMessageTypeリクエストする。MessageType の有効値は、RAWDIGEST です。

たとえば、次のキーポリシーステートメントでは、kms:MessageType 条件キーを使用して、ユーザーが非対称 CMK を使用してメッセージに署名できますが、メッセージダイジェストは許可しません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringEquals": { "kms:MessageType": "RAW" } } }

以下の資料も参照してください。

KMS: マルチリージョン

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:MultiRegion

Boolean

CreateKey

CMK リソースオペレーション

キーポリシーと IAM ポリシー

この条件キーを使用して、単一リージョンキーでのみオペレーションを許可するか、マルチリージョンキー。-kms:MultiRegion条件キーはアクセスを制御しますAWS KMS操作を CMK で実行し、CreateKey計算結果の値に基づいてMultiRegionCMK のプロパティを使用します。有効な値は、true(マルチリージョン)、false(単一リージョン)。すべての CMK にはMultiRegionプロパティ.

たとえば、次の IAM ポリシーステートメントは、kms:MultiRegion条件キーを使用して、プリンシパルが単一領域キーのみを作成できるようにします。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": { "*" }, "Condition": { "Bool": "kms:MultiRegion": false } }

KMS: マルチリージョンキータイプ

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:MultiRegionKeyType

文字列

CreateKey

CMK リソースオペレーション

キーポリシーと IAM ポリシー

この条件キーを使用すると、マルチリージョンのプライマリキーか、またはマルチリージョンレプリカキー。-kms:MultiRegionKeyType条件キーはアクセスを制御しますAWS KMS操作を CMK およびCreateKey操作に基づいてMultiRegionKeyTypeCMK のプロパティを使用します。有効な値は PRIMARY および REPLICA です。マルチリージョン CMK だけがMultiRegionKeyTypeプロパティ.

通常、使用するkms:MultiRegionKeyType条件キーを使用して、複数の CMK へのアクセスを制御できます。ただし、特定のマルチリージョン CMK はプライマリまたはレプリカに変更する可能性があるため、キーポリシーでこの条件を使用して、特定のマルチリージョン CMK がプライマリキーまたはレプリカキーである場合にのみ操作を許可することができます。

たとえば、次の IAM ポリシーステートメントは、kms:MultiRegionKeyType条件キーを使用して、プリンシパルがキー削除をスケジュールおよびキャンセルできるように、指定した AWS アカウント 。

{ "Effect": "Allow", "Action": [ "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": { "arn:aws:kms:*:111122223333:key/*" }, "Condition": { "StringEquals": "kms:MultiRegionKeyType": "REPLICA" } }

すべてのマルチリージョンキーへのアクセスを許可または拒否するには、両方の値またはkms:MultiRegionKeyType。ただし、KMS: マルチリージョン条件キーを使用することをおすすめします。

KMS: プライマリリージョン

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:PrimaryRegion

文字列 (リスト)

UpdatePrimaryRegion

キーポリシーと IAM ポリシー

この条件キーを使用して、更新プライマリリージョンオペレーション. これらは AWS リージョン を使用して、マルチリージョンのプライマリキーをホストできます。

-kms:PrimaryRegion条件キーは、更新プライマリリージョン計算結果の値に基づいてPrimaryRegionパラメータ。-PrimaryRegionパラメーターは、 AWS リージョン から変換されている CMK のマルチリージョンレプリカキーマルチリージョンの主キー。条件の値は、1 つまたは複数の AWS リージョン 名前、us-east-1またはap-southeast-2、またはリージョン名パターン (eu-*

たとえば、次のキーポリシーステートメントは、kms:PrimaryRegion条件キーを使用して、プリンシパルがマルチリージョン CMK のプライマリリージョンを指定した 4 つのリージョンのいずれかに更新できるようにします。

{ "Effect": "Allow", "Action": "kms:UpdatePrimaryRegion", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Developer" }, "Resource": "*", "Condition": { "StringEquals": { "kms:PrimaryRegion": [ "us-east-1", "us-west-2", "eu-west-3", "ap-southeast-2" ] } } }

kms:ReEncryptOnSameKey

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:ReEncryptOnSameKey

Boolean

単一値値

ReEncrypt

キーポリシーと IAM ポリシー

この条件キーを使用すると、元の 暗号化に使用したものと同じ送信先 CMK がリクエストで指定されているかどうかに基づいて、ReEncrypt オペレーションへのアクセスを制御できます。

たとえば、次のキーポリシーステートメントは、kms:ReEncryptOnSameKey条件キーを使用して、対象の CMK が元の暗号化に使用したものと同じである場合のみ、ユーザーによる再暗号化を許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ReEncrypt*", "Resource": "*", "Condition": { "Bool": { "kms:ReEncryptOnSameKey": true } } }

KMS: 要求エイリアス

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:RequestAlias

文字列 (リスト)

単一値値

暗号化オペレーション

DescribeKey

GetPublicKey

キーポリシーと IAM ポリシー

この条件キーを使用すると、リクエストで CMK を識別するために特定のエイリアスを使用する場合にのみオペレーションを許可できます。-kms:RequestAlias条件キーは、暗号化操作で使用される CMK へのアクセスを制御します。GetPublicKey, またはDescribeKeyに基づいてaliasで、リクエスト内のその CMK を識別します。このポリシー条件は、「」には影響しません。GenerateRandomオペレーションでは CMK またはエイリアスを使用しないため、オペレーションでは CMK またはエイリアスを使用しません)。

この条件は属性ベースのアクセスコントロール(ABAC)AWS KMS。CMK のタグとエイリアスに基づいて CMK へのアクセスを制御できます。タグとエイリアスを使用すると、ポリシーや許可を変更せずに CMK へのアクセスを許可または拒否できます。詳細については、「」を参照してくださいの ABAC の使用AWS KMS

このポリシー条件でエイリアスを指定するには、エイリアス名またはalias/project-alpha、またはエイリアス名パターン (alias/*test*。指定することはできません。エイリアス ARNこの条件キーの値に。

この条件を満たすには、KeyIdパラメーターは、一致するエイリアス名またはエイリアス ARN である必要があります。リクエストが別のキー識別子の場合、が同じ CMK を識別する場合でも、条件を満たすことはありません。

たとえば、次のキーポリシーステートメントでは、プリンシパルにGenerateDataKey操作を CMK で実行します。ただし、これは、KeyIdリクエストするalias/finance-keyまたはエイリアス名を持つエイリアスARN (など)arn:aws:kms:us-west-2:111122223333:alias/finance-key

{ "Sid": "Key policy using a request alias condition", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/developer" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:RequestAlias": "alias/finance-key" } } }

この条件キーを使用して、エイリアスオペレーションへのアクセスを制御することはできません。たとえば、CreateAliasまたはDeleteAlias。エイリアスオペレーションへのアクセスを制御する方法については、エイリアスへのアクセスの制御

KMS: リソースエイリアス

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:ResourceAliases

文字列 (リスト)

複数値値 CMK リソースオペレーション

IAM ポリシーのみ

この条件キーを使用して、CMK へのアクセスを制御するエイリアスCMK に関連付けられている。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

エイリアスは、 AWS アカウント と Region を使用できますが、この条件により、同じリージョン内の複数の CMK へのアクセスを制御できます (StringLike比較演算子)または異なる AWS リージョン 各アカウントの 詳細については、「」を参照してくださいの ABAC の使用AWS KMS

注記

-KMS: リソースエイリアス条件のは、CMK がCMK あたりのエイリアスクォータ. CMK がこのクォータを超えると、kms:ResourceAliases条件の場合、CMK へのアクセスが拒否されます。

このポリシー条件でエイリアスを指定するには、エイリアス名またはalias/project-alpha、またはエイリアス名パターン (alias/*test*。指定することはできません。エイリアス ARNこの条件キーの値に。条件を満たすには、オペレーションで使用される CMK に指定されたエイリアスが指定されている必要があります。CMK がオペレーションのリクエストで識別されるかどうか、またはどのように識別されるかは関係ありません。

これは、CMK に関連付けられたエイリアスのセットとポリシーのエイリアスのセットを比較する複数値を持つ条件キーです。これらのセットがどのように比較されるかを決定するには、ForAnyValueまたはForAllValuesset 演算子をポリシー条件で使用します。set 演算子の詳細については、「」を参照してください。複数のキーと値の使用IAM ユーザーガイド

  • ForAnyValue: CMK に関連付けられた少なくとも 1 つのエイリアスは、ポリシー条件のエイリアスと一致する必要があります。他のエイリアスが許可されます。CMK にエイリアスが設定されていない場合、条件は満たされません。

  • ForAllValues: CMK に関連付けられているすべてのエイリアスは、ポリシーのエイリアスと一致する必要があります。この set 演算子は、CMK に関連付けられたエイリアスをポリシー条件内のエイリアスに制限します。エイリアスを必要としませんが、不特定のエイリアスを禁止します。

たとえば、次の IAM ポリシーステートメントでは、プリンシパルにGenerateDataKeyの任意の CMK に対する AWS アカウント に関連付けられているfinance-keyエイリアス. (影響を受ける CMK のキーポリシーでは、プリンシパルのアカウントでこのポリシーを使用することも許可する必要があります)。CMK に関連付けられている可能性のある多数のエイリアスのいずれかがalias/finance-keyの場合、条件ではForAnyValueセット演算子。

なぜなら、kms:ResourceAliases条件は、要求ではなくリソースに基づいている場合、GenerateDataKeyに関連付けられたすべての CMK に対して成功します。finance-keyエイリアスを使用していても、キー IDまたはキー ARNを使用して CMK を識別します。

{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*", ], "Condition": { "ForAnyValue:StringEquals": { "kms:ResourceAliases": "alias/finance-key" } } }

次の IAM ポリシーステートメントの例では、CMK の有効化と無効化をプリンシパルに許可します。ただし、CMK のすべてのエイリアスに」Test。」 このポリシーステートメントは2つの条件を使用します 条件とForAllValuesset 演算子には、関連付けられたすべてのエイリアスCMKには「Test」が含まれます。条件とForAnyValueset 演算子を使用するには、CMK に「Test」のエイリアスが少なくとも 1 つ必要です。なしでForAnyValue条件の場合、このポリシーステートメントは、エイリアスのない CMK をプリンシパルで使用することを許可していました。

{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:EnableKey", "kms:DisableKey" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": [ { "ForAllValues:StringLike": { "kms:ResourceAliases": "alias/*Test*" } }, { "ForAnyValue:StringLike": { "kms:ResourceAliases": "alias/*Test*" } } ] }

KMS: レプリカロギオン

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:ReplicaRegion

文字列 (リスト)

ReplicateKey

キーポリシーと IAM ポリシー

この条件キーを使用して、 AWS リージョン でプリンシパルが複製できるマルチリージョンキー。-kms:ReplicaRegion条件キーは、レプリケートキー計算結果の値に基づいてレプリカリエギオンリクエストする。このパラメーターは、 AWS リージョン 新しいレプリカキー

条件の値は、1 つまたは複数の AWS リージョン 名前、us-east-1またはap-southeast-2などの名前パターン、eu-*。名前のリストについては AWS リージョン thatAWS KMSサポートの詳細については、AWS Key Management Serviceエンドポイントとクォータ()AWS全般のリファレンス。

たとえば、次のキーポリシーステートメントは、kms:ReplicaRegion条件キーを使用して、プリンシパルがレプリケートキーの値がのである場合にのみオペレーションするReplicaRegionパラメーターは、指定されたリージョンの 1 つです。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Administrator" }, "Action": "kms:ReplicateKey" "Resource": "*", "Condition": { "StringEquals": { "kms:ReplicaRegion": { "us-east-1", "eu-west-3", "ap-southeast-2" } } } }

この条件キーは、レプリケートキーオペレーション. へのアクセスを制御するには更新プライマリリージョンオペレーションで、KMS: プライマリリージョン条件キー。

kms:RetiringPrincipal

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:RetiringPrincipal

文字列 (リスト)

単一値値

CreateGrant

キーポリシーと IAM ポリシー

この条件キーを使用して、CreateGrant計算結果の値に基づいてRetiringPrincipalリクエストする。たとえば、CreateGrant リクエストの RetiringPrincipal が、条件ステートメントの RetiringPrincipal と一致した場合にのみ、ユーザーによる CMK の使用許可の作成を許可します。

次のキーポリシーステートメントの例では、CMK の許可の作成をユーザーに許可します。kms:RetiringPrincipal 条件キーでは、CreateGrant リクエストへのアクセス権限が制限されます。許可の削除プリンシパルは LimitedAdminRole または OpsAdmin ユーザーのどちらかとなります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:RetiringPrincipal": [ "arn:aws:iam::111122223333:role/LimitedAdminRole", "arn:aws:iam::111122223333:user/OpsAdmin" ] } } }

以下の資料も参照してください。

kms:SigningAlgorithm

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:SigningAlgorithm

文字列

単一値値

Sign

Verify

キーポリシーと IAM ポリシー

「」を使用できます。kms:SigningAlgorithm条件キーを使用して、Signおよび検証の値に基づいて、オペレーションするSigningAlgorithmリクエストする。この条件キーは、AWS KMS 以外の非対称 CMK ペアでパブリックキーを使用して署名を検証するなど、AWS KMS 外部で実行されるオペレーションには影響しません 。

次のキーポリシーの例では、リクエストに使用される署名アルゴリズムが RSASSA_PSS アルゴリズム(RSASSA_PSS_SHA512 など)である場合にのみ、testers ロールを引き受けることができるユーザーが CMK を使用してメッセージに署名できるようにします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringLike": { "kms:SigningAlgorithm": "RSASSA_PSS*" } } }

以下の資料も参照してください。

kms:ValidTo

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:ValidTo

タイムスタンプ

単一値値

ImportKeyMaterial

キーポリシーと IAM ポリシー

kms:ValidTo 条件キーは、リクエストの ValidTo パラメータの値に基づき、ImportKeyMaterial オペレーションへのアクセスを制御します。これにより、インポートされたキーマテリアルが失効するタイミングが決まります。この値は、Unix 時間で表現されます。

デフォルトでは、ValidTo パラメータは ImportKeyMaterial リクエストで必要です。ただし、 ExpirationModel パラメーターの値がの場合 KEY_MATERIAL_DOES_NOT_EXPIRE, 、 ValidTo パラメーターは無効です。また、kms:ExpirationModel 条件キーを使用して、ExpirationModel パラメータまたは特定のパラメータの値を要求することもできます。

次のキーポリシーステートメントの例では、キーマテリアルの CMK へのインポートをユーザーに許可します。kms:ValidTo 条件キーは、ImportKeyMaterial リクエストへのアクセス権限を制限します。ここで、ValidTo の値は 1546257599.0 (2018 年 12 月 31 日 午後 11:59:59) 以下となります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "NumericLessThanEquals": { "kms:ValidTo": "1546257599.0" } } }

以下の資料も参照してください。

kms:ViaService

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:ViaService

文字列

単一値値

CMK リソースオペレーション

キーポリシーと IAM ポリシー

kms:ViaService 条件キーは、AWS KMS カスタマーマスターキー (CMK) の使用を、指定の AWS サービスからのリクエストだけに制限します。各 kms:ViaService 条件キーに 1 つ以上のサービスを指定できます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次のキーポリシーステートメントは、kms:ViaService条件キーを使用してカスタマー管理 CMKリクエストが米国西部(オレゴン)リージョンの Amazon EC2 または Amazon RDS から送信された場合にのみ、指定されたアクションに使用されます。ExampleUser

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "rds.us-west-2.amazonaws.com" ] } } }

kms:ViaService 条件キーを使用して、特定のサービスからリクエストされた場合の CMK の使用を拒否することもできます。たとえば、キーポリシーの以下のステートメントは、kms:ViaService 条件キーを使って、AWS Lambda から ExampleUser に代わってリクエストされた場合にカスタマー管理 CMK が Encrypt オペレーションに使用させるのを防ぎます。

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "lambda.us-west-2.amazonaws.com" ] } } }
重要

使用するとkms:ViaService条件キーの場合、サービスは、プリンシパルに代わってリクエストを行います AWS アカウント 。これらのプリンシパルは、次のアクセス許可が必要です。

  • CMK を使用するアクセス権限。プリンシパルの代わりにサービスがカスタマー管理の CMK を使用できるようにするため、プリンシパルは統合されたサービスに権限を付与する必要があります。詳細については、「AWS のサービスで AWS KMS を使用する方法」を参照してください。

  • 統合されたサービスを使用するアクセス権限。AWS KMS と統合される AWS サービスへのアクセスをユーザーに許可する方法の詳細については、統合されるサービスのドキュメントを参照してください。

すべてAWS管理の CMKを使用するkms:ViaService条件キーを使用して、そのキーポリシードキュメントを確認します。この条件は、その CMK を作成したサービスからリクエストされた場合のみ、CMK の使用を許可します。キーポリシーを表示するにはAWSマネージド CMK を使用するには、GetKeyPolicyオペレーション.

kms:ViaService 条件キーは IAM とキーポリシーのステートメントで有効です。指定するサービスは、AWS KMS と統合されていて、kms:ViaService 条件キーをサポートしている必要があります。

kms:ViaService 条件キーをサポートするサービス

以下の表に、AWSと統合されているサービスAWS KMSと、使用をサポートするkms:ViaServiceカスタマー管理 CMK の条件キーを使用します。この表にあるサービスの中には、一部のリージョンで使用できないものもあります。すべての AWS パーティションで、AWS KMS ViaService 名の .amazonaws.com サフィックスを使用します。

注記

このテーブルのすべてのデータを表示するには、水平または垂直にスクロールする必要がある場合があります。

サービス名 AWS KMS ViaService 名
AWS App Runner apprunner.AWS_REGION.amazonaws.com
Amazon AppFlow appFlow.AWS_REGION.amazonaws.com
Amazon アプリケーション移行サービス mgn.AWS_REGION.amazonaws.com
Amazon Athena athena.AWS_REGION.amazonaws.com
AWS Audit Manager 監査マネージャーAWS_REGION.amazonaws.com
Amazon Aurora rds.AWS_region.amazonaws.com
AWS Backup backup.AWS_region.amazonaws.com
AWS CodeArtifact codeArtifact.AWS_REGION.amazonaws.com
Amazon CodeGuru Reviewer codeguru-reviewer.AWS_REGION.amazonaws.com
Amazon Comprehend 理解する。AWS_REGION.amazonaws.com
Amazon Connect connect.AWS_region.amazonaws.com
AWS Database Migration Service (AWS DMS) dms.AWS_region.amazonaws.com
AWS Directory Service directoryservice.AWS_region.amazonaws.com
Amazon DynamoDB dynamodb.aws_region.amazonaws.com
Amazon EC2 Systems Manager (SSM) ssm.AWS_region.amazonaws.com
Amazon Elastic Block Store (Amazon EBS) ec2.AWS_region.amazonaws.com (EBS のみ)
Amazon Elastic Container Registry (Amazon ECR) ECR.AWS_REGION.amazonaws.com
Amazon Elastic File System (Amazon EFS) elasticfilesystem.AWS_region.amazonaws.com
Amazon Elastic Kubernetes Service (Amazon EKS) eks.AWS_REGION.amazonaws.com
Amazon ElastiCache

条件キーの値に両方のViaService 名を含めます。

  • elasticache.AWS_REGION.amazonaws.com

  • dax.AWS_REGION.amazonaws.com

Amazon Elasticsearch Service (Amazon ES) es.AWS_region.amazonaws.com
Amazon FinSpace フィンスペースAWS_REGION.amazonaws.com
Amazon Forecast 予測.AWS_REGION.amazonaws.com
Amazon FSx fsx.AWS_region.amazonaws.com
AWS Glue glue.AWS_region.amazonaws.com
Amazon HealthLake ヘルスレイクAWS_REGION.amazonaws.com
AWS IoT SiteWise iotSiteWise.AWS_REGION.amazonaws.com
Amazon Kendra Kendra.AWS_REGION.amazonaws.com
Amazon Kinesis kinesis.AWS_region.amazonaws.com
Amazon Kinesis Data Firehose Firehose.AWS_REGION.amazonaws.com
Amazon Kinesis Video Streams kinesisvideo.AWS_region.amazonaws.com
AWS Lambda lambda.AWS_region.amazonaws.com
Amazon Lex lex.AWS_region.amazonaws.com
AWS License Manager ライセンスマネージャーAWS_REGION.amazonaws.com
Amazon Lookout for Equipment lookoutequipment.AWS_REGION.amazonaws.com
Amazon Lookout for Metrics ルックアウトメトリックAWS_REGION.amazonaws.com
Amazon Lookout for Vision lookoutvision.AWS_REGION.amazonaws.com
Amazon Managed Blockchain マネージドブロックチェーンAWS_REGION.amazonaws.com
Amazon Managed Streaming for Apache Kafka (Amazon MSK) kafka.AWS_region.amazonaws.com
Amazon Managed Workflows for Apache Airflow (MWAA) 風量。AWS_REGION.amazonaws.com
Amazon Monitron Monitron.AWS_REGION.amazonaws.com
Amazon MQ mq.AWS_REGION.amazonaws.com
Amazon Neptune rds.AWS_region.amazonaws.com
Amazon Nimble Studio 軽快です。AWS_REGION.amazonaws.com
AWS Proton 陽子.AWS_REGION.amazonaws.com
Amazon Quantum Ledger Database (Amazon QLDB) qlDB.AWS_REGION.amazonaws.com
Amazon RDS Performance Insights rds.AWS_region.amazonaws.com
Amazon Redshift redshift.AWS_region.amazonaws.com
Amazon Rekognition rekognition.AWS_REGION.amazonaws.com
Amazon Relational Database Service (Amazon RDS) rds.AWS_region.amazonaws.com
AWS Secrets Manager secretsmanager.AWS_region.amazonaws.com
Amazon Simple Email Service (Amazon SES) ses.AWS_region.amazonaws.com
Amazon Simple Notification Service (Amazon SNS) sns.AWS_region.amazonaws.com
Amazon Simple Queue Service (Amazon SQS) sqs.AWS_region.amazonaws.com
Amazon Simple Storage Service (Amazon S3) s3.AWS_region.amazonaws.com
AWS Snowball importexport.AWS_region.amazonaws.com
AWS Storage Gateway ストレージゲートウェイ。AWS_REGION.amazonaws.com
AWS Systems Manager Incident Manager SSM インシデントAWS_REGION.amazonaws.com
AWS Systems Manager Incident Manager連絡先 SSM コンタクト。AWS_REGION.amazonaws.com
Amazon Timestream タイムストリーム。AWS_REGION.amazonaws.com
Amazon WorkMail workmail.AWS_region.amazonaws.com
Amazon WorkSpaces workspaces.AWS_region.amazonaws.com
AWS X-Ray xray.AWS_region.amazonaws.com

kms:WrappingAlgorithm

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:WrappingAlgorithm

文字列

単一値値

GetParametersForImport

キーポリシーと IAM ポリシー

この条件キーは、GetParametersForImportの値に基づいてオペレーションするWrappingAlgorithmリクエストする。この条件を使用して、インポートプロセス時にプリンシパルが特定のアルゴリズムを使用してキーマテリアルを暗号化するよう要求できます。異なるラップアルゴリズムを指定すると必要なパブリックキーとインポートトークンのリクエストが失敗します。

次のキーポリシーステートメント例では、kms:WrappingAlgorithm条件キーを使用して、サンプルユーザーにGetParametersForImport操作を使用しますが、RSAES_OAEP_SHA_1ラップアルゴリズム. GetParametersForImport リクエストの WrappingAlgorithmRSAES_OAEP_SHA_1 の場合、オペレーションは失敗します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringNotEquals": { "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1" } } }

以下の資料も参照してください。

kms:WrappingKeySpec

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:WrappingKeySpec

文字列

単一値値

GetParametersForImport

キーポリシーと IAM ポリシー

この条件キーは、GetParametersForImport計算結果の値に基づいてWrappingKeySpecリクエストする。この条件を使用して、インポートプロセス時にプリンシパルが特定のタイプのパブリックキーを使用するよう要求できます。リクエストで別のキータイプを指定すると、エラーになります。

WrappingKeySpec パラメータ値の有効な値は RSA_2048 のみであるため、ユーザーによるこの値の使用を無効にすることで、GetParametersForImport オペレーションを効率的に無効にすることができます。

次のポリシーステートメントの例では、kms:WrappingAlgorithm 条件キーを使用してリクエストの WrappingKeySpecRSA_2048 になるようにします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_2048" } } }

以下の資料も参照してください。

AWS KMSの条件キーAWSNitro 飛び地

AWSNitro 飛び地は Amazon EC2 の機能で、分離されたコンピューティング環境を作成できる飛び地を使用して、機密性の高いデータを保護および処理します。AWS KMSは、サポートするための条件キーを提供しますAWSNitro 飛び地. これらの条件キーは、AWS KMS操作は飛び地から始まります。

呼び出すとkms-decrypt,kms-generate-data-key, またはkms-generate-random AWSNitro Enclaves SDKAPI を呼び出すと、これらの API は対応するAWS KMS操作を、署名付きのアテステーションドキュメント飛び地から。署名されたアテステーション文書は、飛び地の身元をAWS KMS。

次の条件キーを使用すると、署名されたアテステーションドキュメントの内容に基づいて、これらのオペレーションのアクセス権限を制限できます。操作を許可する前に、AWS KMSは、認証ドキュメントを、エンクレーブからこれらのAWS KMS条件キー。

KMS: 受信者ステーション:ImageSha384

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:RecipientAttestation:ImageSha384

文字列

単一値値

Decrypt

GenerateDataKey

GenerateRandom

キーポリシーと IAM ポリシー

-kms:RecipientAttestation:ImageSha384条件キーで許可するkms-decrypt,kms-generate-data-key, およびkms-generate-randomリクエストは、リクエスト内の署名付きアテステーションドキュメントからのイメージハッシュが条件キーの値と一致する場合のみ、エンクレーブからのリクエストです。-ImageSha384値は、アテステーションドキュメントの PCR [0] に対応します。この条件キーは、AWSニトロは、飛び地からSDK APIを飛びます。

たとえば、次のキーポリシーステートメントでは、data-processingCMK をkms-decrypt(Decrypt)、kms-generate-data-key(GenerateDataKey)、kms-generate-random(GenerateRandom) オペレーション. -kms:RecipientAttestation:ImageSha384条件キーでは、リクエスト内のアテステーションドキュメントのイメージハッシュ値(PCR [0])が条件内のイメージハッシュ値と一致する場合にのみオペレーションが許可されます。

リクエストにアテステーションドキュメントが含まれていない場合、この条件が満たされないため、アクセス権限は拒否されます。

{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }

KMS: 受信者テスト:PCR <PCR_ID>

AWS KMS 条件キー 条件の種類 値の型 API オペレーション ポリシータイプ

kms:RecipientAttestation:PCR

文字列

単一値値

Decrypt

GenerateDataKey

GenerateRandom

キーポリシーと IAM ポリシー

-kms:RecipientAttestation:PCR<PCR_ID>条件キーで許可するkms-decrypt,kms-generate-data-key, およびkms-generate-randomリクエストは、リクエスト内の署名付きアテステーションドキュメントからのプラットフォーム設定レジスタ(PCR)が条件キーの PCR と一致する場合にのみエンクレーブからのリクエストです。この条件キーは、AWSニトロは、飛び地からSDK APIを飛びます。

PCR 値を指定するには、次の形式を使用します。PCR ID を条件キー名に連結します。PCR 値は、最大 96 バイトの小文字の 16 進文字列である必要があります。

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

たとえば、次の条件キーは PCR [1] の特定の値を指定します。これは、エンクレーブとブートストラッププロセスに使用されるカーネルのハッシュに対応します。

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

次の例のキーポリシーステートメントでは、data-processingCMK をkms-decrypt(Decrypt) オペレーション.

-kms:RecipientAttestation:PCR条件キーを使用すると、リクエスト内の署名付きアテステーションドキュメントの PCR1 値が一致した場合にのみ、オペレーションが許可されます。kms:RecipientAttestation:PCR1値を条件にします。の使用StringEqualsIgnoreCaseポリシー演算子を使用して、PCR 値の大文字と小文字を区別しない比較を要求します。

リクエストにアテステーションドキュメントが含まれていない場合、この条件が満たされないため、アクセス権限は拒否されます。

{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": "kms:Decrypt", "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:PCR1": "0x1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87" } } }