AWS KMS 条件キー - AWS Key Management Service

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

AWS KMS 条件キー

AWS KMS は、キーポリシーおよび IAMポリシーで使用できる一連の条件キーを提供します。これらの条件キーは に固有です AWS KMS。例えば、 kms:EncryptionContext:context-key条件キーを使用して、対称暗号化キーへのアクセスを制御するときに特定の暗号化コンテキストを要求できます。 KMS

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

多くの AWS KMS 条件キーは、 AWS KMS オペレーションのリクエスト内のパラメータの値に基づいてKMSキーへのアクセスを制御します。例えば、 IAMポリシーで kms:KeySpec 条件キーを使用して、CreateKeyリクエストの KeySpecパラメータの値が の場合にのみ CreateKeyオペレーションの使用を許可できますRSA_4096

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

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

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

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

以下のトピックでは、各 AWS KMS 条件キーについて説明し、ポリシー構文を示すポリシーステートメントの例を示します。

条件キーで集合演算子を使用する

ポリシー条件が、リクエスト内のタグのセットとポリシー内のタグのセットなど、2 つの値のセットを比較する場合、セットを比較する AWS 方法を に指示する必要があります。IAM は、この目的のために ForAnyValueForAllValuesの 2 つの集合演算子を定義します。集合演算子は、それらを必要とする複数値を持つ条件キーでのみ使用します。単一値の条件キーで集合演算子を使用しないでください。ポリシーステートメントは必ず、本稼働環境での使用前に完全にテストしてください。

条件キーは単一値または複数値です。 AWS KMS 条件キーが単一値か複数値かを判断するには、条件キーの説明の「値タイプ」列を参照してください。

  • 単一値の条件キーは認可コンテキスト (リクエストまたはリソース) に、最大で 1 つの値を持ちます。例えば、各API呼び出しは 1 つの からしか発信できないため AWS アカウント、kms:CallerAccount は単一の値条件キーです。単一値の条件キーで集合演算子を使用しないでください。

  • 複数値の条件キーでは、認可コンテキスト (リクエストまたはリソース) に複数の値があります。例えば、各KMSキーには複数のエイリアスを含めることができるため、kms:ResourceAliases には複数の値を含めることができます。複数値の条件キーには集合演算子が必要です。

単一値と複数値の条件キーの違いは、ポリシー条件の値の数ではなく、認可コンテキストの値の数であることに注意してください。

警告

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

kms::EncryptionContextcontext-key または aws:RequestTag/tag-key条件キーを持つForAllValues集合演算子を含むポリシーを作成または更新すると、 は次のエラーメッセージ 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集合演算子を使用するリスクについては、「 IAMユーザーガイド」の「単一値のキー ForAllValues を使用したセキュリティ警告」を参照してください。

km:BypassPolicyLockoutSafetyCheck

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

kms:BypassPolicyLockoutSafetyCheck

ブール値

単一値

CreateKey

PutKeyPolicy

IAM ポリシーのみ

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

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

次のIAMポリシーステートメントの例では、 CreateKeyリクエストの BypassPolicyLockoutSafetyCheckパラメータの値が の場合に、ユーザーがKMSキーを作成するアクセス許可を拒否することで、ポリシーのロックアウト安全チェックをバイパスできないようにします。 true.

