翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 つのセット演算子ForAllValues
、ForAnyValue
および を定義します。集合演算子は、それらを必要とする複数値を持つ条件キーでのみ使用します。単一値の条件キーで集合演算子を使用しないでください。ポリシーステートメントは必ず、本稼働環境での使用前に完全にテストしてください。
条件キーは単一値または複数値です。 AWS KMS 条件キーが単一値か複数値かを判断するには、条件キーの説明の「値タイプ」列を参照してください。
-
単一値の条件キーは認可コンテキスト (リクエストまたはリソース) に、最大で 1 つの値を持ちます。例えば、各API呼び出しは 1 つの からのみ発信できるため AWS アカウント、kms:CallerAccount は単一の値条件キーです。単一値の条件キーで集合演算子を使用しないでください。
-
複数値の条件キーでは、認可コンテキスト (リクエストまたはリソース) に複数の値があります。例えば、各KMSキーには複数のエイリアスを含めることができるため、kms:ResourceAliases には複数の値を含めることができます。複数値の条件キーには集合演算子が必要です。
単一値と複数値の条件キーの違いは、ポリシー条件の値の数ではなく、認可コンテキストの値の数であることに注意してください。
警告
単一値の条件キーで集合演算子を使用すると、過度に許可される (または過度に制限される) ポリシーステートメントが作成される可能性があります。集合演算子は、複数値の条件キーでのみ使用してください。
kms:EncryptionContext:context-key またはaws:RequestTag/tag-key
条件キーを持つForAllValues
セット演算子を含むポリシーを作成または更新すると、 は次のエラーメッセージ AWS KMS を返します。
OverlyPermissiveCondition: Using the ForAllValues set operator with a
single-valued condition key matches requests without the specified [encryption context or
tag] or with an unspecified [encryption context or tag]. To fix, remove
ForAllValues.
ForAnyValue
および ForAllValues
セット演算子の詳細については、「 ユーザーガイド」の「複数のキーと値の使用」を参照してください。 IAM 単一値の条件でForAllValues
セット演算子を使用するリスクの詳細については、IAM「 ユーザーガイド」の「セキュリティ警告 — 単一値のキー ForAllValues を使用する」を参照してください。
トピック
- kms:BypassPolicyLockoutSafetyCheck
- kms:CallerAccount
- kms:CustomerMasterKeySpec (非推奨)
- kms:CustomerMasterKeyUsage (廃止)
- kms:DataKeyPairSpec
- km:EncryptionAlgorithm
- kms:EncryptionContext:context-key
- kms:EncryptionContextKeys
- kms:ExpirationModel
- kms:GrantConstraintType
- kms:GrantIsForAWSResource
- kms:GrantOperations
- kms:GranteePrincipal
- kms:KeyAgreementAlgorithm
- kms:KeyOrigin
- kms:KeySpec
- kms:KeyUsage
- kms:MacAlgorithm
- kms:MessageType
- kms:MultiRegion
- kms:MultiRegionKeyType
- kms:PrimaryRegion
- kms:ReEncryptOnSameKey
- kms:RequestAlias
- kms:ResourceAliases
- kms:ReplicaRegion
- kms:RetiringPrincipal
- kms:RotationPeriodInDays
- kms:ScheduleKeyDeletionPendingWindowInDays
- kms:SigningAlgorithm
- kms:ValidTo
- kms:ViaService
- kms:WrappingAlgorithm
- kms:WrappingKeySpec
kms:BypassPolicyLockoutSafetyCheck
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
IAM ポリシーのみ キーポリシーと IAM ポリシー |
kms:BypassPolicyLockoutSafetyCheck
条件キーは、リクエスト内の BypassPolicyLockoutSafetyCheck
パラメータの値に基づいて、 CreateKeyおよび PutKeyPolicyオペレーションへのアクセスを制御します。
次のIAMポリシーステートメントの例は、CreateKey
リクエスト内の BypassPolicyLockoutSafetyCheck
パラメータの値が の場合に、ユーザーがKMSキーを作成するアクセス許可を拒否することで、ポリシーロックアウトの安全性チェックをバイパスできないようにします。 true.
{ "Effect": "Deny", "Action": [ "kms:CreateKey", "kms:PutKeyPolicy" ], "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } }
kms:BypassPolicyLockoutSafetyCheck
ポリシーまたはキーIAMポリシーの条件キーを使用して、PutKeyPolicy
オペレーションへのアクセスを制御することもできます。次のキーポリシーのポリシーステートメントの例は、KMSキーのポリシーを変更するときにユーザーがポリシーロックアウトの安全性チェックをバイパスできないようにします。
このポリシーステートメントでは、明示的に Deny
を使用せずに、Null 条件演算子とともに Allow
を使用し、リクエストに BypassPolicyLockoutSafetyCheck
パラメータが含まれていない場合にのみアクセスを許可します。パラメータが使用されていない場合、デフォルト値は false
です。この弱いポリシーステートメントは、バイパスが必要な限定された状況では上書きされる場合があります。
{ "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } }
以下の資料も参照してください。
kms:CallerAccount
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースオペレーション カスタムキーストアのオペレーション |
キーポリシーと IAM ポリシー |
この条件キーを使用して、 AWS アカウントのすべてのアイデンティティ (ユーザーおよびロール) へのアクセスを許可または拒否できます。キーポリシーでは、Principal
要素を使って、ポリシーステートメントが適用される ID を指定できます。Principal
要素の構文では、 AWS アカウントのすべてのアイデンティティを指定することはできません。ただし、この条件キーをすべての AWS ID を指定する Principal
要素と組み合わせることで、この効果を実現できます。
これを使用して、任意のKMSキーリソースオペレーション 、つまり特定のKMSキーを使用する AWS KMS オペレーションへのアクセスを制御できます。KMS キーリソースオペレーションを識別するには、 アクションとリソーステーブル で、オペレーションのResources
列KMS key
に の値を探します。また、カスタムキーストアを管理するオペレーションにも有効です。
例えば、次のポリシーステートメントは、kms:CallerAccount
条件キーを使用する方法を示します。このポリシーステートメントは、 AWS マネージドキー for Amazon の のキーポリシーにありますEBS。すべての AWS ID を指定する Principal
要素とkms:CallerAccount
条件キーを組み合わせて、 AWS アカウント 111122223333 のすべての ID へのアクセスを効果的に許可します。Amazon 経由で送信されるリクエストのみを許可することで、アクセス許可をさらに制限するための追加の AWS KMS 条件キー (kms:ViaService
) が含まれていますEBS。詳細については、「kms:ViaService」を参照してください。
{ "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": {"AWS": "*"}, "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "ec2.us-west-2.amazonaws.com" } }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" }
kms:CustomerMasterKeySpec (非推奨)
kms:CustomerMasterKeySpec
条件キーは非推奨です。代わりに、kms:KeySpec 条件キーを使用します。
kms:CustomerMasterKeySpec
および kms:KeySpec
条件キーは同じように機能します。名前だけが異なります。kms:KeySpec
を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートしています。
kms:CustomerMasterKeyUsage (廃止)
kms:CustomerMasterKeyUsage
条件キーは非推奨です。代わりに、kms:KeyUsage 条件キーを使用します。
kms:CustomerMasterKeyUsage
および kms:KeyUsage
条件キーは同じように機能します。名前だけが異なります。kms:KeyUsage
を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートしています。
kms:DataKeyPairSpec
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと 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
条件演算子を持つポリシーステートメントを使用します。例えば、次のキーポリシーステートメント例では、リクエストの暗号化アルゴリズムが で、RSAKMSキーで使用される非対称暗号化アルゴリズムでない限りRSAES_OAEP_SHA_256
、指定された暗号化オペレーションでこのKMSキーをExampleRole
ロールを引き受けるプリンシパルが使用することを禁止しています。
ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このようなダブルネガティブのポリシーステートメントは、このKMSキーの他のポリシーと許可がこのロールに他の暗号化アルゴリズムを使用することを許可するのを防ぎます。このキーポリシーステートメントDeny
の は、Allow
有効なキーポリシーまたはIAMポリシーよりも優先され、このKMSキーとそのプリンシパルのすべての許可よりも優先されます。
{ "Sid": "Allow only one encryption algorithm with this asymmetric KMS key", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256" } } }
オペレーションに使用される暗号化アルゴリズム
kms:EncryptionAlgorithm
条件キーを使用して、リクエストでアルゴリズムが指定されていない場合でも、オペレーションで使用される暗号化アルゴリズムに基づいてオペレーションへのアクセスを制御することもできます。これにより、デフォルト値のためリクエストで指定されない可能性のある SYMMETRIC_DEFAULT
アルゴリズムを要求または禁止することができます。
この機能により、kms:EncryptionAlgorithm
条件キーを使用して、データキーとデータキーペアを生成するオペレーションへのアクセスを制御することができます。これらのオペレーションでは、対称暗号化KMSキーとSYMMETRIC_DEFAULT
アルゴリズムのみを使用します。
例えば、このIAMポリシーはプリンシパルを対称暗号化に制限します。リクエストで指定されるか、オペレーションで使用されている暗号化アルゴリズムが SYMMETRIC_ でない限り、暗号化オペレーションのサンプルアカウントのKMSキーへのアクセスを拒否しますDEFAULT。を含めるとGenerateDataKey、、GenerateDataKeyPair、、 GenerateDataKeyWithoutPlaintextGenerateDataKeyPairWithoutPlaintextがアクセス許可GenerateDataKey*
に追加されます。この条件は、常に対称暗号化アルゴリズムを使用するため、これらのオペレーションには影響しません。
{ "Sid": "AllowOnlySymmetricAlgorithm", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } } }
以下の資料も参照してください。
kms:EncryptionContext:context-key
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:EncryptionContext:context-key
条件キーを使用して、暗号化オペレーション のリクエストの暗号化コンテキストに基づいて対称暗号化KMSキーへのアクセスを制御できます。暗号化コンテキストペアのキーと値の両方を評価するには、この条件キーを使用します。暗号化コンテキストキーのみを評価するか、キーや値に関係なく暗号化コンテキストを要求するには、kms:EncryptionContextKeys 条件キーを使用します。
注記
非対称KMSキーまたはHMACKMSキー を使用して暗号化オペレーションで暗号化コンテキストを指定することはできません。非対称アルゴリズムとMACアルゴリズムは、暗号化コンテキストをサポートしていません。
kms:EncryptionContext:context-key 条件キーを使用するには、context-key
暗号化コンテキストキーを持つプレースホルダー。を置き換える context-value
暗号化コンテキスト値を持つプレースホルダー。
"kms:EncryptionContext:
context-key
": "context-value
"
例えば、次の条件キーでは、キーが AppName
、値が ExampleApp
(AppName =
ExampleApp
) の暗号化コンテキストを指定します。
"kms:EncryptionContext:AppName": "ExampleApp"
これは単一値の条件キーです。条件キーのキーは、特定の暗号化コンテキストキー (context-key) を指定します。各APIリクエストに複数の暗号化コンテキストペアを含めることはできますが、指定されたコンテキストキーを持つ暗号化コンテキストペアには 1 つの値しか指定できません。例えば、kms:EncryptionContext:Department
条件キーは、Department
キーを持つ暗号化コンテキストペアにのみ適用されます。Department
キーを持つ任意の暗号化コンテキストペアには 1 つの値しか設定できません。
kms:EncryptionContext:context-key
条件キーで集合演算子を使用しないでください。ポリシーステートメントを Allow
アクションで作成する場合、kms:EncryptionContext:context-key
条件キー、ForAllValues
集合演算子、条件は、暗号化コンテキストのないリクエストと、ポリシー条件で指定されていない暗号化コンテキストペアを持つリクエストを許可します。
警告
この単一値の条件キーで、ForAnyValue
または ForAllValues
の集合演算子を使用しないでください。これらの集合演算子は、要求する値を必要としないポリシー条件を作成し、禁止する値を許可する可能性があります。
kms:EncryptionContext:context-key を持つ ForAllValues
set 演算子を含むポリシーを作成または更新すると、 は次のエラーメッセージ AWS KMS を返します。
OverlyPermissiveCondition:EncryptionContext: Using the
ForAllValues
set operator with a single-valued condition key matches requests without the specified
encryption context or with an unspecified encryption context. To fix, remove
ForAllValues.
特定の暗号化コンテキストペアを要求するには、StringEquals
演算子を持つ kms:EncryptionContext:context-key
条件キーを使用します。
次のキーポリシーステートメントの例では、リクエストの暗号化コンテキストにAppName:ExampleApp
ペアが含まれているGenerateDataKey
場合にのみ、リクエストで KMS キーをロールを引き受けることができるプリンシパルにキーの使用を許可します。他の暗号化コンテキストのペアも許可されます。
キースペース名では、大文字と小文字は区別されません。値の大文字と小文字の区別は、条件演算子 (StringEquals
など) によって決定されます。詳細については、「暗号化コンテキスト条件での大文字と小文字の区別」を参照してください。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }
暗号化コンテキストペアを要求し、他のすべての暗号化コンテキストペアを禁止するには、ポリシーステートメントkms:EncryptionContextKeysで kms:EncryptionContext:context-key と の両方を使用します。次のポリシーステートメントでは、kms:EncryptionContext:AppName
条件キーを使用してリクエストの AppName=ExampleApp
暗号化コンテキストペアを要求します。ForAllValues
集合演算子を持つ kms:EncryptionContextKeys
条件キーを使用して、AppName
暗号化コンテキストキーのみを許可することもできます。
ForAllValues
集合演算子は、リクエストの暗号化コンテキストキーを AppName
に制限します。ポリシーステートメントに、ForAllValues
集合演算子を持つ kms:EncryptionContextKeys
条件が単独で使用された場合、この集合演算子は、暗号化コンテキストのないリクエストを許可します。ただし、リクエストに暗号化コンテキストがない場合、kms:EncryptionContext:AppName
条件は失敗します。ForAllValues
セット演算子の詳細については、「 ユーザーガイド」の「複数のキーと値の使用」を参照してください。 IAM
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/KeyUsers" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" }, "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "AppName" ] } } }
この条件キーを使用して、特定のオペレーションのKMSキーへのアクセスを拒否することもできます。次のキーポリシーステートメントの例では、リクエストの暗号化コンテキストにStage=Restricted
暗号化コンテキストペアが含まれている場合、プリンシパルがKMSキーを使用することを禁止する Deny
効果を使用します。この条件により、他の暗号化コンテキストペアを含むリクエストが許可されます。これには、Stage
キーおよびその他の値 (Stage=Test
など) を持つ暗号化コンテキストペアが含まれます。
{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": "Restricted" } } }
複数の暗号化コンテキストペアを使用する
複数の暗号化コンテキストペアを要求または禁止できます。また、複数の暗号化コンテキストペアのうちの 1 つを要求することもできます。これらの条件の解釈に使用されるロジックの詳細については、 IAM ユーザーガイドの「複数のキーまたは値を持つ条件の作成」を参照してください。
注記
このトピックの以前のバージョンでは、 を使用しForAnyValue
、演算子を kms:EncryptionContext:context-key 条件キーでForAllValues
設定するポリシーステートメントが表示されていました。単一値の条件キーを持つ集合演算子を使用すると、暗号化コンテキストのないリクエストおよび暗号化コンテキストペアが指定されていないリクエストを許可するポリシーとなる可能性があります。
例えば、Allow
効果を持つポリシー条件の場合、ForAllValues
集合演算子および "kms:EncryptionContext:Department": "IT"
条件キーは、暗号化コンテキストを「Department=IT」ペアに制限しません。これは、暗号化コンテキストのないリクエストとおよび暗号化コンテキストのペアが指定されていないリクエストを許可します (Stage=Restricted
など)。
ポリシーを確認し、 kms:EncryptionContext:context-key を使用して、セット演算子を任意の条件から削除してください。この形式のポリシーを作成または更新しようとすると、OverlyPermissiveCondition
の例外を含むエラーが発生します。このエラーを解決するには、集合演算子を削除します。
複数の暗号化コンテキストのペアを要求するには、同じ条件でペアを一覧表示します。次の例のキーポリシーステートメントでは、2 つの暗号化コンテキストペア (Department=IT
および Project=Alpha
) を要求します。条件には異なるキー (kms:EncryptionContext: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" ] } } }
複数の暗号化コンテキストペアを禁止することもできます。次のキーポリシーステートメントの例では、リクエストの暗号化コンテキストに Stage=Restricted
または Stage=Production
.pair が含まれている場合、プリンシパルによるKMSキーの使用を禁止するDeny
効果を使用します。
同じキー (kms:EncryptionContext:Stage
) の複数の値 (Restricted
およびProduction
) は、暗黙的に OR によって接続されます。詳細については、IAM「 ユーザーガイド」の「複数のキーまたは値を持つ条件の評価ロジック」を参照してください。
{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": [ "Restricted", "Production" ] } } }
暗号化コンテキスト条件での大文字と小文字の区別
復号オペレーションで指定される暗号化コンテキストは、暗号化オペレーションで指定される暗号化コンテキストに大文字と小文字を区別して完全に一致する必要があります。複数のペアの暗号化コンテキストのペアの順序のみを変更できます。
ただし、ポリシー条件では、条件キーの大文字と小文字は区別されません。条件値の大文字と小文字の区別は、使用する ポリシー条件演算子 (StringEquals
や StringEqualsIgnoreCase
など) によって決まります。
そのため、 条件キーはプレフィックスkms:EncryptionContext:
と で構成されます。
は大文字と小文字を区別しません。この条件を使用するポリシーでは、条件キーのいずれの要素もチェックされません。値の大文字と小文字の区別。つまり、コンテキストキー
置換は、ポリシー条件演算子によって決定されます。コンテキスト値
例えば、次のポリシーステートメントでは、大文字と小文字に関係なく暗号化コンテキストに Appname
キーが含まれている場合にオペレーションが許可されます。この StringEquals
条件では、指定時に ExampleApp
を大文字にする必要があります。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Appname": "ExampleApp" } } }
大文字と小文字を区別する暗号化コンテキストキーを要求するには、 などの大文字と小文字を区別する条件演算子で kms:EncryptionContextKeys ポリシー条件を使用しますStringEquals
。このポリシー条件では、暗号化コンテキストキーがポリシー条件値であるため、大文字と小文字の区別は条件演算子によって決定されます。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }
暗号化コンテキストキーと値の両方を大文字と小文字を区別して評価するには、同じポリシーステートメントで kms:EncryptionContextKeys
と kms:EncryptionContext:context-key ポリシー条件を一緒に使用します。大文字と小文字を区別する条件演算子 (StringEquals
など) は、常に条件の値に適用されます。暗号化コンテキストキー (AppName
など) は kms:EncryptionContextKeys
条件の値です。暗号化コンテキスト値 ( などExampleApp
) は、 kms:EncryptionContext:context-key 条件の値です。
例えば、次のキーポリシーステートメントでは、StringEquals
演算子で大文字と小文字が区別されるため、暗号化コンテキストキーと暗号化コンテキスト値の両方で大文字と小文字が区別されます。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" }, "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }
暗号化コンテキスト条件での変数の使用
暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など、別のタイプを使用する場合、 はそれをリテラル文字列として AWS KMS 解釈します。
"encryptionContext": { "department": "10103.0" }
ただし、kms:EncryptionContext:context-key
条件キーの値はIAMポリシー変数 にすることができます。これらのポリシー変数はリクエストの値に基づいて実行時に解決されます。例えば、aws:CurrentTime
はリクエストの時間に解決され、aws:username
は呼び出し元のフレンドリ名に解決されます。
これらのポリシー変数を使用し、ポリシーステートメントを作成して、暗号化コンテキストに限定的な情報 (呼び出し元のユーザー名など) を必要とする条件を指定できます。ポリシーステートメントに変数を含めるため、ロールを引き受けることができるすべてのユーザーに同じポリシーステートメントを使用できます。ユーザー別にポリシーステートメントを記述する必要はありません。
ロールを引き受けることができるすべてのユーザーに、同じKMSキーを使用してデータの暗号化と復号を行う状況を考えてみましょう。ただし、それらのユーザーに自分が暗号化したデータのみの復号を許可するとします。まず、すべてのリクエストに、キーが user
で、値が発信者の AWS ユーザー名である暗号化コンテキスト AWS KMS を含めるように要求します。例えば、次のような場合です。
"encryptionContext": { "user": "bob" }
次に、この要件を定義するために、以下の例のようなポリシーステートメントを使用できます。このポリシーステートメントは、 KMS キーを使用してデータを暗号化および復号化するアクセス許可をTestTeam
ロールに付与します。ただし、そのアクセス許可は、"user":
"
ペアがリクエストの暗号化コンテキストに含まれる場合にのみ有効です。条件では、ユーザー名を表すために <username>
"aws:username
policy 変数を使用します。
リクエストが評価されるとき、条件の変数が呼び出し元のユーザー名に置き換えられます。そのため条件では、「bob」には "user":
"bob"
、「alice」には "user": "alice"
の暗号化コンテキストを必須とします。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:user": "${aws:username}" } } }
IAM ポリシー変数は、kms:EncryptionContext:context-key
条件キーの値でのみ使用できます。キーで変数を使用することはできません。
変数に プロバイダ固有のコンテキストキー を使用することもできます。これらのコンテキストキー AWS は、ウェブ ID フェデレーションを使用して にログインしたユーザーを一意に識別します。
すべての変数と同様に、これらの変数は、実際の暗号化コンテキストではなく kms:EncryptionContext:context-key
ポリシー条件でのみ使用できます。また、条件のキーではなく値でのみ使用できます。
例えば、以下のキーポリシーステートメントは前のものと似ています。ただし、この条件には、Amazon Cognito ユーザープールにログインしたユーザーを値が一意に識別する、キーが sub
の暗号化コンテキストが必要です。Amazon Cognito でユーザーとロールを識別する方法の詳細については、Amazon Cognito デベロッパーガイド」のIAM「ロール」を参照してください。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}" } } }
以下の資料も参照してください。
kms:EncryptionContextKeys
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
複数値 |
|
キーポリシーと IAM ポリシー |
kms:EncryptionContextKeys
条件キーを使用して、暗号化オペレーションのリクエストの暗号化コンテキストに基づいて対称暗号化KMSキーへのアクセスを制御できます。各暗号化コンテキストペアのキーのみを評価するには、この条件キーを使用します。暗号化コンテキストのキーと値の両方を評価するには、kms:EncryptionContext:context-key
条件キーを使用します。
非対称KMSキーまたはHMACKMSキー を使用して暗号化オペレーションで暗号化コンテキストを指定することはできません。非対称アルゴリズムとMACアルゴリズムは、暗号化コンテキストをサポートしていません。
注記
これは複数値の条件キーです。API リクエストごとに複数の暗号化コンテキストペアを指定できます。 は、リクエスト内の暗号化コンテキストキーをポリシー内の暗号化コンテキストキーのセットkms:EncryptionContextKeys
と比較します。これらのセットを比較する方法を決定するには、ForAnyValue
または ForAllValues
集合演算子をポリシー条件で使用します。セット演算子の詳細については、IAM「 ユーザーガイド」の「複数のキーと値の使用」を参照してください。
-
ForAnyValue
: リクエスト内の 1 つ以上の暗号化コンテキストキーがポリシー条件の暗号化コンテキストキーと一致する必要があります。その他の暗号化コンテキストキーも許可されます。リクエストに暗号化コンテキストがない場合、条件は満たされません。 -
ForAllValues
: リクエスト内のすべての暗号化コンテキストキーがポリシー条件の暗号化コンテキストキーと一致する必要があります。この集合演算子は、暗号化コンテキストキーをポリシー条件内のキーに制限します。暗号化コンテキストキーは必要ありませんが、指定されていない暗号化コンテキストキーは禁止されています。
次の例のキーポリシーステートメントでは、ForAnyValue
集合演算子で kms:EncryptionContextKeys
条件キーを使用します。このポリシーステートメントは、指定されたオペレーションにKMSキーの使用を許可しますが、その値に関係なく、リクエスト内の暗号化コンテキストペアの少なくとも 1 つにAppName
キーが含まれている場合にのみ許可されます。
例えば、このキーポリシーステートメントでは、2 つの暗号化コンテキストペア AppName=Helper
および Project=Alpha
を持つ GenerateDataKey
リクエストを許可します。これは、最初の暗号化コンテキストペアが条件を満たすためです。Project=Alpha
のみを持つリクエスト、または暗号化コンテキストがないリクエストは失敗します。
StringEquals 条件オペレーションでは大文字と小文字が区別されるため、このポリシーステートメントでは、暗号化コンテキストキーのスペルと大文字と小文字が必要です。ただし、キーの大文字と小文字の区別を無視する条件演算子 (StringEqualsIgnoreCase
など) を使用できます。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }
kms:EncryptionContextKeys
条件キーを使用して、KMSキーを使用する暗号化オペレーションで暗号化コンテキスト (任意の暗号化コンテキスト) を要求することもできます。
次のキーポリシーステートメントの例では、Null kms:EncryptionContextKeys
条件演算子で条件キーを使用して、APIリクエストの暗号化コンテキストが null でない場合にのみKMSキーへのアクセスを許可します。 https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Nullこの条件では、暗号化コンテキストのキーまたは値をチェックしません。暗号化コンテキストが存在することだけを検証します。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContextKeys": false } } }
以下の資料も参照してください。
kms:ExpirationModel
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:ExpirationModel
条件キーは、リクエスト内の ExpirationModelパラメータの値に基づいてImportKeyMaterialオペレーションへのアクセスを制御します。
ExpirationModel
は、インポートされたキーマテリアルの有効期限が切れているかどうかを判断するオプションのパラメータです。有効な値は、KEY_MATERIAL_EXPIRES
および KEY_MATERIAL_DOES_NOT_EXPIRE
です。KEY_MATERIAL_EXPIRES
はデフォルト値です。
有効期限日時は、 ValidToパラメータの値によって決まります。ValidTo
パラメータの値が ExpirationModel
である場合を除き、KEY_MATERIAL_DOES_NOT_EXPIRE
パラメータが必要です。kms:ValidTo 条件キーを使用して、アクセスの条件として特定の有効期限を要求することもできます。
次のポリシーステートメント例では、 kms:ExpirationModel
条件キーを使用して、リクエストに ExpirationModel
パラメータが含まれ、その値が である場合にのみ、ユーザーがKMSキーにキーマテリアルをインポートできるようにしますKEY_MATERIAL_DOES_NOT_EXPIRE
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "StringEquals": { "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE" } } }
また、kms:ExpirationModel
条件キーを使用して、キーマテリアルの有効期限が切れている場合にのみ、ユーザーがキーマテリアルをインポートできるようにもします。次のポリシーステートメントの例では、Null 条件演算子とともに kms:ExpirationModel
条件キーを使用して、リクエストに ExpirationModel
パラメータが含まれていない場合にのみ、ユーザーがキーマテリアルをインポートできるようにします。のデフォルト値は ExpirationModel ですKEY_MATERIAL_EXPIRES
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "Null": { "kms:ExpirationModel": true } } }
以下の資料も参照してください。
kms:GrantConstraintType
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
キーポリシーと IAM ポリシー |
AWS と統合されたサービス AWS KMS
次のキーポリシーステートメント例では、 kms:GrantIsForAWSResource
条件キーを使用しています。これにより AWS KMS、Amazon などの と統合されている AWS サービスがEBS、指定されたプリンシパルに代わってこのKMSキーに許可を作成できるようになります。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }
以下の資料も参照してください。
kms:GrantOperations
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
複数値 |
|
キーポリシーと 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
のような他の権限オペレーションを許可する必要があります。
以下の資料も参照してください。
kms:GranteePrincipal
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
IAM およびキーポリシー |
この条件キーを使用して、リクエスト内の GranteePrincipalパラメータの値に基づいてCreateGrantオペレーションへのアクセスを制御できます。例えば、CreateGrant
リクエストの被付与者プリンシパルが条件ステートメントで指定されたプリンシパルと一致する場合にのみ、KMSキーを使用する許可を作成できます。
被付与者のプリンシパルを指定するには、プリンシパルの Amazon リソースネーム (ARN) AWS を使用します。有効なプリンシパルには AWS アカウント、、 IAM ユーザー、IAMロール、フェデレーティッドユーザー、および引き受けたロールユーザーが含まれます。プリンシパルのARN構文については、 IAM ユーザーガイドIAMARNsの「」を参照してください。
次のキーポリシーステートメントの例では、 kms:GranteePrincipal
条件キーを使用して、 権限の被付与者プリンシパルが である場合にのみ、 KMS キーの 権限を作成しますLimitedAdminRole
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole" } } }
以下の資料も参照してください。
kms:KeyAgreementAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:KeyAgreementAlgorithm
条件キーを使用して、リクエスト内の KeyAgreementAlgorithm
パラメータの値に基づいてDeriveSharedSecretオペレーションへのアクセスを制御できます。KeyAgreementAlgorithm
では、唯一の有効な値は ECDH
です。
例えば、次のキーポリシーステートメントでは、 kms:KeyAgreementAlgorithm
条件キーを使用して、 KeyAgreementAlgorithm
が で DeriveSharedSecret ない限り、 へのすべてのアクセスを拒否しますECDH
。
{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:DeriveSharedSecret", "Resource": "*", "Condition": { "StringNotEquals": { "kms:KeyAgreementAlgorithm": "ECDH" } } }
以下の資料も参照してください。
kms:KeyOrigin
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeyOrigin
条件キーは、 によって作成または使用されるKMSキーのOrigin
プロパティの値に基づいて、オペレーションへのアクセスを制御します。これは、リソース条件または要求条件として機能します。
この条件キーを使用して、リクエストのオリジンパラメータの値に基づいてCreateKeyオペレーションへのアクセスを制御できます。Origin
の有効値は、AWS_KMS
、AWS_CLOUDHSM
、および EXTERNAL
です。
例えば、キーマテリアルが AWS KMS (AWS_KMS
) で生成された場合にのみ、キーマテリアルがカスタム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 キーリソースオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeySpec
条件キーは、 によって作成または使用されるKMSキーのKeySpec
プロパティの値に基づいて、オペレーションへのアクセスを制御します。
この条件キーをIAMポリシーで使用して、CreateKey
リクエスト内の KeySpecパラメータの値に基づいてCreateKeyオペレーションへのアクセスを制御できます。例えば、この条件を使用して、ユーザーが対称暗号化KMSキーのみを作成したり、HMACKMSキーのみを作成したりできます。
次の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" } } }
以下の資料も参照してください。
kms:KeyUsage
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeyUsage
条件キーは、 によって作成または使用されるKMSキーのKeyUsage
プロパティの値に基づいて、オペレーションへのアクセスを制御します。
この条件キーを使用して、リクエスト内の KeyUsageパラメータの値に基づいてCreateKeyオペレーションへのアクセスを制御できます。KeyUsage
の有効値は、ENCRYPT_DECRYPT
、SIGN_VERIFY
、GENERATE_VERIFY_MAC
、KEY_AGREEMENT
です。
例えば、 が の場合にのみKMSキーを作成できENCRYPT_DECRYPT
、 KeyUsage
が KeyUsage
の場合にのみユーザーアクセス許可を拒否できますSIGN_VERIFY
。
次のIAMポリシーステートメントの例では、 kms:KeyUsage
の条件キーを使用して、 KeyUsage
が の場合にのみKMSキーを作成しますENCRYPT_DECRYPT
。
{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyUsage": "ENCRYPT_DECRYPT" } } }
kms:KeyUsage
条件キーを使用して、 オペレーションKMS内のキーのKeyUsage
プロパティに基づいてKMSキーを使用または管理するオペレーションへのアクセスを制御することもできます。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して認可されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、 アクションとリソーステーブル で、オペレーションの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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:MacAlgorithm
条件キーを使用して、リクエスト内の MacAlgorithm
パラメータの値に基づいて GenerateMacおよび VerifyMacオペレーションへのアクセスを制御できます。
次のキーポリシー例では、 testers
ロールを引き受けることができるユーザーが HMACKMSキーを使用してHMACタグを生成および検証できるのは、リクエストのMACアルゴリズムが HMAC_SHA_384
または の場合のみですHMAC_SHA_512
。このポリシーは、それぞれが独自の条件を持つ 2 つの個別のポリシーステートメントを使用します。1 つの条件ステートメントで複数のMACアルゴリズムを指定する場合、条件には、どちらかのアルゴリズムではなく両方のアルゴリズムが必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_384" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_512" } } } ] }
以下の資料も参照してください。
kms:MessageType
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと 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" } } }
以下の資料も参照してください。
kms:MultiRegion
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
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 キーリソースオペレーション |
キーポリシーと IAM ポリシー |
この条件キーを使用して、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーのみのオペレーションを許可できます。kms:MultiRegionKeyType
条件キーはKMS、キーのMultiRegionKeyType
プロパティに基づいて、キーに対する AWS KMS オペレーションへのアクセスとCreateKeyオペレーションを制御しますKMS。有効な値は PRIMARY
および REPLICA
です。マルチリージョンキーのみに MultiRegionKeyType
プロパティがあります
通常、IAMポリシーでkms:MultiRegionKeyType
条件キーを使用して、複数のKMSキーへのアクセスを制御します。ただし、特定のマルチリージョンキーがプライマリまたはレプリカに変更されることがあるため、キーポリシーでこの条件を使用して、特定のマルチリージョンキーがプライマリキーまたはレプリカキーである場合にのみ、オペレーションを許可します。
例えば、次のIAMポリシーステートメントでは、 kms:MultiRegionKeyType
条件キーを使用して、プリンシパルが指定した のマルチリージョンレプリカキーでのみキーの削除をスケジュールおよびキャンセルできるようにします AWS アカウント。
{ "Effect": "Allow", "Action": [ "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "kms:MultiRegionKeyType": "REPLICA" } } }
すべてのマルチリージョンキーへのアクセスを許可または拒否するには、両方の値または kms:MultiRegionKeyType
の null 値を使用します。ただし、kms:MultiRegion 条件キーはその目的で推奨されます。
kms:PrimaryRegion
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、UpdatePrimaryRegionオペレーション内の送信先リージョンを制限できます。これらは、マルチリージョンのプライマリキーをホスト AWS リージョン できます。
kms:PrimaryRegion
条件キーは、 PrimaryRegion
パラメータの値に基づいてUpdatePrimaryRegionオペレーションへのアクセスを制御します。PrimaryRegion
パラメータは、プライマリに昇格するマルチリージョンレプリカキー AWS リージョン の を指定します。条件の値は、 us-east-1
や などの 1 つ以上の AWS リージョン 名前ap-southeast-2
、または などのリージョン名パターンです。 eu-*
例えば、次のキーポリシーステートメントでは kms:PrimaryRegion
条件キーを使用して、プリンシパルがマルチリージョンキーのプライマリリージョンを、指定した 4 つのリージョンのうちの 1 つに更新できるようにします。
{ "Effect": "Allow", "Action": "kms:UpdatePrimaryRegion", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Developer" }, "Resource": "*", "Condition": { "StringEquals": { "kms:PrimaryRegion": [ "us-east-1", "us-west-2", "eu-west-3", "ap-southeast-2" ] } } }
kms:ReEncryptOnSameKey
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
キーポリシーと IAM ポリシー |
この条件キーを使用して、リクエストが特定のエイリアスを使用してKMSキーを識別する場合にのみ、オペレーションを許可できます。kms:RequestAlias
条件キーは、リクエスト内のそのKMSキーを識別するエイリアスDescribeKey
に基づいて、暗号化オペレーションGetPublicKey
、、または で使用されるKMSキーへのアクセスを制御します。(このポリシー条件は、GenerateRandomオペレーションにKMSキーやエイリアスを使用しないため、オペレーションには影響しません。)
この条件は、 で属性ベースのアクセスコントロール (ABAC) をサポートします。これにより AWS KMS、KMSキーのタグとエイリアスに基づいてKMSキーへのアクセスを制御できます。タグとエイリアスを使用して、ポリシーや許可を変更せずにKMSキーへのアクセスを許可または拒否できます。詳細については、「AWS KMS の ABAC」を参照してください。
このポリシー条件でエイリアスを指定するには、エイリアス名 (alias/project-alpha
など)、またはエイリアス名パターン (alias/*test*
など) を使用します。この条件キーの値にエイリアスARNを指定することはできません。
この条件を満たすには、リクエストの KeyId
パラメータの値が一致するエイリアス名またはエイリアス である必要がありますARN。リクエストで異なるキー識別子 が使用されている場合、 が同じKMSキーを識別しても、 条件は満たされません。
例えば、次のキーポリシーステートメントでは、プリンシパルがKMSキーの GenerateDataKey オペレーションを呼び出すことを許可します。ただし、これは、リクエストの KeyId
パラメータの値が alias/finance-key
または などのそのエイリアス名ARNを持つエイリアスである場合にのみ許可されますarn:aws:kms:us-west-2:111122223333:alias/finance-key
。
{ "Sid": "Key policy using a request alias condition", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/developer" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:RequestAlias": "alias/finance-key" } } }
この条件キーを使用して、 CreateAliasや などのエイリアスオペレーションへのアクセスを制御することはできませんDeleteAlias。エイリアスオペレーションへのアクセスの制御については、エイリアスへのアクセスの制御 を参照してください。
kms:ResourceAliases
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
複数値 | KMS キーリソースオペレーション |
IAM ポリシーのみ |
この条件キーを使用して、KMSキーに関連付けられているエイリアスに基づいてKMSキーへのアクセスを制御します。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して認可されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、 アクションとリソーステーブル で、オペレーションのResources
列KMS key
に の値を探します。
この条件は、 で属性ベースのアクセスコントロール (ABAC) をサポートします AWS KMS。を使用するとABAC、KMSキーに割り当てられたタグとキーに関連付けられているエイリアスに基づいてKMS、キーへのアクセスを制御できますKMS。タグとエイリアスを使用して、ポリシーや許可を変更せずにKMSキーへのアクセスを許可または拒否できます。詳細については、「AWS KMS の ABAC」を参照してください。
エイリアスは AWS アカウント および リージョンで一意である必要がありますが、この条件により、同じリージョン内の複数のKMSキー (StringLike
比較演算子を使用) または AWS リージョン 各アカウント内の異なる複数のKMSキーへのアクセスを制御できます。
注記
kms:ResourceAliases 条件は、KMSキーがKMSキークォータあたりのエイリアスに準拠している場合にのみ有効です。KMS キーがこのクォータを超えると、 kms:ResourceAliases
条件によってKMSキーの使用が許可されているプリンシパルはKMS、キーへのアクセスを拒否されます。
このポリシー条件でエイリアスを指定するには、エイリアス名 (alias/project-alpha
など)、またはエイリアス名パターン (alias/*test*
など) を使用します。この条件キーの値にエイリアスARNを指定することはできません。条件を満たすには、オペレーションで使用されるKMSキーに指定されたエイリアスが必要です。オペレーションのリクエストでKMSキーが識別されるかどうか、またはどのように識別されるかは関係ありません。
これは、キーに関連付けられたエイリアスのセットをポリシー内のエイリアスのセットと比較する多値条件KMSキーです。これらのセットを比較する方法を決定するには、ForAnyValue
または ForAllValues
集合演算子をポリシー条件で使用します。セット演算子の詳細については、IAM「 ユーザーガイド」の「複数のキーと値の使用」を参照してください。
-
ForAnyValue: KMSキーに関連付けられたエイリアスを少なくとも 1 つ、ポリシー条件のエイリアスと一致する必要があります。その他のエイリアスは許可されます。KMS キーにエイリアスがない場合、条件は満たされません。
-
ForAllValues: KMSキーに関連付けられたすべてのエイリアスは、ポリシー内のエイリアスと一致する必要があります。このセット演算子は、KMSキーに関連付けられたエイリアスをポリシー条件のエイリアスに制限します。エイリアスを必要としませんが、不特定のエイリアスを禁止します。
例えば、次のIAMポリシーステートメントでは、プリンシパルがfinance-key
エイリアスに関連付けられている指定された の任意のKMSキーで GenerateDataKeyオペレーションを呼び出す AWS アカウント ことを許可します。(影響を受けるキーのKMSキーポリシーは、プリンシパルのアカウントがこのオペレーションにキーを使用することを許可する必要があります)。KMS キーに関連付けられている可能性のある多数のエイリアスのいずれかが である場合に条件が満たされていることを示すにはalias/finance-key
、条件は ForAnyValue
set 演算子を使用します。
kms:ResourceAliases
条件はリクエストではなくリソースに基づいているため、リクエストがキー ID finance-key
またはKMSキーを使用してキーARNを識別する場合でも、エイリアスに関連付けられたKMSキーに対して への呼び出しがGenerateDataKey
成功します。
{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*" ], "Condition": { "ForAnyValue:StringEquals": { "kms:ResourceAliases": "alias/finance-key" } } }
次のIAMポリシーステートメント例では、プリンシパルがKMSキーを有効または無効にできますが、KMSキーのすべてのエイリアスに「」が含まれている場合にのみ許可されますTest
。 このポリシーステートメントは、2 つの条件を使用します。set ForAllValues
演算子の条件では、KMSキーに関連付けられたすべてのエイリアスに「Test」が含まれている必要があります。set ForAnyValue
演算子の条件では、KMSキーに「Test」を含むエイリアスが少なくとも 1 つ必要です。このForAnyValue
条件がない場合、このポリシーステートメントは、プリンシパルにエイリアスのないKMSキーの使用を許可していました。
{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:EnableKey", "kms:DisableKey" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "ForAllValues:StringLike": { "kms:ResourceAliases": [ "alias/*Test*" ] }, "ForAnyValue:StringLike": { "kms:ResourceAliases": [ "alias/*Test*" ] } } }
kms:ReplicaRegion
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、プリンシパル AWS リージョン がマルチリージョンキー をレプリケートできる を制限できます。kms:ReplicaRegion
条件キーは、リクエスト内の ReplicaRegionパラメータの値に基づいてReplicateKeyオペレーションへのアクセスを制御します。このパラメータは、 AWS リージョン
の新しいレプリカキーを指定します。
条件の値は、 us-east-1
や などの 1 つ以上の AWS リージョン 名前ap-southeast-2
、または などの名前パターンですeu-*
。が AWS KMS サポート AWS リージョン する の名前のリストについては、「」のAWS Key Management Service 「エンドポイントとクォータ」を参照してください AWS 全般のリファレンス。
例えば、次のキーポリシーステートメントでは、 kms:ReplicaRegion
条件キーを使用して、 ReplicaRegion
パラメータの値が指定されたリージョンの 1 つである場合にのみ、プリンシパルが ReplicateKey オペレーションを呼び出すことを許可します。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Administrator" }, "Action": "kms:ReplicateKey" "Resource": "*", "Condition": { "StringEquals": { "kms:ReplicaRegion": [ "us-east-1", "eu-west-3", "ap-southeast-2" ] } } }
この条件キーは、 ReplicateKey オペレーションへのアクセスのみを制御します。UpdatePrimaryRegion オペレーションへのアクセスを制御するには、kms:PrimaryRegion 条件キーを使用します。
kms:RetiringPrincipal
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、リクエスト内の RetiringPrincipalパラメータの値に基づいてCreateGrantオペレーションへのアクセスを制御できます。例えば、CreateGrant
リクエストRetiringPrincipal
の が条件ステートメントRetiringPrincipal
の と一致する場合にのみ、 KMS キーを使用する許可を作成できます。
廃止プリンシパルを指定するには、プリンシパルの Amazon リソースネーム (ARN) AWS を使用します。有効なプリンシパルには AWS アカウント、、 IAM ユーザー、IAMロール、フェデレーティッドユーザー、および引き受けたロールユーザーが含まれます。プリンシパルのARN構文については、 IAM ユーザーガイドIAMARNsの「」を参照してください。
次のキーポリシーステートメントの例では、ユーザーがKMSキーの許可を作成できるようにします。kms:RetiringPrincipal
条件キーが、グラント内の削除プリンシパルが LimitedAdminRole
である CreateGrant
リクエストへのアクセス許可を制限します。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:RetiringPrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole" } } }
以下の資料も参照してください。
kms:RotationPeriodInDays
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
数値 |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、プリンシパルがEnableKeyRotationリクエストの RotationPeriodInDays
パラメータで指定できる値を制限できます。
は、各自動キーローテーション日の間の日数RotationPeriodInDays
を指定します。 AWS KMS では、90 ~ 2560 日間のローテーション期間を指定できますが、kms:RotationPeriodInDays
条件キーを使用して、有効な範囲内で最小ローテーション期間を強制するなど、ローテーション期間をさらに制約できます。
例えば、次のキーポリシーステートメントでは、kms:RotationPeriodInDays
条件キーの使用により、ローテーション期間が 180 日以内である場合にプリンシパルがキーローテーションを有効化できないようにしています。
{ "Effect": "Deny", "Action": "kms:EnableKeyRotation", "Principal": "*", "Resource": "*", "Condition" : { "NumericLessThanEquals" : { "kms:RotationPeriodInDays" : "180" } } }
kms:ScheduleKeyDeletionPendingWindowInDays
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
数値 |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:SigningAlgorithm
条件キーを使用して、リクエスト内の SigningAlgorithmパラメータの値に基づいて、署名および検証オペレーションへのアクセスを制御できます。この条件キーは AWS KMS、 の外部で非対称キーKMSペアのパブリックキーで署名を検証するなど、 の外部で実行されるオペレーションには影響しません AWS KMS。
次のキーポリシーの例では、リクエストに使用される署名アルゴリズムが などの RSASSA_PSS アルゴリズムである場合にのみ、 testers
ロールを引き受けるユーザーがKMSキーを使用してメッセージに署名することを許可していますRSASSA_PSS_SHA512
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringLike": { "kms:SigningAlgorithm": "RSASSA_PSS*" } } }
以下の資料も参照してください。
kms:ValidTo
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
タイムスタンプ |
単一値 |
|
キーポリシーと 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" } } }
以下の資料も参照してください。
kms:ViaService
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
KMS キーリソースオペレーション |
キーポリシーと IAM ポリシー |
kms:ViaService
条件キーは、KMSキーの使用を指定された AWS サービスからのリクエストに制限します。各 kms:ViaService
条件キーに 1 つ以上のサービスを指定できます。オペレーションは、KMSキーリソースオペレーション 、つまり特定のKMSキーに対して認可されたオペレーションである必要があります。KMS キーリソースオペレーションを識別するには、 アクションとリソーステーブル で、オペレーションのResources
列KMS key
に の値を探します。
例えば、次のキーポリシーステートメントでは、 kms:ViaService
条件キーを使用して、 に代わってリクエストが米国西部 (オレゴン) リージョンRDSの Amazon EC2または Amazon から送信された場合にのみ、カスタマーマネージドキーを指定されたアクションに使用できるようにしますExampleRole
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "rds.us-west-2.amazonaws.com" ] } } }
kms:ViaService
条件キーを使用して、リクエストが特定のサービスから送信されたときにKMSキーを使用するアクセス許可を拒否することもできます。例えば、次のキーポリシーからのポリシーステートメントでは kms:ViaService
条件キーを使用して、ExampleRole
の代わりに AWS Lambda からリクエストが送信された場合に、カスタマーマネージドキーが Encrypt
オペレーションに使用されるのを防ぎます。
{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "lambda.us-west-2.amazonaws.com" ] } } }
重要
kms:ViaService
条件キーを使用する場合は、サービスが AWS アカウントのプリンシパルの代わりにリクエストを行います。これらのプリンシパルは、次のアクセス許可が必要です。
-
KMS キーを使用するアクセス許可。プリンシパルの代わりにサービスがカスタマーマネージドキーを使用できるようにするために、プリンシパルは統合されたサービスにこれらのアクセス許可を付与する必要があります。詳細については、「AWS サービスでのAWS KMS 暗号化の使用」を参照してください。
-
統合されたサービスを使用するアクセス権限。と統合する AWS サービスへのアクセスをユーザーに付与する方法については AWS KMS、統合サービスのドキュメントを参照してください。
すべての AWS マネージドキー は、キーポリシードキュメントで kms:ViaService
条件キーを使用します。この条件により、KMSキーは、KMSキーを作成したサービスからのリクエストにのみ使用できます。のキーポリシーを表示するには AWS マネージドキー、 GetKeyPolicyオペレーションを使用します。
kms:ViaService
条件キーは IAMおよび キーポリシーステートメントで有効です。指定するサービスは、AWS KMSと統合kms:ViaService
条件キーをサポートしている必要があります。
kms:ViaService
条件キーをサポートするサービス
次の表は、 と統合 AWS KMS され、カスタマーマネージドキーでkms:ViaService
の条件キーの使用をサポートする AWS サービスの一覧です。この表のサービスは、すべてのリージョンで使用できるとは限りません。すべての AWS パーティションで AWS KMS ViaService 名前の.amazonaws.com
サフィックスを使用します。
注記
この表のすべてのデータを表示するには、水平または垂直にスクロールする必要があります。
サービス名 | AWS KMS ViaService 名前 |
---|---|
AWS App Runner | apprunner. |
AWS 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 Bedrock モデルコピー | bedrock. |
Amazon Chime SDK | chimevoiceconnector. |
AWS Clean Rooms ML | cleanrooms-ml. |
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 EventBridge | events. |
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. |
AWS Mainframe Modernization アプリケーションテスト | apptest. |
Amazon Managed Blockchain | managedblockchain. |
Amazon Managed Streaming for Apache Kafka (Amazon MSK) | kafka. |
Amazon Managed Workflows for Apache Airflow (MWAA) | airflow. |
Amazon MemoryDB | 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 台帳データベース (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 Step Functions | states. |
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. |
kms: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" } } }
以下の資料も参照してください。
kms: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" } } }
以下の資料も参照してください。