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 キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列の KMS key の値を探します。などの特定の KMS キーリソースに対して許可されていないオペレーションでこのタイプの条件キーを使用する場合、条件が満たされないためListKeys、アクセス許可は有効ではありません。ListKeys オペレーションの認可に関与する KMS キーリソースおよび KeySpec プロパティはありません。

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

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

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

条件キーは単一値または複数値です。 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 によるセキュリティ警告」を参照してください。

kms:BypassPolicyLockoutSafetyCheck

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

kms:BypassPolicyLockoutSafetyCheck

ブール値

単一値

CreateKey

PutKeyPolicy

IAM ポリシーのみ

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

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

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

{ "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 キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列の KMS key の値を探します。また、カスタムキーストアを管理するオペレーションにも有効です。

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

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

kms: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 (RSA KMS キーで使用される非対称暗号化アルゴリズム) 以外の場合に、ExampleRole ロールを引き受けることができるプリンシパルが、指定された暗号化オペレーションでこの KMS キーを使用することを禁止します。

ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このような二重否定を持つポリシーステートメントは、この 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_DEFAULT でない限り、暗号化オペレーションのサンプルアカウントにある KMS キーへのアクセスを拒否します。を含めるとGenerateDataKeyGenerateDataKeyWithoutPlaintext、、GenerateDataKeyPair、および GenerateDataKeyPairWithoutPlaintextがアクセス許可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

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

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

注記

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

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

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

"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 ユーザーガイドの複数のキーまたは値を持つ条件の作成を参照してください。

注記

このトピックの以前のバージョンでは、kms::EncryptionContextcontext-key 条件キーで ForAnyValueおよび ForAllValues集合演算子を使用するポリシーステートメントが表示されていました。単一値の条件キーを持つ集合演算子を使用すると、暗号化コンテキストのないリクエストおよび暗号化コンテキストペアが指定されていないリクエストを許可するポリシーとなる可能性があります。

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

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

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

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

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

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

特定の暗号化ペアを要求し、他のすべての暗号化コンテキストペアを除外するには、ポリシーステートメントkms: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 または Stage=Production ペアが含まれる場合に、プリンシパルがKMS キーを使用することを禁止します。

同じキー (kms:EncryptionContext:Stage) の複数の値 (RestrictedおよびProduction) は、暗黙的に OR によって接続されます。詳細については、IAM ユーザーガイドEvaluation logic for conditions with multiple keys or values を参照してください。

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

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

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

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

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

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

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

大文字と小文字を区別する暗号化コンテキストキーを要求するには、kms:EncryptionContextKeys 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: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" }

次に、この要件を定義するために、以下の例のようなポリシーステートメントを使用できます。このポリシーステートメントでは、TestTeam ロールに、KMS キーを使用してデータを暗号化および復号するためのアクセス許可を付与します。ただし、そのアクセス許可は、"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

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

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

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

注記

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

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

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

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

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

例えば、このキーポリシーステートメントでは、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 キーを使用する暗号化オペレーションで、暗号化テキスト (任意の暗号化コンテキスト) を要求することもできます。

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

{ "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 パラメータが含まれていて、その値が KEY_MATERIAL_DOES_NOT_EXPIRE の場合にのみ、ユーザーが KMS キーにキーマテリアルをインポートできるようにします。

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

キーポリシーと 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 EBS などの と統合された AWS サービスが、指定されたプリンシパルに代わってこの 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 ユーザーガイド」のARNs」を参照してください。

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

{ "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:KeyOrigin

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

kms:KeyOrigin

文字列

単一値

CreateKey

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

IAM ポリシー

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

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

この条件キーを使用して、リクエストの 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 キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列の KMS 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 キーのみの作成、または HMAC KMS キーのみの作成をユーザーに許可することができます。

以下の 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 キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列の KMS 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_VERIFY、および GENERATE_VERIFY_MAC です。

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

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

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

kms:KeyUsage 条件キーを使用し、オペレーションの KMS キーの KeyUsage プロパティに基づいて、KMS キーを使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは KMS キーリソースオペレーションである必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列の KMS 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オペレーションへのアクセスを制御できます。

以下のキーポリシー例は、リクエスト内の MAC アルゴリズムが HMAC_SHA_384 または HMAC_SHA_512 である場合に限り、HMAC KMS キーを使用して HMAC タグを生成し、検証することを、testers ロールを引き受けることができるユーザーに許可します。このポリシーは、それぞれが独自の条件を持つ 2 つの個別のポリシーステートメントを使用します。単一の条件ステートメント内で複数の 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プロパティに基づいて、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 条件キーを使用することをお勧めします。

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

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 キーを識別するエイリアスに基づいて、暗号化オペレーション (GetPublicKey または DescribeKey) で使用される 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 キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列の KMS key の値を探します。

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

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

注記

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

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

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

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

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

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

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

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

条件の値は、 や などの 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 条件キーを使用します。

kms:RetiringPrincipal

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

kms:RetiringPrincipal

文字列 (リスト)

単一値

CreateGrant

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

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

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

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

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

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

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

{ "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 キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列の KMS key の値を探します。

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

{ "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 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 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
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 for Redis 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 Ledger Database (Amazon QLDB) qldb.AWS_region.amazonaws.com
「Amazon RDS Performance Insights」 rds.AWS_region.amazonaws.com
Amazon Redshift redshift.AWS_region.amazonaws.com
Amazon 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 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" } } }

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