{ "Effect": "Deny", "Action": [ "kms:CreateKey", "kms:PutKeyPolicy" ], "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } }

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

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

{ "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } }

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

kms:CallerAccount

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

kms:CallerAccount

文字列

単一値

KMS キーリソースオペレーション

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

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

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

これを使用して、任意のKMSキーリソースオペレーション 、つまり特定のKMSキーを使用する AWS KMS オペレーションへのアクセスを制御できます。KMS キーリソースオペレーションを識別するには、アクションとリソーステーブル で、オペレーションの ResourcesKMS keyで の値を探します。また、カスタムキーストアを管理するオペレーションにも有効です。

例えば、次のポリシーステートメントは、kms:CallerAccount 条件キーを使用する方法を示します。このポリシーステートメントは、Amazon の AWS マネージドキー のキーポリシーにありますEBS。すべての AWS ID を指定する Principal要素と kms:CallerAccount条件キーを組み合わせて、 AWS アカウント 111122223333 のすべての ID へのアクセスを効果的に許可します。これには、Amazon 経由で送信されるリクエストのみを許可することで、アクセス許可をさらに制限するための追加の AWS KMS 条件キー (kms:ViaService) が含まれていますEBS。詳細については、「km: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 (廃止)

kms:CustomerMasterKeySpec 条件キーは非推奨です。代わりに、kms:KeySpec 条件キーを使用します。

kms:CustomerMasterKeySpec および kms:KeySpec 条件キーは同じように機能します。名前だけが異なります。kms:KeySpec を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。

kms:CustomerMasterKeyUsage (廃止)

kms:CustomerMasterKeyUsage 条件キーは非推奨です。代わりに、kms:KeyUsage 条件キーを使用します。

kms:CustomerMasterKeyUsage および kms:KeyUsage 条件キーは同じように機能します。名前だけが異なります。kms:KeyUsage を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。

km:DataKeyPairSpec

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

kms:DataKeyPairSpec

文字列

単一値

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

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

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

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

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

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

km:EncryptionAlgorithm

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

kms:EncryptionAlgorithm

文字列

単一値

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

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

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

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

EncryptionAlgorithm リクエストの パラメータ

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

ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このような二重負のポリシーステートメントは、このKMSキーに対する他のポリシーと許可がこのロールに他の暗号化アルゴリズムの使用を許可するのを防ぎます。このキーポリシーステートメントDenyの は、Allow有効なすべてのキーポリシーまたはIAMポリシーよりも優先され、このKMSキーとそのプリンシパルのすべての許可よりも優先されます。

{ "Sid": "Allow only one encryption algorithm with this asymmetric KMS key", "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 条件キーを使用して、データキーとデータキーペアを生成するオペレーションへのアクセスを制御することができます。これらのオペレーションでは、対称暗号化KMSキーとSYMMETRIC_DEFAULTアルゴリズムのみを使用します。

例えば、このIAMポリシーはプリンシパルを対称暗号化に制限します。リクエストで指定された暗号化アルゴリズム、またはオペレーションで使用される暗号化アルゴリズムが SYMMETRIC_ でない限り、暗号化オペレーションのサンプルアカウントのKMSキーへのアクセスを拒否しますDEFAULT。を含めるとGenerateDataKey、、GenerateDataKeyWithoutPlaintextGenerateDataKeyPairGenerateDataKeyPairWithoutPlaintextがアクセス許可GenerateDataKey*に追加されます。この条件は、常に対称暗号化アルゴリズムを使用するため、これらのオペレーションには影響しません。

{ "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:context-key

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

kms:EncryptionContext:context-key

文字列

単一値

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

RetireGrant

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

kms:EncryptionContext:context-key 条件キーを使用して、暗号化オペレーション のリクエストの暗号化コンテキストに基づいて対称暗号化KMSキーへのアクセスを制御できます。 暗号化コンテキスト暗号化コンテキストペアのキーと値の両方を評価するには、この条件キーを使用します。暗号化コンテキストキーのみを評価するか、キーや値に関係なく暗号化コンテキストを要求するには、kms:EncryptionContextKeys 条件キーを使用します。

注記

条件キーの値は、キーポリシーとIAMポリシーの文字ルールに準拠している必要があります。暗号化コンテキストで有効な文字の中には、ポリシーでは有効にならないものもあります。この条件キーは、すべての有効な暗号化コンテキスト値を表現するために使用できない場合があります。キーポリシードキュメントのルールに関する詳細については、「キーポリシー形式」を参照してください。IAM ポリシードキュメントルールの詳細については、「 ユーザーガイド」のIAM「名前の要件IAM」を参照してください。

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

kms:EncryptionContext:context-key 条件キーを使用するには、context-key 暗号化コンテキストキーを持つ プレースホルダー。を置き換える context-value 暗号化コンテキスト値を持つ プレースホルダー。

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

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

"kms:EncryptionContext:AppName": "ExampleApp"

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

kms:EncryptionContext:context-key 条件キーで集合演算子を使用しないでください。ポリシーステートメントを Allow アクションで作成する場合、kms:EncryptionContext:context-key 条件キー、ForAllValues 集合演算子、条件は、暗号化コンテキストのないリクエストと、ポリシー条件で指定されていない暗号化コンテキストペアを持つリクエストを許可します。

警告

この単一値の条件キーで、ForAnyValue または ForAllValues の集合演算子を使用しないでください。これらの集合演算子は、要求する値を必要としないポリシー条件を作成し、禁止する値を許可する可能性があります。

kms::EncryptionContextcontext-key を持つForAllValues集合演算子を含むポリシーを作成または更新すると、 は次のエラーメッセージ 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.

特定の暗号化コンテキストペアを要求するには、StringEquals 演算子を持つ kms:EncryptionContext:context-key 条件キーを使用します。

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

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

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

暗号化コンテキストペアを要求し、他のすべての暗号化コンテキストペアを禁止するには、ポリシーステートメントkms:EncryptionContextKeysで kms:EncryptionContext:context-key と の両方を使用します。次のポリシーステートメントでは、kms:EncryptionContext:AppName 条件キーを使用してリクエストの AppName=ExampleApp 暗号化コンテキストペアを要求します。ForAllValues 集合演算子を持つ kms:EncryptionContextKeys 条件キーを使用して、AppName 暗号化コンテキストキーのみを許可することもできます。

ForAllValues 集合演算子は、リクエストの暗号化コンテキストキーを AppName に制限します。ポリシーステートメントに、ForAllValues 集合演算子を持つ kms:EncryptionContextKeys 条件が単独で使用された場合、この集合演算子は、暗号化コンテキストのないリクエストを許可します。ただし、リクエストに暗号化コンテキストがない場合、kms:EncryptionContext:AppName 条件は失敗します。ForAllValues 集合演算子の詳細については、「 ユーザーガイド」の「複数のキーと値の使用IAM」を参照してください。

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

この条件キーを使用して、特定のオペレーションのKMSキーへのアクセスを拒否することもできます。次のキーポリシーステートメントの例では、 Deny効果を使用して、リクエストの暗号化コンテキストにStage=Restricted暗号化コンテキストペアが含まれている場合にプリンシパルがKMSキーを使用することを禁止しています。この条件により、他の暗号化コンテキストペアを含むリクエストが許可されます。これには、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、kms::EncryptionContextcontext-key 条件キーで演算子ForAllValuesを設定するポリシーステートメントが表示されていました。単一値の条件キーを持つ集合演算子を使用すると、暗号化コンテキストのないリクエストおよび暗号化コンテキストペアが指定されていないリクエストを許可するポリシーとなる可能性があります。

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

ポリシーを確認し、kms::EncryptionContextcontext-key を使用する条件から集合演算子を削除してください。この形式のポリシーを作成または更新しようとすると、OverlyPermissiveCondition の例外を含むエラーが発生します。このエラーを解決するには、集合演算子を削除します。

複数の暗号化コンテキストのペアを要求するには、同じ条件でペアを一覧表示します。次の例のキーポリシーステートメントでは、2 つの暗号化コンテキストペア (Department=IT および Project=Alpha) を要求します。条件には異なるキー (kms:EncryptionContext:Departmentkms: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:EncryptionContextKeysで kms:EncryptionContext:context-key と の両方を使用します。次のキーポリシーステートメントでは、kms:EncryptionContext:context-key 条件を使用して、 Department=IT Project=Alphaペアの両方を持つ暗号化コンテキストを要求します。このコンテキストでは、ForAllValues 集合演算子を持つ kms:EncryptionContextKeys 条件キーを使用して、Department および Project 暗号化コンテキストキーのみを許可します。

ForAllValues 集合演算子は、リクエストの暗号化コンテキストキーを Department Project に制限します。条件内で単独で使用した場合、この集合演算子は暗号化コンテキストのないリクエストを許可しますが、この設定では、この条件の kms:EncryptionContext:context-key は失敗します。

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

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

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

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

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

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

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

そのため、 条件キーは kms:EncryptionContext:プレフィックスと で構成されます。コンテキストキー 置き換え、大文字と小文字は区別されません。この条件を使用するポリシーでは、条件キーのいずれの要素もチェックされません。値の大文字と小文字の区別、つまり、コンテキスト値 置き換えは、ポリシー条件演算子によって決まります。

例えば、次のポリシーステートメントでは、大文字と小文字に関係なく暗号化コンテキストに 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 policy 条件を などの大文字と小文字を区別する条件演算子で使用します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:context-key ポリシー条件を一緒に使用します。大文字と小文字を区別する条件演算子 (StringEquals など) は、常に条件の値に適用されます。暗号化コンテキストキー (AppName など) は kms:EncryptionContextKeys 条件の値です。暗号化コンテキスト値 ( などExampleApp) は、kms::EncryptionContextcontext-key 条件の値です。

例えば、次のキーポリシーステートメントでは、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 は呼び出し元のフレンドリ名に解決されます。

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

ロールを引き受けることができるすべてのユーザーが同じKMSキーを使用してデータを暗号化および復号する場合を考えてみましょう。ただし、それらのユーザーに自分が暗号化したデータのみの復号を許可するとします。まず、すべてのリクエストに、キーが でuser値が発信者の AWS ユーザー名である暗号化コンテキスト AWS KMS を含めるように要求します。例えば、次のようなもの。

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

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

リクエストが評価されるとき、条件の変数が呼び出し元のユーザー名に置き換えられます。そのため条件では、「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条件キーの値でのみ使用できます。キーで変数を使用することはできません。

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

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

例えば、以下のキーポリシーステートメントは前のものと似ています。ただし、この条件には、Amazon Cognito ユーザープールにログインしたユーザーを値が一意に識別する、キーが sub の暗号化コンテキストが必要です。Amazon Cognito でのユーザーとロールの識別の詳細については、Amazon Cognito デベロッパーガイドIAM」の「ロール」を参照してください。

{ "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}" } } }

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

km:EncryptionContextKeys

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

kms:EncryptionContextKeys

文字列 (リスト)

複数値

CreateGrant

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

RetireGrant

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

kms:EncryptionContextKeys 条件キーを使用して、暗号化オペレーションのリクエストの暗号化コンテキストに基づいて対称暗号化KMSキーへのアクセスを制御できます。各暗号化コンテキストペアのキーのみを評価するには、この条件キーを使用します。暗号化コンテキストのキーと値の両方を評価するには、kms:EncryptionContext:context-key 条件キーを使用します。

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

注記

暗号化コンテキストキーを含む条件キー値は、 AWS KMS キーポリシーの文字とエンコーディングルールに準拠している必要があります。この条件キーは、すべての有効な暗号化コンテキストキーを表現するために使用できない場合があります。キーポリシードキュメントのルールに関する詳細については、「キーポリシー形式」を参照してください。IAM ポリシードキュメントルールの詳細については、「 ユーザーガイド」のIAM「名前の要件IAM」を参照してください。

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

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

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

次の例のキーポリシーステートメントでは、ForAnyValue 集合演算子で kms:EncryptionContextKeys 条件キーを使用します。このポリシーステートメントでは、指定されたオペレーションにKMSキーを使用できますが、値に関係なく、リクエスト内の暗号化コンテキストペアの少なくとも 1 つにAppNameキーが含まれている場合にのみ許可されます。

例えば、このキーポリシーステートメントでは、2 つの暗号化コンテキストペア AppName=Helper および Project=Alpha を持つ GenerateDataKey リクエストを許可します。これは、最初の暗号化コンテキストペアが条件を満たすためです。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 条件キーを使用して、キーを使用する暗号化オペレーションで暗号化コンテキスト (任意の暗号化コンテキスト) を要求することもできますKMS。

次のキーポリシーステートメントの例では、Null kms:EncryptionContextKeys条件演算子で 条件キーを使用して、APIリクエストの暗号化コンテキストが null でない場合にのみKMSキーへのアクセスを許可します。 https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Nullこの条件では、暗号化コンテキストのキーまたは値をチェックしません。暗号化コンテキストが存在することだけを検証します。

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

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

km: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条件キーを使用して、リクエストに ExpirationModelパラメータが含まれ、その値が である場合にのみ、ユーザーがキーマテリアルをKMSキーにインポートできるようにしますKEY_MATERIAL_DOES_NOT_EXPIRE

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

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

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

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

km:GrantConstraintType

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

kms:GrantConstraintType

文字列

単一値

CreateGrant

RetireGrant

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

この条件キーを使用して、リクエスト内の許可制約のタイプに基づいて CreateGrantオペレーションへのアクセスを制御できます。

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

重要

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

次のキーポリシーステートメントの例では、kms:GrantConstraintType 条件キーを使用して、リクエストに EncryptionContextEquals 権限の制約が含まれている場合にのみ、ユーザーが権限を作成できるようにします。この例は、キーポリシーのポリシーステートメントを示しています。

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

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

km:GrantIsForAWSResource

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

kms:GrantIsForAWSResource

ブール値

単一値

CreateGrant

ListGrants

RevokeGrant

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

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

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

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

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

km:GrantOperations

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

kms:GrantOperations

文字列

複数値

CreateGrant

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

この条件キーを使用して、リクエストの許可CreateGrantオペレーションに基づいて オペレーションへのアクセスを制御できます。 グラントオペレーション例えば、暗号化へのアクセス権限を委任し、復号化へのアクセス権限を委任しないという許可をユーザーが作成するようにできます。権限の詳細については、権限の使用を参照してください。

これは複数値を持つ条件キーです。kms:GrantOperationsCreateGrant リクエストの権限オペレーションのセットをポリシーの権限オペレーションのセットと比較します。これらのセットを比較する方法を決定するには、ForAnyValue または ForAllValues 集合演算子をポリシー条件で使用します。セット演算子の詳細については、「 ユーザーガイド」の「複数のキーと値の使用IAM」を参照してください。

  • ForAnyValue: リクエストの 1 つ以上の権限オペレーションが、ポリシー条件の権限オペレーションのうちの 1 つと一致する必要があります。その他の権限オペレーションは許可されます。

  • ForAllValues: リクエスト内のすべてのグラントオペレーションは、ポリシー条件のグラントオペレーションと一致する必要があります。この集合演算子は、権限オペレーションをポリシー条件で指定されたオペレーションに制限します。この集合演算子は権限オペレーションを必要としませんが、不特定の権限オペレーションを禁止します。

    ForAllValues は、リクエストに許可オペレーションがない場合にも true を返しますが、許可CreateGrantしません。Operations パラメータが欠落しているか、null 値を持っている場合、CreateGrant リクエストは失敗します。

次のキーポリシーステートメントの例では、kms:GrantOperations 条件キーを使用して、権限オペレーションが EncryptReEncryptTo、または両方の場合にのみ、権限を作成します。権限に他のオペレーションが含まれている場合、CreateGrant リクエストは失敗します。

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

ポリシー条件で集合演算子を ForAnyValue に変更した場合、ポリシーステートメントでは、権限の権限オペレーションの 1 つ以上が Encrypt または ReEncryptTo であっても、Decrypt または ReEncryptFrom のような他の権限オペレーションを許可する必要があります。

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

km:GranteePrincipal

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

kms:GranteePrincipal

文字列

単一値

CreateGrant

IAM およびキーポリシー

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

被付与者プリンシパルを指定するには、プリンシパルの Amazon リソースネーム (ARN) AWS を使用します。有効なプリンシパルには AWS アカウント、、 IAM ユーザー、IAMロール、フェデレーティッドユーザー、引き受けたロールユーザーが含まれます。プリンシパルのARN構文については、「 ユーザーガイドIAMARNs」のIAM「」を参照してください。

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

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

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

km:KeyAgreementAlgorithm

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

kms:KeyAgreementAlgorithm

文字列

単一値

DeriveSharedSecret

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

kms:KeyAgreementAlgorithm 条件キーを使用して、リクエスト内の KeyAgreementAlgorithmパラメータの値に基づいてDeriveSharedSecretオペレーションへのアクセスを制御できます。の唯一の有効な値は KeyAgreementAlgorithmですECDH

例えば、次のキーポリシーステートメントでは、 kms:KeyAgreementAlgorithm条件キーを使用して、 KeyAgreementAlgorithm が で DeriveSharedSecret ない限り、 へのすべてのアクセスを拒否しますECDH

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:DeriveSharedSecret", "Resource": "*", "Condition": { "StringNotEquals": { "kms:KeyAgreementAlgorithm": "ECDH" } } }

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

km:KeyOrigin

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

kms:KeyOrigin

文字列

単一値

CreateKey

KMS キーリソースオペレーション

IAM ポリシー

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

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

この条件キーを使用して、リクエストのオリジンパラメータの値に基づいて CreateKeyオペレーションへのアクセスを制御できます。Origin の有効値は、AWS_KMSAWS_CLOUDHSM、および EXTERNAL です。

例えば、KMSキーマテリアルが AWS KMS (AWS_KMS) で生成されたとき、キーマテリアルがカスタムキーストアに関連付けられた AWS CloudHSM クラスターで生成されたとき ()、またはキーマテリアルが外部ソースからインポートされたとき (AWS_CLOUDHSM) にのみ、キーを作成できますEXTERNALカスタムキーストア キーの AWS KMS キーマテリアルのインポート

次のキーポリシーステートメントの例では、 kms:KeyOrigin条件キーを使用して、 がKMSキーマテリアルを作成する場合にのみキー AWS KMS を作成します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_KMS" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "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:KeyOrigin 条件キーを使用して、オペレーションKMSに使用されるキーの Originプロパティに基づいてKMS、キーを使用または管理するオペレーションへのアクセスを制御することもできます。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して認可されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、アクションとリソーステーブル で、オペレーションの ResourcesKMS keyで の値を探します。

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

{ "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" } } }

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

km:KeySpec

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

kms:KeySpec

文字列

単一値

CreateKey

KMS キーリソースオペレーション

IAM ポリシー

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

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

IAM ポリシーでこの条件キーを使用して、CreateKeyリクエスト内の KeySpecパラメータの値に基づいてCreateKeyオペレーションへのアクセスを制御できます。例えば、この条件を使用して、ユーザーが対称暗号化KMSキーのみを作成したり、HMACKMSキーのみを作成したりすることを許可できます。

次のIAMポリシーステートメントの例では、 kms:KeySpec条件キーを使用して、プリンシパルがRSA非対称KMSキーのみを作成できるようにします。この許可は、リクエスト内の KeySpecRSA_ で始まる場合に限り、有効です。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringLike": { "kms:KeySpec": "RSA_*" } } }

kms:KeySpec 条件キーを使用して、オペレーションKMSに使用されるキーの KeySpecプロパティに基づいてKMS、キーを使用または管理するオペレーションへのアクセスを制御することもできます。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して承認されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、アクションとリソーステーブル で、オペレーションの ResourcesKMS keyで の値を探します。

例えば、次のIAMポリシーでは、プリンシパルが指定されたKMSキーリソースオペレーションを実行することを許可しますが、アカウント内の対称暗号化KMSキーでのみ許可します。

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

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

km:KeyUsage

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

kms:KeyUsage

文字列

単一値

CreateKey

KMS キーリソースオペレーション

IAM ポリシー

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

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

この条件キーを使用して、リクエストの KeyUsageパラメータの値に基づいて CreateKeyオペレーションへのアクセスを制御できます。の有効な値は、ENCRYPT_DECRYPTSIGN_VERIFYGENERATE_VERIFY_MAC、および KeyUsageですKEY_AGREEMENT

例えば、 が の場合にのみKMSキーを作成したり、 KeyUsageKeyUsage の場合にのみユーザーのアクセス許可ENCRYPT_DECRYPTを拒否したりできますSIGN_VERIFY

次のIAMポリシーステートメントの例では、 kms:KeyUsage条件キーを使用して、 KeyUsageが の場合にのみKMSキーを作成しますENCRYPT_DECRYPT

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

また、 kms:KeyUsage条件キーを使用して、 オペレーションでKMSキーの KeyUsageプロパティに基づいてKMSキーを使用または管理するオペレーションへのアクセスを制御することもできます。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して承認されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、アクションとリソーステーブル で、オペレーションの ResourcesKMS keyで の値を探します。

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

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

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

km:MacAlgorithm

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

kms:MacAlgorithm

文字列

単一値

GenerateMac

VerifyMac

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

kms:MacAlgorithm 条件キーを使用して、リクエストの MacAlgorithmパラメータの値に基づいて GenerateMacおよび VerifyMacオペレーションへのアクセスを制御できます。

次のキーポリシーの例では、testersリクエストのMACアルゴリズムが HMAC_SHA_384または の場合にのみ、ロールを引き受けるユーザーがHMACKMSキーを使用してHMACタグを生成および検証することを許可しますHMAC_SHA_512。このポリシーは、それぞれが独自の条件を持つ 2 つの個別のポリシーステートメントを使用します。1 つの条件ステートメントで複数のMACアルゴリズムを指定する場合、条件には、どちらか一方ではなく両方のアルゴリズムが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_384" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_512" } } } ] }

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

