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 この目的のために、 は 2 つのセット演算子ForAllValuesForAnyValueおよび を定義します。集合演算子は、それらを必要とする複数値を持つ条件キーでのみ使用します。単一値の条件キーで集合演算子を使用しないでください。ポリシーステートメントは必ず、本稼働環境での使用前に完全にテストしてください。

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

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

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

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

警告

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

kms:EncryptionContext:context-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 を使用する」を参照してください。

kms: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 } } }

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

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 をサポートしています。

kms: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条件演算子を持つポリシーステートメントを使用します。例えば、次のキーポリシーステートメント例では、リクエストの暗号化アルゴリズムが で、RSAKMSキーで使用される非対称暗号化アルゴリズムでない限りRSAES_OAEP_SHA_256、指定された暗号化オペレーションでこのKMSキーをExampleRoleロールを引き受けるプリンシパルが使用することを禁止しています。

ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このようなダブルネガティブのポリシーステートメントは、この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、、GenerateDataKeyPair、、 GenerateDataKeyWithoutPlaintextGenerateDataKeyPairWithoutPlaintextがアクセス許可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:EncryptionContext:context-key を持つ ForAllValues set 演算子を含むポリシーを作成または更新すると、 は次のエラーメッセージ 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キーへのアクセスを拒否することもできます。次のキーポリシーステートメントの例では、リクエストの暗号化コンテキストにStage=Restricted暗号化コンテキストペアが含まれている場合、プリンシパルがKMSキーを使用することを禁止する Deny 効果を使用します。この条件により、他の暗号化コンテキストペアを含むリクエストが許可されます。これには、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:EncryptionContext:context-key 条件キーでForAllValues設定するポリシーステートメントが表示されていました。単一値の条件キーを持つ集合演算子を使用すると、暗号化コンテキストのないリクエストおよび暗号化コンテキストペアが指定されていないリクエストを許可するポリシーとなる可能性があります。

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

ポリシーを確認し、 kms:EncryptionContext:context-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" ] } } }

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

同じキー (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 ポリシー条件を使用します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:EncryptionContext:context-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}" } } }

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

kms: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 } } }

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

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条件キーを使用して、リクエストに 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 } } }

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

kms: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" } } }

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

kms:GrantIsForAWSResource

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

kms:GrantIsForAWSResource

ブール値

単一値

CreateGrant

ListGrants

RevokeGrant

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

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

次のキーポリシーステートメント例では、 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 } } }

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

kms: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 のような他の権限オペレーションを許可する必要があります。

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

kms:GranteePrincipal

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

kms:GranteePrincipal

文字列

単一値

CreateGrant

IAM およびキーポリシー

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

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

次のキーポリシーステートメントの例では、 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" } } }

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

kms: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" } } }

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

kms:KeyOrigin

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

kms:KeyOrigin

文字列

単一値

CreateKey

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

IAM ポリシー

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

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

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

例えば、キーマテリアルが AWS KMS (AWS_KMS) で生成された場合にのみ、キーマテリアルがカスタムKMSキーストア () に関連付けられている AWS CloudHSM クラスターで生成された場合にのみAWS_CLOUDHSM、またはキーマテリアルが外部ソースからインポートされた場合にのみ、キーを作成できます ()EXTERNALAWS 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" } } }

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

kms: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" } } }

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

kms:KeyUsage

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

kms:KeyUsage

文字列

単一値

CreateKey

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

IAM ポリシー

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

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

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

例えば、 が の場合にのみKMSキーを作成できENCRYPT_DECRYPTKeyUsageKeyUsageの場合にのみユーザーアクセス許可を拒否できます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" } } }

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

kms:MacAlgorithm

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

kms:MacAlgorithm

文字列

単一値

GenerateMac

VerifyMac

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

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

次のキーポリシー例では、 testers ロールを引き受けることができるユーザーが HMACKMSキーを使用してHMACタグを生成および検証できるのは、リクエストのMACアルゴリズムが HMAC_SHA_384または の場合のみです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" } } } ] }

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

kms: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" } } }

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

kms: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 } } }

kms:MultiRegionKeyType

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

kms:MultiRegionKeyType

文字列

単一値

CreateKey

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

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

この条件キーを使用して、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーのみのオペレーションを許可できます。kms:MultiRegionKeyType 条件キーはKMS、キーのMultiRegionKeyTypeプロパティに基づいて、キーに対する AWS KMS オペレーションへのアクセスとCreateKeyオペレーションを制御しますKMS。有効な値は 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 条件キーはその目的で推奨されます。

kms:PrimaryRegion

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

kms:PrimaryRegion

文字列 (リスト)

単一値

UpdatePrimaryRegion

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

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

kms:PrimaryRegion 条件キーは、 PrimaryRegionパラメータの値に基づいてUpdatePrimaryRegionオペレーションへのアクセスを制御します。PrimaryRegion パラメータは、プライマリに昇格するマルチリージョンレプリカキー AWS リージョン の を指定します。条件の値は、 us-east-1 や などの 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" ] } } }

kms: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 } } }

kms: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。エイリアスオペレーションへのアクセスの制御については、エイリアスへのアクセスの制御 を参照してください。

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

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

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

kms:ReplicaRegion

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

kms:ReplicaRegion

文字列 (リスト)

単一値

ReplicateKey

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

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

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

例えば、次のキーポリシーステートメントでは、 kms:ReplicaRegion条件キーを使用して、 ReplicaRegionパラメータの値が指定されたリージョンの 1 つである場合にのみ、プリンシパルが 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 条件キーを使用します。

kms:RetiringPrincipal

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

kms:RetiringPrincipal

文字列 (リスト)

単一値

CreateGrant

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

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

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

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

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

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

kms: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" } } }

kms: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" } } }

kms:SigningAlgorithm

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

kms:SigningAlgorithm

文字列

単一値

Sign

Verify

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

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

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

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

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

kms: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 Clean Rooms ML cleanrooms-ml.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

kms: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" } } }

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

kms: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" } } }

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