翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS KMS 条件キー
AWS KMS には、キーポリシーと IAM ポリシーで使用できる一連の条件キーが用意されています。これらの条件キーは に固有です AWS KMS。例えば、kms:EncryptionContext:context-key
条件キーは、対称暗号化 KMS キーへのアクセスを制御するときに特定の暗号化コンテキストを要求するために使用できます。
API オペレーションリクエストの条件
多くの AWS KMS 条件キーは、 AWS KMS オペレーションのリクエストのパラメータの値に基づいて KMS キーへのアクセスを制御します。例えば、リクエストの KeySpec
パラメータの値が の場合にのみ CreateKey オペレーションの使用を許可するには、IAM ポリシーで kms:KeySpec CreateKey
条件キーを使用できますRSA_4096
。
このタイプの条件は、パラメータのデフォルト値を使用する場合など、リクエストにパラメータが表示されない場合でも機能します。例えば、kms:KeySpec 条件キーを使用して、 KeySpec
パラメータの値がデフォルト値である の場合にのみSYMMETRIC_DEFAULT
、ユーザーが CreateKey
オペレーションを使用できるようにします。この条件では、SYMMETRIC_DEFAULT
値を持つ KeySpec
パラメータを持つリクエストと、KeySpec
パラメータを持たないリクエストが許可されます。
API オペレーションで使用される KMS キーの条件
一部の AWS KMS 条件キーは、オペレーションで使用される KMS キーのプロパティに基づいて、オペレーションへのアクセスを制御できます。例えば、KMS キーOrigin
の が の場合にのみ、KMS キーGenerateDataKeyでプリンシパルが を呼び出すことを許可する kms:KeyOrigin 条件を使用できます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 を使用したセキュリティ警告」を参照してください。
トピック
- km:BypassPolicyLockoutSafetyCheck
- km:CallerAccount
- kms:CustomerMasterKeySpec (廃止)
- kms:CustomerMasterKeyUsage (廃止)
- km:DataKeyPairSpec
- km:EncryptionAlgorithm
- kms:EncryptionContext:context-key
- km:EncryptionContextKeys
- km:ExpirationModel
- km:GrantConstraintType
- km:GrantIsForAWSResource
- km:GrantOperations
- km:GranteePrincipal
- km:KeyOrigin
- km:KeySpec
- km:KeyUsage
- km:MacAlgorithm
- kms:MessageType
- km:MultiRegion
- km:MultiRegionKeyType
- km:PrimaryRegion
- km:ReEncryptOnSameKey
- km:RequestAlias
- km:ResourceAliases
- km:ReplicaRegion
- km:RetiringPrincipal
- km:RotationPeriodInDays
- km:ScheduleKeyDeletionPendingWindowInDays
- km:SigningAlgorithm
- km:ValidTo
- km:ViaService
- km:WrappingAlgorithm
- km:WrappingKeySpec
km:BypassPolicyLockoutSafetyCheck
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
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 } } }
以下の資料も参照してください。
km:CallerAccount
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
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
) が含まれています。詳細については、「km:ViaService」を参照してください。
{ "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": {"AWS": "*"}, "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "ec2.us-west-2.amazonaws.com" } }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" }
kms:CustomerMasterKeySpec (廃止)
kms:CustomerMasterKeySpec
条件キーは非推奨です。代わりに、kms:KeySpec 条件キーを使用します。
kms:CustomerMasterKeySpec
および kms:KeySpec
条件キーは同じように機能します。名前だけが異なります。kms:KeySpec
を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。
kms:CustomerMasterKeyUsage (廃止)
kms:CustomerMasterKeyUsage
条件キーは非推奨です。代わりに、kms:KeyUsage 条件キーを使用します。
kms:CustomerMasterKeyUsage
および kms:KeyUsage
条件キーは同じように機能します。名前だけが異なります。kms:KeyUsage
を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。
km:DataKeyPairSpec
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:EncryptionAlgorithm
条件キーを使用して、オペレーションで使用される暗号化アルゴリズムに基づいて暗号化オペレーションへのアクセスを制御できます。Encrypt 、Decrypt 、および 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 キーへのアクセスを拒否します。を含めるとGenerateDataKey、、GenerateDataKeyWithoutPlaintext、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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:EncryptionContext:context-key
条件キーを使用して、対称暗号化 KMS キーへのアクセスを、暗号化オペレーションに対するリクエスト内の暗号化コンテキストに基づいて制御することができます。暗号化コンテキストペアのキーと値の両方を評価するには、この条件キーを使用します。暗号化コンテキストキーのみを評価するか、キーや値に関係なく暗号化コンテキストを要求するには、kms:EncryptionContextKeys 条件キーを使用します。
注記
非対称 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 ユーザーガイドの複数のキーまたは値を持つ条件の作成を参照してください。
注記
このトピックの以前のバージョンでは、 を使用しForAnyValue
、kms::EncryptionContextcontext-key 条件キーで演算子ForAllValues
を設定するポリシーステートメントが表示されていました。単一値の条件キーを持つ集合演算子を使用すると、暗号化コンテキストのないリクエストおよび暗号化コンテキストペアが指定されていないリクエストを許可するポリシーとなる可能性があります。
例えば、Allow
効果を持つポリシー条件の場合、ForAllValues
集合演算子および "kms:EncryptionContext:Department": "IT"
条件キーは、暗号化コンテキストを「Department=IT」ペアに制限しません。これは、暗号化コンテキストのないリクエストとおよび暗号化コンテキストのペアが指定されていないリクエストを許可します (Stage=Restricted
など)。
ポリシーを確認し、kms::EncryptionContextcontext-key を使用する条件から集合演算子を削除してください。この形式のポリシーを作成または更新しようとすると、OverlyPermissiveCondition
の例外を含むエラーが発生します。このエラーを解決するには、集合演算子を削除します。
複数の暗号化コンテキストのペアを要求するには、同じ条件でペアを一覧表示します。次の例のキーポリシーステートメントでは、2 つの暗号化コンテキストペア (Department=IT
および Project=Alpha
) を要求します。条件には異なるキー (kms:EncryptionContext: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" ] } } }
暗号化コンテキスト条件での大文字と小文字の区別
復号オペレーションで指定される暗号化コンテキストは、暗号化オペレーションで指定される暗号化コンテキストに大文字と小文字を区別して完全に一致する必要があります。複数のペアの暗号化コンテキストのペアの順序のみを変更できます。
ただし、ポリシー条件では、条件キーの大文字と小文字は区別されません。条件値の大文字と小文字の区別は、使用する ポリシー条件演算子 (StringEquals
や StringEqualsIgnoreCase
など) によって決まります。
したがって、kms:EncryptionContext:
プレフィックスと
の置換で構成される条件キーでは、大文字と小文字は区別されません。この条件を使用するポリシーでは、条件キーのいずれの要素もチェックされません。値の大文字と小文字の区別 (context-key
の置換) は、ポリシー条件演算子によって決まります。context-value
例えば、次のポリシーステートメントでは、大文字と小文字に関係なく暗号化コンテキストに Appname
キーが含まれている場合にオペレーションが許可されます。この StringEquals
条件では、指定時に ExampleApp
を大文字にする必要があります。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Appname": "ExampleApp" } } }
大文字と小文字を区別する暗号化コンテキストキーを要求するには、kms:EncryptionContextKeys 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}" } } }
以下の資料も参照してください。
km:EncryptionContextKeys
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
複数値 |
|
キーポリシーと IAM ポリシー |
kms:EncryptionContextKeys
条件キーを使用することで、暗号化オペレーションに対するリクエスト内の暗号化コンテキストに基づいて対称暗号化 KMS キーへのアクセスを制御することができます。各暗号化コンテキストペアのキーのみを評価するには、この条件キーを使用します。暗号化コンテキストのキーと値の両方を評価するには、kms:EncryptionContext:context-key
条件キーを使用します。
非対称 KMS キーまたは HMAC KMS キーを使用する暗号化オペレーションで暗号化コンテキストを指定することはできません。非対称アルゴリズムと MAC アルゴリズムは、暗号化コンテキストをサポートしません。
注記
これは複数値の条件キーです。各 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 } } }
以下の資料も参照してください。
km:ExpirationModel
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと 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 } } }
以下の資料も参照してください。
km:GrantConstraintType
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、リクエストの許可制約のタイプに基づいて CreateGrantオペレーションへのアクセスを制御できます。
許可の作成では、オプションで許可の制約を指定して、特定の暗号化コンテキストが存在する場合のみ、許可によってオペレーションを実行できます。許可の制約には、EncryptionContextEquals
またはEncryptionContextSubset
の 2 つのタイプがあります。この条件キーを使用して、リクエストにどちらのタイプが含まれているか確認できます。
重要
このフィールドには、機密情報や重要情報を含めないでください。このフィールドは、 CloudTrail ログやその他の出力でプレーンテキストで表示される場合があります。
次のキーポリシーステートメントの例では、kms:GrantConstraintType
条件キーを使用して、リクエストに EncryptionContextEquals
権限の制約が含まれている場合にのみ、ユーザーが権限を作成できるようにします。この例は、キーポリシーのポリシーステートメントを示しています。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GrantConstraintType": "EncryptionContextEquals" } } }
以下の資料も参照してください。
km:GrantIsForAWSResource
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
キーポリシーと IAM ポリシー |
AWS と統合された のサービス AWS KMS
次のキーポリシーステートメント例では、 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 } } }
以下の資料も参照してください。
km:GrantOperations
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
複数値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、リクエストの許可CreateGrantオペレーションに基づいて オペレーションへのアクセスを制御できます。 グラントオペレーション例えば、暗号化へのアクセス権限を委任し、復号化へのアクセス権限を委任しないという許可をユーザーが作成するようにできます。権限の詳細については、権限の使用を参照してください。
これは複数値を持つ条件キーです。kms:GrantOperations
は CreateGrant
リクエストの権限オペレーションのセットをポリシーの権限オペレーションのセットと比較します。これらのセットを比較する方法を決定するには、ForAnyValue
または ForAllValues
集合演算子をポリシー条件で使用します。集合演算子の詳細については、IAM ユーザーガイドの複数のキーと値の使用を参照してください。
-
ForAnyValue
: リクエストの 1 つ以上の権限オペレーションが、ポリシー条件の権限オペレーションのうちの 1 つと一致する必要があります。その他の権限オペレーションは許可されます。 -
ForAllValues: リクエスト内のすべてのグラントオペレーションは、ポリシー条件のグラントオペレーションと一致する必要があります。この集合演算子は、権限オペレーションをポリシー条件で指定されたオペレーションに制限します。この集合演算子は権限オペレーションを必要としませんが、不特定の権限オペレーションを禁止します。
ForAllValues は、リクエストに許可オペレーションがない場合にも true を返しますが、
CreateGrant
許可しません。Operations
パラメータが欠落しているか、null 値を持っている場合、CreateGrant
リクエストは失敗します。
次のキーポリシーステートメントの例では、kms:GrantOperations
条件キーを使用して、権限オペレーションが Encrypt
、ReEncryptTo
、または両方の場合にのみ、権限を作成します。権限に他のオペレーションが含まれている場合、CreateGrant
リクエストは失敗します。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Encrypt", "ReEncryptTo" ] } } }
ポリシー条件で集合演算子を ForAnyValue
に変更した場合、ポリシーステートメントでは、権限の権限オペレーションの 1 つ以上が Encrypt
または ReEncryptTo
であっても、Decrypt
または ReEncryptFrom
のような他の権限オペレーションを許可する必要があります。
以下の資料も参照してください。
km:GranteePrincipal
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
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" } } }
以下の資料も参照してください。
km:KeyOrigin
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースのオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeyOrigin
条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの Origin
プロパティの値に基づいて、オペレーションへのアクセスを制御します。これは、リソース条件または要求条件として機能します。
この条件キーを使用して、リクエストのオリジンパラメータの値に基づいて CreateKeyオペレーションへのアクセスを制御できます。Origin
の有効値は、AWS_KMS
、AWS_CLOUDHSM
、および EXTERNAL
です。
例えば、キーマテリアルが AWS KMS (AWS_KMS
) で生成されたとき、キーマテリアルがカスタムキーストアに関連付けられた AWS CloudHSM クラスターで生成されたとき ()、またはキーマテリアルが外部ソースからインポートされたとき (AWS_CLOUDHSM
) にのみ、KMS キーを作成できます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" } } }
以下の資料も参照してください。
km:KeySpec
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースのオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeySpec
条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの KeySpec
プロパティの値に基づいて、オペレーションへのアクセスを制御します。
この条件キーを IAM ポリシーで使用して、CreateKey
リクエスト内の KeySpecパラメータの値に基づいてCreateKeyオペレーションへのアクセスを制御できます。例えば、この条件を使用して、対称暗号化 KMS キーのみの作成、または HMAC KMS キーのみの作成をユーザーに許可することができます。
以下の IAM ポリシーステートメント例は、kms:KeySpec
条件キーを使用して、RSA 非対称 KMS キーのみの作成をプリンシパルに許可します。この許可は、リクエスト内の KeySpec
が RSA_
で始まる場合に限り、有効です。
{ "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" } } }
以下の資料も参照してください。
km:KeyUsage
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースのオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeyUsage
条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの KeyUsage
プロパティの値に基づいて、オペレーションへのアクセスを制御します。
この条件キーを使用して、リクエストの KeyUsageパラメータの値に基づいて CreateKeyオペレーションへのアクセスを制御できます。KeyUsage
の有効値は、ENCRYPT_DECRYPT
、SIGN_VERIFY
、および GENERATE_VERIFY_MAC
です。
例えば、KeyUsage
が ENCRYPT_DECRYPT
である場合にのみ KMS キーを作成し、KeyUsage
が SIGN_VERIFY
の場合はユーザーのアクセス許可を拒否できます。
次の IAM ポリシーステートメントの例では、kms:KeyUsage
条件キーを使用して、KeyUsage
が ENCRYPT_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" } } }
以下の資料も参照してください。
km:MacAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:MessageType
条件キーは、リクエストの MessageType
パラメータの値に基づいて、Sign および Verify オペレーションへのアクセスを制御します。MessageType
の有効値は、RAW
と DIGEST
です。
例えば、次のキーポリシーステートメントでは kms:MessageType
条件キーを使用して、非対称 KMS キーを使用してメッセージに署名することを許可し、メッセージダイジェストの使用は拒否しません。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringEquals": { "kms:MessageType": "RAW" } } }
以下の資料も参照してください。
km:MultiRegion
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
KMS キーリソースのオペレーション |
キーポリシーと IAM ポリシー |
この条件キーを使用すると、単一リージョンキー、またはマルチリージョンキーのみのオペレーションを許可できます。kms:MultiRegion
条件キーは、KMS キー AWS KMS の MultiRegion
プロパティの値に基づいて、KMS キーに対する オペレーションと CreateKeyオペレーションへのアクセスを制御します。有効な値は、true
(マルチリージョン)、および false
(単一リージョン) です。すべての KMS キーには MultiRegion
プロパティが含まれます。
例えば、次の IAM ポリシーステートメントでは kms:MultiRegion
条件キーを使用して、プリンシパルが単一リージョンキーを作成できるようにします。
{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:MultiRegion": false } } }
km:MultiRegionKeyType
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースのオペレーション |
キーポリシーと IAM ポリシー |
この条件キーを使用して、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーのみのオペレーションを許可できます。kms:MultiRegionKeyType
条件キーは、KMS キー AWS KMS の MultiRegionKeyType
プロパティに基づいて、KMS キーに対する オペレーションおよび CreateKeyオペレーションへのアクセスを制御します。有効な値は PRIMARY
および REPLICA
です。マルチリージョンキーのみに MultiRegionKeyType
プロパティがあります
通常は、IAM ポリシーの kms:MultiRegionKeyType
条件キーを使用して、複数の KMS キーへのアクセスを制御します。ただし、特定のマルチリージョンキーがプライマリまたはレプリカに変更されることがあるため、キーポリシーでこの条件を使用して、特定のマルチリージョンキーがプライマリキーまたはレプリカキーである場合にのみ、オペレーションを許可します。
例えば、次の IAM ポリシーステートメントでは kms:MultiRegionKeyType
条件キーを使用して、指定した AWS アカウントのマルチリージョンレプリカキーのみでキー削除のスケジュールおよびキャンセルを実行することをプリンシパルに許可します。
{ "Effect": "Allow", "Action": [ "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "kms:MultiRegionKeyType": "REPLICA" } } }
すべてのマルチリージョンキーへのアクセスを許可または拒否するには、両方の値または kms:MultiRegionKeyType
の null 値を使用します。ただし、その目的には kms:MultiRegion 条件キーが推奨されます。
km:PrimaryRegion
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、 UpdatePrimaryRegionオペレーションの送信先リージョンを制限できます。これらは、マルチリージョンのプライマリキーをホスト AWS リージョン できる です。
kms:PrimaryRegion
条件キーは、 PrimaryRegion
パラメータの値に基づいて UpdatePrimaryRegionオペレーションへのアクセスを制御します。PrimaryRegion
パラメータは、プライマリに昇格されるマルチリージョンレプリカキー AWS リージョン の を指定します。条件の値は、 や などの 1 us-east-1
つ以上の AWS リージョン 名前ap-southeast-2
、または などのリージョン名パターンです。 eu-*
例えば、次のキーポリシーステートメントでは kms:PrimaryRegion
条件キーを使用して、プリンシパルがマルチリージョンキーのプライマリリージョンを、指定した 4 つのリージョンのうちの 1 つに更新できるようにします。
{ "Effect": "Allow", "Action": "kms:UpdatePrimaryRegion", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Developer" }, "Resource": "*", "Condition": { "StringEquals": { "kms:PrimaryRegion": [ "us-east-1", "us-west-2", "eu-west-3", "ap-southeast-2" ] } } }
km:ReEncryptOnSameKey
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、リクエストが元の暗号化に使用されたものと同じ送信先 KMS キーを指定するかどうかに基づいて、 ReEncryptオペレーションへのアクセスを制御できます。
例えば、次のポリシーステートメントでは kms:ReEncryptOnSameKey
条件キーを使用して、対象の KMS キーが元の暗号化に使用されたものと同じである場合にのみ再暗号化します。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:ReEncrypt*", "Resource": "*", "Condition": { "Bool": { "kms:ReEncryptOnSameKey": true } } }
km:RequestAlias
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
キーポリシーと 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。エイリアスオペレーションへのアクセスの制御については、エイリアスへのアクセスの制御 を参照してください。
km:ResourceAliases
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
複数値 | 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
GenerateDataKeyオペレーションを呼び出す AWS アカウント ことを許可します。(影響を受ける 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*" ] } } }
km:ReplicaRegion
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、プリンシパル AWS リージョン がマルチリージョンキー をレプリケートできる を制限できます。kms:ReplicaRegion
条件キーは、リクエスト内の ReplicaRegionパラメータの値に基づいて、 ReplicateKeyオペレーションへのアクセスを制御します。このパラメータは、 AWS リージョン
の新しいレプリカキーを指定します。
条件の値は、 や などの 1 us-east-1
つ以上の AWS リージョン 名前ap-southeast-2
、または などの名前パターンですeu-*
。が AWS KMS サポート AWS リージョン する の名前のリストについては、「」のAWS Key Management Service 「 エンドポイントとクォータ」を参照してください AWS 全般のリファレンス。
例えば、次のキーポリシーステートメントでは、 kms:ReplicaRegion
条件キーを使用して、 ReplicaRegion
パラメータの値が指定されたリージョンのいずれかである場合にのみ、プリンシパルが ReplicateKey オペレーションを呼び出すことを許可します。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Administrator" }, "Action": "kms:ReplicateKey" "Resource": "*", "Condition": { "StringEquals": { "kms:ReplicaRegion": [ "us-east-1", "eu-west-3", "ap-southeast-2" ] } } }
この条件キーは、 ReplicateKeyオペレーションへのアクセスのみを制御します。UpdatePrimaryRegion オペレーションへのアクセスを制御するには、kms:PrimaryRegion 条件キーを使用します。
km:RetiringPrincipal
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
|
キーポリシーと 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" } } }
以下の資料も参照してください。
km:RotationPeriodInDays
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
数値 |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、プリンシパルがEnableKeyRotationリクエストの RotationPeriodInDays
パラメータで指定できる値を制限できます。
RotationPeriodInDays
は、各自動キーローテーションの日付の間の日数を指定します。 AWS KMS では、90 日から 2560 日までのローテーション期間を指定できますが、kms:RotationPeriodInDays
条件キーを使用して、有効な範囲内で最小ローテーション期間を適用するなど、ローテーション期間をさらに制限できます。
例えば、次のキーポリシーステートメントでは、 kms:RotationPeriodInDays
条件キーを使用して、ローテーション期間が 180 日以下の場合にプリンシパルがキーローテーションを有効にできないようにします。
{ "Effect": "Deny", "Action": "kms:EnableKeyRotation", "Principal": "*", "Resource": "*", "Condition" : { "NumericLessThanEquals" : { "kms:RotationPeriodInDays" : "180" } } }
km:ScheduleKeyDeletionPendingWindowInDays
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
数値 |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、プリンシパルがScheduleKeyDeletionリクエストの PendingWindowInDays
パラメータで指定できる値を制限できます。
は、キーを削除する前に AWS KMS が待機する日数PendingWindowInDays
を指定します。 AWS KMS では、7 ~ 30 日間の待機期間を指定できますが、 kms:ScheduleKeyDeletionPendingWindowInDays
条件キーを使用して、有効な範囲内で最小待機期間を適用するなど、待機期間をさらに制限できます。
例えば、次のキーポリシーステートメントでは、kms:ScheduleKeyDeletionPendingWindowInDays
条件キーを使用して、待機期間が 21 日以内の場合にプリンシパルがキーの削除をスケジュールできないようにしています。
{ "Effect": "Deny", "Action": "kms:ScheduleKeyDeletion", "Principal": "*", "Resource": "*", "Condition" : { "NumericLessThanEquals" : { "kms:ScheduleKeyDeletionPendingWindowInDays" : "21" } } }
km:SigningAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:SigningAlgorithm
条件キーを使用して、リクエスト内の SigningAlgorithmパラメータの値に基づいて、署名および検証オペレーションへのアクセスを制御できます。この条件キーは、 の外部で実行されるオペレーションには影響しません。たとえば 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*" } } }
以下の資料も参照してください。
km:ValidTo
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
タイムスタンプ |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:ValidTo
条件キーは、インポートされたキーマテリアルの有効期限を決定するリクエスト内の ValidTo パラメータの値に基づいて、 ImportKeyMaterial オペレーションへのアクセスを制御します。この値は、Unix 時間
デフォルトでは、ValidTo
パラメータは ImportKeyMaterial
リクエストで必要です。ただし、 ExpirationModelパラメータの値が の場合KEY_MATERIAL_DOES_NOT_EXPIRE
、 ValidTo
パラメータは無効です。kms:ExpirationModel 条件キーを使用して、 ExpirationModel
パラメータまたは特定のパラメータ値を要求することもできます。
次のポリシーステートメントの例では、キーマテリアルの KMS キーへのインポートをユーザーに許可します。kms:ValidTo
条件キーは、ImportKeyMaterial
リクエストへのアクセス権限を制限します。ここで、ValidTo
の値は 1546257599.0
(2018 年 12 月 31 日 午後 11:59:59) 以下となります。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "NumericLessThanEquals": { "kms:ValidTo": "1546257599.0" } } }
以下の資料も参照してください。
km:ViaService
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースのオペレーション |
キーポリシーと 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 AppFabric | appfabric. |
Amazon AppFlow | appflow. |
AWS Application Migration Service | mgn. |
Amazon Athena | athena. |
AWS Audit Manager | auditmanager. |
Amazon Aurora | rds. |
AWS Backup | backup. |
AWS Backup ゲートウェイ | backup-gateway. |
Amazon Chime SDK | chimevoiceconnector. |
AWS CodeArtifact | codeartifact. |
Amazon CodeGuru Reviewer | codeguru-reviewer. |
Amazon Comprehend | comprehend. |
Amazon Connect | connect. |
Amazon Connect Customer Profiles | profile. |
Amazon Q in Connect | wisdom. |
AWS Database Migration Service (AWS DMS) | dms. |
AWS Directory Service | directoryservice. |
Amazon DynamoDB | dynamodb. |
Amazon DocumentDB | docdb-elastic. |
Amazon EC2 Systems Manager (SSM) | ssm. |
Amazon Elastic Block Store (Amazon EBS) | ec2. (EBS のみ) |
Amazon Elastic Container Registry (Amazon ECR) | ecr. |
Amazon Elastic File System (Amazon EFS) | elasticfilesystem. |
Amazon ElastiCache |
条件キーの値に両方の ViaService 名前を含めます。
|
AWS Elemental MediaTailor | mediatailor. |
AWS エンティティ解決 | entityresolution. |
Amazon FinSpace | finspace. |
Amazon Forecast | forecast. |
Amazon FSx | fsx. |
AWS Glue | glue. |
AWS Ground Station | groundstation. |
Amazon GuardDuty | malware-protection. |
AWS HealthLake | healthlake. |
AWS IoT SiteWise | iotsitewise. |
Amazon Kendra | kendra. |
Amazon Keyspaces (Apache Cassandra 向け) | cassandra. |
Amazon Kinesis | kinesis. |
Amazon Data Firehose | firehose. |
Amazon Kinesis Video Streams | kinesisvideo. |
AWS Lambda | lambda. |
Amazon Lex | lex. |
AWS License Manager | license-manager. |
Amazon Location Service | geo. |
Amazon Lookout for Equipment | lookoutequipment. |
Amazon Lookout for Metrics | lookoutmetrics. |
Amazon Lookout for Vision | lookoutvision. |
Amazon Macie | macie. |
AWS Mainframe Modernization | m2. |
Amazon Managed Blockchain | managedblockchain. |
Amazon Managed Streaming for Apache Kafka (Amazon MSK) | kafka. |
Amazon Managed Workflows for Apache Airflow (MWAA) | airflow. |
Amazon MemoryDB for Redis | memorydb. |
Amazon Monitron | monitron. |
Amazon MQ | mq. |
Amazon Neptune | rds. |
Amazon Nimble Studio | nimble. |
AWS HealthOmics | omics. |
Amazon OpenSearch サービス | es. ,
aoss. |
AWS Proton | proton. |
Amazon Quantum Ledger Database (Amazon QLDB) | qldb. |
「Amazon RDS Performance Insights」 | rds. |
Amazon Redshift | redshift. |
Amazon Redshift クエリエディタ V2 | sqlworkbench. |
Amazon Redshift Serverless | redshift-serverless. |
Amazon Rekognition | rekognition. |
Amazon Relational Database Service (Amazon RDS) | rds. |
Amazon 複製データストア | ards. |
Amazon SageMaker | sagemaker. |
AWS Secrets Manager | secretsmanager. |
Amazon Security Lake | securitylake. |
Amazon Simple Email Service (Amazon SES) | ses. |
Amazon Simple Notification Service (Amazon SNS) | sns. |
Amazon Simple Queue Service (Amazon SQS) | sqs. |
Amazon Simple Storage Service (Amazon S3) | s3. |
AWS Snowball | importexport. |
AWS Storage Gateway | storagegateway. |
AWS Systems Manager Incident Manager | ssm-incidents. |
AWS Systems Manager Incident Manager 連絡先 | ssm-contacts. |
Amazon Timestream | timestream. |
Amazon Translate | translate. |
AWS Verified Access | verified-access. |
Amazon WorkMail | workmail. |
Amazon WorkSpaces | workspaces. |
Amazon WorkSpaces シンクライアント | thinclient. |
Amazon WorkSpaces Web | workspaces-web. |
AWS X-Ray | xray. |
km:WrappingAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーは、リクエスト内の WrappingAlgorithmパラメータの値に基づいて、 GetParametersForImportオペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のアルゴリズムを使用してキーマテリアルを暗号化するよう要求できます。異なるラップアルゴリズムを指定すると必要なパブリックキーとインポートトークンのリクエストが失敗します。
次のキーポリシーステートメントの例では、kms:WrappingAlgorithm
条件キーを使用して、GetParametersForImport
オペレーションを呼び出すアクセス許可をサンプルユーザーに付与しますが、RSAES_OAEP_SHA_1
ラップアルゴリズムの使用を阻止します。WrappingAlgorithm
リクエストの GetParametersForImport
が RSAES_OAEP_SHA_1
の場合、オペレーションは失敗します。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringNotEquals": { "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1" } } }
以下の資料も参照してください。
km:WrappingKeySpec
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーは、リクエスト内の WrappingKeySpecパラメータの値に基づいて GetParametersForImportオペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のタイプのパブリックキーを使用するよう要求できます。リクエストで別のキータイプを指定すると、エラーになります。
WrappingKeySpec
パラメータ値の有効な値は RSA_2048
のみであるため、ユーザーによるこの値の使用を無効にすることで、GetParametersForImport
オペレーションを効率的に無効にすることができます。
次のポリシーステートメントの例では、kms:WrappingAlgorithm
条件キーを使用してリクエストの WrappingKeySpec
が RSA_4096
になるようにします。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_4096" } } }
以下の資料も参照してください。