km:MessageType

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

kms:MessageType

文字列

単一値

Sign

Verify

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

kms:MessageType 条件キーは、リクエストの MessageType パラメータの値に基づいて、Sign および Verify オペレーションへのアクセスを制御します。MessageType の有効値は、RAWDIGEST です。

例えば、次のキーポリシーステートメントでは、 kms:MessageType条件キーを使用して、メッセージダイジェストではなく、非対称KMSキーを使用してメッセージに署名します。

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

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

km:MultiRegion

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

kms:MultiRegion

ブール値

単一値

CreateKey

KMS キーリソースオペレーション

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

この条件キーを使用すると、単一リージョンキー、またはマルチリージョンキーのみのオペレーションを許可できます。kms:MultiRegion 条件キーは、KMSキーの MultiRegionプロパティの値に基づいて、KMSキーに対する AWS KMS オペレーションと CreateKeyオペレーションへのアクセスを制御します。有効な値は、true (マルチリージョン)、および false (単一リージョン) です。すべてのKMSキーには MultiRegionプロパティがあります。

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

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

km:MultiRegionKeyType

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

kms:MultiRegionKeyType

文字列

単一値

CreateKey

KMS キーリソースオペレーション

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

この条件キーを使用して、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーのみのオペレーションを許可できます。kms:MultiRegionKeyType 条件キーは、KMSキーの MultiRegionKeyTypeプロパティに基づいて、KMSキーに対する AWS KMS オペレーションと CreateKeyオペレーションへのアクセスを制御します。有効な値は PRIMARY および REPLICA です。マルチリージョンキーのみに MultiRegionKeyType プロパティがあります

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

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

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

すべてのマルチリージョンキーへのアクセスを許可または拒否するには、両方の値または kms:MultiRegionKeyType の null 値を使用します。ただし、その目的には kms:MultiRegion 条件キーが推奨されます。

km:PrimaryRegion

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

kms:PrimaryRegion

文字列 (リスト)

単一値

UpdatePrimaryRegion

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

この条件キーを使用して、 UpdatePrimaryRegionオペレーションの送信先リージョンを制限できます。これらは、マルチリージョンのプライマリキーをホスト AWS リージョン できる です。

kms:PrimaryRegion 条件キーは、 PrimaryRegionパラメータの値に基づいて UpdatePrimaryRegionオペレーションへのアクセスを制御します。PrimaryRegion パラメータは、プライマリに昇格するマルチリージョンレプリカキー AWS リージョン の を指定します。条件の値は、 や などの 1 us-east-1 つ以上の AWS リージョン 名前ap-southeast-2、または などのリージョン名パターンです。 eu-*

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

{ "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" ] } } }

km:ReEncryptOnSameKey

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

kms:ReEncryptOnSameKey

ブール値

単一値

ReEncrypt

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

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

例えば、次のキーポリシーステートメントでは、 kms:ReEncryptOnSameKey条件キーを使用して、送信先キーが元の暗号化に使用されたKMSものと同じである場合にのみ再暗号化します。

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

km:RequestAlias

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

kms:RequestAlias

文字列 (リスト)

単一値

暗号化オペレーション

DescribeKey

GetPublicKey

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

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

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

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

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

例えば、次のキーポリシーステートメントでは、プリンシパルがKMSキーに対して GenerateDataKeyオペレーションを呼び出すことを許可します。ただし、これは、リクエストの 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。エイリアスオペレーションへのアクセスの制御については、エイリアスへのアクセスの制御 を参照してください。

km:ResourceAliases

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

kms:ResourceAliases

文字列 (リスト)

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

IAM ポリシーのみ

この条件キーを使用して、KMSキーに関連付けられているエイリアスに基づいてKMSキーへのアクセスを制御します。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して承認されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、アクションとリソーステーブル で、オペレーションの ResourcesKMS keyで の値を探します。

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

エイリアスは AWS アカウント およびリージョンで一意である必要がありますが、この条件により、同じリージョン内の複数のKMSキー (StringLike比較演算子を使用) または AWS リージョン 各アカウントの異なる 内の複数のKMSキーへのアクセスを制御できます。

注記

kms:ResourceAliases 条件は、KMSキーがKMSキークォータあたりのエイリアスに準拠している場合にのみ有効です。KMS キーがこのクォータを超えると、 kms:ResourceAliases条件によってKMSキーの使用が許可されているプリンシパルはKMS、キーへのアクセスを拒否されます。

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

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

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

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

例えば、次のIAMポリシーステートメントでは、プリンシパルがエイリアスに関連付けられている指定された の任意のKMSキーで finance-key GenerateDataKeyオペレーションを呼び出す AWS アカウント ことを許可します。(影響を受けるキーのKMSキーポリシーでは、プリンシパルのアカウントがこのオペレーションでキーを使用できるようにする必要があります)。KMS キーに関連付けられている可能性のある多数のエイリアスの 1 つが である場合に条件が満たされることを示すためにalias/finance-key、条件は ForAnyValue set 演算子を使用します。

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

{ "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ポリシーステートメントの例では、KMSキーのすべてのエイリアスに「」が含まれている場合にのみ、プリンシパルがKMSキーを有効または無効にすることを許可しますTest。 このポリシーステートメントは 2 つの条件を使用します。set ForAllValues演算子の条件では、KMSキーに関連付けられたすべてのエイリアスに「Test」が含まれている必要があります。set ForAnyValue演算子の条件では、KMSキーに「Test」を含むエイリアスが少なくとも 1 つ必要です。ForAnyValue 条件がない場合、このポリシーステートメントはプリンシパルにエイリアスのないKMSキーの使用を許可していました。

{ "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*" ] } } }

km:ReplicaRegion

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

kms:ReplicaRegion

文字列 (リスト)

単一値

ReplicateKey

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

この条件キーを使用して、プリンシパル AWS リージョン がマルチリージョンキー をレプリケートできる を制限できます。kms:ReplicaRegion 条件キーは、リクエスト内の ReplicaRegionパラメータの値に基づいて ReplicateKeyオペレーションへのアクセスを制御します。このパラメータは、 AWS リージョン の新しいレプリカキーを指定します。

条件の値は、 や などの 1 us-east-1 つ以上の AWS リージョン 名前ap-southeast-2、または などの名前パターンですeu-*。が AWS KMS サポート AWS リージョン する の名前のリストについては、「」のAWS Key Management Service 「 エンドポイントとクォータ」を参照してください AWS 全般のリファレンス。

例えば、次のキーポリシーステートメントでは、 kms:ReplicaRegion条件キーを使用して、 ReplicaRegionパラメータの値が指定されたリージョンのいずれかである場合にのみ、プリンシパルが ReplicateKey オペレーションを呼び出すことを許可します。

{ "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" ] } } }

この条件キーは、 ReplicateKeyオペレーションへのアクセスのみを制御します。UpdatePrimaryRegion オペレーションへのアクセスを制御するには、kms:PrimaryRegion 条件キーを使用します。

km:RetiringPrincipal

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

kms:RetiringPrincipal

文字列 (リスト)

単一値

CreateGrant

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

この条件キーを使用して、リクエストの RetiringPrincipalパラメータの値に基づいて CreateGrantオペレーションへのアクセスを制御できます。例えば、CreateGrantリクエストRetiringPrincipalの がRetiringPrincipal条件ステートメントの と一致する場合にのみ、KMSキーを使用する権限を作成できます。

廃止するプリンシパルを指定するには、プリンシパルの Amazon リソースネーム (ARN) AWS を使用します。有効なプリンシパルには AWS アカウント、、IAMユーザー、IAMロール、フェデレーティッドユーザー、引き受けたロールユーザーが含まれます。プリンシパルのARN構文に関するヘルプについては、「 ユーザーガイドIAMARNs」のIAM「」を参照してください。

次のキーポリシーステートメントの例では、ユーザーがKMSキーの許可を作成できるようにします。kms:RetiringPrincipal 条件キーは、グラントの廃止プリンシパルが であるCreateGrantリクエストへのアクセス許可を制限しますLimitedAdminRole

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

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

km:RotationPeriodInDays

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

kms:RotationPeriodInDays

数値

単一値

EnableKeyRotation

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

この条件キーを使用して、プリンシパルがEnableKeyRotationリクエストの RotationPeriodInDaysパラメータで指定できる値を制限できます。

RotationPeriodInDays は、各自動キーローテーション日の間の日数を指定します。 AWS KMS では、90 日から 2560 日までのローテーション期間を指定できますが、kms:RotationPeriodInDays条件キーを使用して、有効な範囲内で最小ローテーション期間を適用するなど、ローテーション期間をさらに制限できます。

例えば、次のキーポリシーステートメントでは、 kms:RotationPeriodInDays条件キーを使用して、ローテーション期間が 180 日以下の場合にプリンシパルがキーローテーションを有効にできないようにします。

{ "Effect": "Deny", "Action": "kms:EnableKeyRotation", "Principal": "*", "Resource": "*", "Condition" : { "NumericLessThanEquals" : { "kms:RotationPeriodInDays" : "180" } } }

km:ScheduleKeyDeletionPendingWindowInDays

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

kms:ScheduleKeyDeletionPendingWindowInDays

数値

単一値

ScheduleKeyDeletion

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

この条件キーを使用して、プリンシパルがScheduleKeyDeletionリクエストの PendingWindowInDaysパラメータで指定できる値を制限できます。

は、キーを削除する前に AWS KMS が待機する日数PendingWindowInDaysを指定します。 AWS KMS では 7~30 日間の待機期間を指定できますが、 kms:ScheduleKeyDeletionPendingWindowInDays条件キーを使用して、有効な範囲内で最小待機期間を適用するなど、待機期間をさらに制限できます。

例えば、次のキーポリシーステートメントでは、kms:ScheduleKeyDeletionPendingWindowInDays 条件キーを使用して、待機期間が 21 日以内の場合にプリンシパルがキーの削除をスケジュールできないようにしています。

{ "Effect": "Deny", "Action": "kms:ScheduleKeyDeletion", "Principal": "*", "Resource": "*", "Condition" : { "NumericLessThanEquals" : { "kms:ScheduleKeyDeletionPendingWindowInDays" : "21" } } }

km:SigningAlgorithm

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

kms:SigningAlgorithm

文字列

単一値

Sign

Verify

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

kms:SigningAlgorithm 条件キーを使用して、リクエスト内の SigningAlgorithmパラメータの値に基づいて、署名および検証オペレーションへのアクセスを制御できます。この条件キーは、 の外部で実行されるオペレーションには影響しません。たとえば AWS KMS、 の外部で非対称キーペアのパブリックKMSキーを使用して署名を検証するなどです AWS KMS。

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

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

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

km:ValidTo

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

kms:ValidTo

タイムスタンプ

単一値

ImportKeyMaterial

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

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

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

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

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

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

km:ViaService

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

kms:ViaService

文字列

単一値

KMS キーリソースオペレーション

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

kms:ViaService 条件キーは、 KMSキーの使用を、指定された AWS サービスからのリクエストに制限します。各 kms:ViaService 条件キーに 1 つ以上のサービスを指定できます。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して認可されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、アクションとリソーステーブル で、オペレーションの ResourcesKMS keyで の値を探します。

例えば、次のキーポリシーステートメントでは、 kms:ViaService条件キーを使用して、リクエストが に代わって米国西部 (オレゴン) リージョンRDSの Amazon EC2または Amazon から送信された場合にのみ、指定されたアクションにカスタマーマネージドキーを使用できるようにしますExampleRole

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "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 条件キーを使用して、リクエストが特定のサービスから送信されたときにKMSキーを使用するアクセス許可を拒否することもできます。例えば、次のキーポリシーからのポリシーステートメントでは kms:ViaService 条件キーを使用して、ExampleRole の代わりに AWS Lambda からリクエストが送信された場合に、カスタマーマネージドキーが Encrypt オペレーションに使用されるのを防ぎます。

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

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

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

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

すべての AWS マネージドキー は、キーポリシードキュメントで kms:ViaService 条件キーを使用します。この条件により、KMSキーを作成したサービスからのリクエストにのみKMSキーを使用できます。のキーポリシーを表示するには AWS マネージドキー、 GetKeyPolicyオペレーションを使用します。

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

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

次の表は、 AWS KMS と統合され、カスタマーマネージドキーで kms:ViaService条件キーの使用をサポートする AWS サービスの一覧です。この表のサービスは、すべてのリージョンで利用できるとは限りません。すべての AWS パーティションで AWS KMS ViaService 名前の.amazonaws.comサフィックスを使用します。

注記

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

サービス名 AWS KMS ViaService 名前
AWS App Runner apprunner.AWS_region.amazonaws.com
AWS AppFabric appfabric.AWS_region.amazonaws.com
Amazon AppFlow appflow.AWS_region.amazonaws.com
AWS Application Migration Service mgn.AWS_region.amazonaws.com
Amazon Athena athena.AWS_region.amazonaws.com
AWS Audit Manager auditmanager.AWS_region.amazonaws.com
Amazon Aurora rds.AWS_region.amazonaws.com
AWS Backup backup.AWS_region.amazonaws.com
AWS Backup ゲートウェイ backup-gateway.AWS_region.amazonaws.com
Amazon Bedrock モデルのコピー bedrock.AWS_region.amazonaws.com
Amazon Chime SDK chimevoiceconnector.AWS_region.amazonaws.com
AWS CodeArtifact codeartifact.AWS_region.amazonaws.com
Amazon CodeGuru Reviewer codeguru-reviewer.AWS_region.amazonaws.com
Amazon Comprehend comprehend.AWS_region.amazonaws.com
Amazon Connect connect.AWS_region.amazonaws.com
Amazon Connect Customer Profiles profile.AWS_region.amazonaws.com
Amazon Q in Connect wisdom.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 DocumentDB docdb-elastic.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 ElastiCache

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

  • elasticache.AWS_region.amazonaws.com

  • dax.AWS_region.amazonaws.com

AWS Elemental MediaTailor mediatailor.AWS_region.amazonaws.com
AWS エンティティ解決 entityresolution.AWS_region.amazonaws.com
Amazon EventBridge events.AWS_region.amazonaws.com
Amazon FinSpace finspace.AWS_region.amazonaws.com
Amazon Forecast forecast.AWS_region.amazonaws.com
Amazon FSx fsx.AWS_region.amazonaws.com
AWS Glue glue.AWS_region.amazonaws.com
AWS Ground Station groundstation.AWS_region.amazonaws.com
Amazon GuardDuty malware-protection.AWS_region.amazonaws.com
AWS HealthLake healthlake.AWS_region.amazonaws.com
AWS IoT SiteWise iotsitewise.AWS_region.amazonaws.com
Amazon Kendra kendra.AWS_region.amazonaws.com
Amazon Keyspaces (Apache Cassandra 向け) cassandra.AWS_region.amazonaws.com
Amazon Kinesis kinesis.AWS_region.amazonaws.com
Amazon 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 license-manager.AWS_region.amazonaws.com
Amazon Location Service geo.AWS_region.amazonaws.com
Amazon Lookout for Equipment lookoutequipment.AWS_region.amazonaws.com
Amazon Lookout for Metrics lookoutmetrics.AWS_region.amazonaws.com
Amazon Lookout for Vision lookoutvision.AWS_region.amazonaws.com
Amazon Macie macie.AWS_region.amazonaws.com
AWS Mainframe Modernization m2.AWS_region.amazonaws.com
AWS Mainframe Modernization アプリケーションテスト apptest.AWS_region.amazonaws.com
Amazon Managed Blockchain managedblockchain.AWS_region.amazonaws.com
Amazon Managed Streaming for Apache Kafka (Amazon MSK) kafka.AWS_region.amazonaws.com
Amazon Managed Workflows for Apache Airflow (MWAA) airflow.AWS_region.amazonaws.com
Amazon MemoryDB memorydb.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 nimble.AWS_region.amazonaws.com
AWS HealthOmics omics.AWS_region.amazonaws.com
Amazon OpenSearch サービス es.AWS_region.amazonaws.com, aoss.AWS_region.amazonaws.com
AWS Proton proton.AWS_region.amazonaws.com
Amazon Quantum 台帳データベース (Amazon QLDB) qldb.AWS_region.amazonaws.com
Amazon RDS Performance Insights rds.AWS_region.amazonaws.com
Amazon Redshift redshift.AWS_region.amazonaws.com
Amazon Redshift クエリエディタ V2 sqlworkbench.AWS_region.amazonaws.com
Amazon Redshift Serverless redshift-serverless.AWS_region.amazonaws.com
Amazon Rekognition rekognition.AWS_region.amazonaws.com
Amazon Relational Database Service (Amazon RDS) rds.AWS_region.amazonaws.com
Amazon 複製データストア ards.AWS_region.amazonaws.com
Amazon SageMaker sagemaker.AWS_region.amazonaws.com
AWS Secrets Manager secretsmanager.AWS_region.amazonaws.com
Amazon Security Lake securitylake.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 Step Functions states.AWS_region.amazonaws.com
AWS Storage Gateway storagegateway.AWS_region.amazonaws.com
AWS Systems Manager Incident Manager ssm-incidents.AWS_region.amazonaws.com
AWS Systems Manager Incident Manager 連絡先 ssm-contacts.AWS_region.amazonaws.com
Amazon Timestream timestream.AWS_region.amazonaws.com
Amazon Translate translate.AWS_region.amazonaws.com
AWS Verified Access verified-access.AWS_region.amazonaws.com
Amazon WorkMail workmail.AWS_region.amazonaws.com
Amazon WorkSpaces workspaces.AWS_region.amazonaws.com
Amazon WorkSpaces シンクライアント thinclient.AWS_region.amazonaws.com
Amazon WorkSpaces Web workspaces-web.AWS_region.amazonaws.com
AWS X-Ray xray.AWS_region.amazonaws.com

km:WrappingAlgorithm

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

kms:WrappingAlgorithm

文字列

単一値

GetParametersForImport

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

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

次のキーポリシーステートメントの例では、kms:WrappingAlgorithm 条件キーを使用して、GetParametersForImport オペレーションを呼び出すアクセス許可をサンプルユーザーに付与しますが、RSAES_OAEP_SHA_1 ラップアルゴリズムの使用を阻止します。WrappingAlgorithm リクエストの GetParametersForImportRSAES_OAEP_SHA_1 の場合、オペレーションは失敗します。

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

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

km:WrappingKeySpec

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

kms:WrappingKeySpec

文字列

単一値

GetParametersForImport

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

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

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

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

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_4096" } } }

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