翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS KMS には、キーポリシーと IAM ポリシーで使用できる一連の条件キーが用意されています。これらの条件キーは に固有です AWS KMS。例えば、kms:EncryptionContext:context-key
条件キーは、対称暗号化 KMS キーへのアクセスを制御するときに特定の暗号化コンテキストを要求するために使用できます。
API オペレーションリクエストの条件
多くの AWS KMS 条件キーは、 AWS KMS オペレーションのリクエストのパラメータの値に基づいて KMS キーへのアクセスを制御します。例えば、IAM ポリシーの kms:KeySpec 条件キーを使用すると、CreateKey
リクエストの KeySpec
パラメータ値が RSA_4096
の場合にのみ、CreateKey オペレーションの使用を許可できます。
このタイプの条件は、パラメータのデフォルト値を使用する場合など、リクエストにパラメータが表示されない場合でも機能します。例えば、kms:KeySpec 条件キーを使用すると、KeySpec
パラメータ値が SYMMETRIC_DEFAULT
(デフォルト値) の場合にのみ、CreateKey
オペレーションの使用をユーザーに許可できます。この条件では、SYMMETRIC_DEFAULT
値を持つ KeySpec
パラメータを持つリクエストと、KeySpec
パラメータを持たないリクエストが許可されます。
API オペレーションで使用される KMS キーの条件
一部の AWS KMS 条件キーは、オペレーションで使用される KMS キーのプロパティに基づいてオペレーションへのアクセスを制御できます。例えば、kms:KeyOrigin 条件を使用すると、KMS キーの Origin
が AWS_KMS
の場合にのみ、プリンシパルが GenerateDataKey を KMS キーで呼び出すことができます。この方法で条件キーを使用できるかどうかを確認するには、条件キーの説明を参照してください。
このオペレーションは KMS キーリソースオペレーションである必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources
列の KMS key
の値を探します。ListKeys など、特定の KMS キーリソースに対して認可されていないオペレーションでこのタイプの条件キーを使用すると、条件が満たされないため、アクセス許可は有効になりません。ListKeys
オペレーションの認可に関与する KMS キーリソースおよび KeySpec
プロパティはありません。
以下のトピックでは、各 AWS KMS 条件キーについて説明し、ポリシー構文を示すポリシーステートメントの例を示します。
条件キーで集合演算子を使用する
ポリシー条件が、リクエスト内のタグのセットとポリシー内のタグのセットなど、2 つの値のセットを比較する場合、セットを比較する AWS 方法を に指示する必要があります。この目的のために、IAM は、2 つの集合演算子、ForAnyValue
および ForAllValues
を定義します。集合演算子は、それらを必要とする複数値を持つ条件キーでのみ使用します。単一値の条件キーで集合演算子を使用しないでください。ポリシーステートメントは必ず、本稼働環境での使用前に完全にテストしてください。
条件キーは単一値または複数値です。 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 ユーザーガイドの Security Warning – ForAllValues with single valued key を参照してください。
トピック
kms:BypassPolicyLockoutSafetyCheck
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
IAM ポリシーのみ キーポリシーと IAM ポリシー |
kms:BypassPolicyLockoutSafetyCheck
条件キーは、リクエストの パラメータの値に基づき、CreateKey オペレーションおよび PutKeyPolicyBypassPolicyLockoutSafetyCheck
オペレーションへのアクセスを制御します。
次の IAM ポリシーステートメントの例では、CreateKey
リクエストの BypassPolicyLockoutSafetyCheck
パラメータ値が true.
の場合に、KMS キーを作成するアクセス許可を拒否することで、ユーザーがポリシーのロックアウト安全チェックを回避できないようにします。
{
"Effect": "Deny",
"Action": [
"kms:CreateKey",
"kms:PutKeyPolicy"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:BypassPolicyLockoutSafetyCheck": true
}
}
}
IAM ポリシーまたはキーポリシーで kms:BypassPolicyLockoutSafetyCheck
条件キーを使用して、 PutKeyPolicy
オペレーションへのアクセスを制御することもできます。次のキーポリシーのポリシーステートメントの例では、KMS キーのポリシーを変更する際に、ユーザーがポリシーのロックアウト安全チェックを回避できないようにします。
このポリシーステートメントでは、明示的に Deny
を使用せずに、Null 条件演算子とともに Allow
を使用し、リクエストに BypassPolicyLockoutSafetyCheck
パラメータが含まれていない場合にのみアクセスを許可します。パラメータが使用されていない場合、デフォルト値は false
です。この弱いポリシーステートメントは、バイパスが必要な限定された状況では上書きされる場合があります。
{
"Effect": "Allow",
"Action": "kms:PutKeyPolicy",
"Resource": "*",
"Condition": {
"Null": {
"kms:BypassPolicyLockoutSafetyCheck": true
}
}
}
以下の資料も参照してください。
kms:CallerAccount
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
KMS キーリソースのオペレーション カスタムキーストアのオペレーション |
キーポリシーと IAM ポリシー |
この条件キーを使用して、 AWS アカウントのすべてのアイデンティティ (ユーザーおよびロール) へのアクセスを許可または拒否できます。キーポリシーでは、Principal
要素を使って、ポリシーステートメントが適用される ID を指定できます。Principal
要素の構文では、 AWS アカウントのすべてのアイデンティティを指定することはできません。ただし、この条件キーをすべての ID AWS を指定する Principal
要素と組み合わせることで、この効果を実現できます。
これを使用して、任意の KMS キーリソースオペレーション、つまり特定の KMS キーを使用する AWS KMS オペレーションへのアクセスを制御できます。KMS キーリソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources
列の KMS key
の値を探します。また、カスタムキーストアを管理するオペレーションにも有効です。
例えば、次のポリシーステートメントは、kms:CallerAccount
条件キーを使用する方法を示します。このポリシーステートメントは、Amazon EBS の AWS マネージドキー のキーポリシーにあります。すべての ID AWS を指定する Principal
要素と kms:CallerAccount
条件キーを組み合わせて、 AWS アカウント 111122223333 のすべての ID へのアクセスを効果的に許可します。これには、Amazon EBS を通過するリクエストのみを許可することで、アクセス許可をさらに制限するための追加の AWS KMS 条件キー (kms:ViaService
) が含まれています。詳細については、「kms:ViaService」を参照してください。
{
"Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
"Effect": "Allow",
"Principal": {"AWS": "*"},
"Condition": {
"StringEquals": {
"kms:CallerAccount": "111122223333",
"kms:ViaService": "ec2.us-west-2.amazonaws.com"
}
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:CreateGrant",
"kms:DescribeKey"
],
"Resource": "*"
}
kms:CustomerMasterKeySpec (非推奨)
kms:CustomerMasterKeySpec
条件キーは非推奨です。代わりに、kms:KeySpec 条件キーを使用します。
kms:CustomerMasterKeySpec
および kms:KeySpec
条件キーは同じように機能します。名前だけが異なります。kms:KeySpec
を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。
kms:CustomerMasterKeyUsage (非推奨)
kms:CustomerMasterKeyUsage
条件キーは非推奨です。代わりに、kms:KeyUsage 条件キーを使用します。
kms:CustomerMasterKeyUsage
および kms:KeyUsage
条件キーは同じように機能します。名前だけが異なります。kms:KeyUsage
を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。
kms:DataKeyPairSpec
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、リクエストの KeyPairSpec
パラメータ値に基づく、GenerateDataKeyPair および GenerateDataKeyPairWithoutPlaintext オペレーションへのアクセスを制御します。例えば、特定のタイプのデータキーペアのみを生成することをユーザーに許可できます。
次のキーポリシーステートメントの例では、kms:DataKeyPairSpec
条件キーを使用して、ユーザーが KMS キーを使用して RSA データキーペアのみを生成できるようにします。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ExampleRole"
},
"Action": [
"kms:GenerateDataKeyPair",
"kms:GenerateDataKeyPairWithoutPlaintext"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:DataKeyPairSpec": "RSA*"
}
}
}
以下の資料も参照してください。
kms:EncryptionAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:EncryptionAlgorithm
条件キーを使用して、オペレーションで使用される暗号化アルゴリズムに基づいて暗号化オペレーションへのアクセスを制御できます。Encrypt、Decrypt、および ReEncrypt オペレーションの場合、リクエストの EncryptionAlgorithm パラメータ値に基づいてアクセスを制御します。データキーとデータキーペアを生成するオペレーションでは、データキーの暗号化に使用される暗号化アルゴリズムに基づいてアクセスを制御します。
この条件キーは、非対称 KMS キーペアのパブリックキーによる暗号化など AWS KMS、 の外部で実行されるオペレーションには影響しません AWS KMS。
リクエスト内の暗号化アルゴリズムパラメータ
ユーザーが 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*
が GenerateDataKey、GenerateDataKeyWithoutPlaintext、GenerateDataKeyPair、GenerateDataKeyPairWithoutPlaintext をアクセス許可へ追加することを含みます。この条件は、常に対称暗号化アルゴリズムを使用するため、これらのオペレーションには影響しません。
{
"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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと 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:EncryptionContext:context-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:EncryptionContext:context-key および kms:EncryptionContextKeys を使用します。次のポリシーステートメントでは、kms:EncryptionContext:AppName
条件キーを使用してリクエストの AppName=ExampleApp
暗号化コンテキストペアを要求します。ForAllValues
集合演算子を持つ kms:EncryptionContextKeys
条件キーを使用して、AppName
暗号化コンテキストキーのみを許可することもできます。
ForAllValues
集合演算子は、リクエストの暗号化コンテキストキーを AppName
に制限します。ポリシーステートメントに、ForAllValues
集合演算子を持つ kms:EncryptionContextKeys
条件が単独で使用された場合、この集合演算子は、暗号化コンテキストのないリクエストを許可します。ただし、リクエストに暗号化コンテキストがない場合、kms:EncryptionContext:AppName
条件は失敗します。ForAllValues
集合演算子の詳細については、IAM ユーザーガイドの複数のキーと値の使用を参照してください。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/KeyUsers"
},
"Action": "kms:GenerateDataKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:AppName": "ExampleApp"
},
"ForAllValues:StringEquals": {
"kms:EncryptionContextKeys": [
"AppName"
]
}
}
}
この条件キーを使用して、特定のオペレーションの KMS キーへのアクセスを拒否することもできます。次の例のキーポリシーステートメントでは、Deny
効果を使用して、リクエストの暗号化コンテキストに Stage=Restricted
暗号化コンテキストペアが含まれる場合に、プリンシパルがKMS キーを使用することを禁止します。この条件により、他の暗号化コンテキストペアを含むリクエストが許可されます。これには、Stage
キーおよびその他の値 (Stage=Test
など) を持つ暗号化コンテキストペアが含まれます。
{
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
},
"Action": "kms:GenerateDataKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:Stage": "Restricted"
}
}
}
複数の暗号化コンテキストペアを使用する
複数の暗号化コンテキストペアを要求または禁止できます。また、複数の暗号化コンテキストペアのうちの 1 つを要求することもできます。これらの条件を解釈するために使用されるロジックの詳細については、IAM ユーザーガイドの複数のキーまたは値を持つ条件の作成を参照してください。
注記
このトピックの以前のバージョンでは、kms:EncryptionContext:context-key 条件キーを持つ ForAnyValue
および 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:EncryptionContext:context-key および kms:EncryptionContextKeys を使用します。次のキーポリシーステートメントでは、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 ポリシー条件と、大文字と小文字が区別される条件演算子 (StringEquals
など) を使用します。このポリシー条件では、暗号化コンテキストキーがポリシー条件値であるため、大文字と小文字の区別は条件演算子によって決定されます。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
},
"Action": "kms:GenerateDataKey",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"kms:EncryptionContextKeys": "AppName"
}
}
}
暗号化コンテキストのキーと値の両方に対して大文字と小文字を区別する評価を要求するには、同じポリシーステートメントで kms:EncryptionContextKeys
と kms:EncryptionContext:context-key のポリシー条件を一緒に使用します。大文字と小文字を区別する条件演算子 (StringEquals
など) は、常に条件の値に適用されます。暗号化コンテキストキー (AppName
など) は kms:EncryptionContextKeys
条件の値です。暗号化コンテキスト値 (ExampleApp
など) は、kms:EncryptionContext:context-key 条件の値です。
例えば、次のキーポリシーステートメントでは、StringEquals
演算子で大文字と小文字が区別されるため、暗号化コンテキストキーと暗号化コンテキスト値の両方で大文字と小文字が区別されます。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
},
"Action": "kms:GenerateDataKey",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"kms:EncryptionContextKeys": "AppName"
},
"StringEquals": {
"kms:EncryptionContext:AppName": "ExampleApp"
}
}
}
暗号化コンテキスト条件での変数の使用
暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など、別の型を使用する場合、 はそれをリテラル文字列として AWS KMS 解釈します。
"encryptionContext": {
"department": "10103.0"
}
ただし、kms:EncryptionContext:context-key
条件キーの値は IAM ポリシー変数となる可能性があります。これらのポリシー変数はリクエストの値に基づいて実行時に解決されます。例えば、aws:CurrentTime
はリクエストの時間に解決され、aws:username
は呼び出し元のフレンドリ名に解決されます。
これらのポリシー変数を使用し、ポリシーステートメントを作成して、暗号化コンテキストに限定的な情報 (呼び出し元のユーザー名など) を必要とする条件を指定できます。ポリシーステートメントに変数を含めるため、ロールを引き受けることができるすべてのユーザーに同じポリシーステートメントを使用できます。ユーザー別にポリシーステートメントを記述する必要はありません。
ロールを引き受けることができるすべてのユーザーが同じ KMS キーを使用して、データを暗号化および復号する状況を考慮します。ただし、それらのユーザーに自分が暗号化したデータのみの復号を許可するとします。まず、すべてのリクエストに、キーが user
で値が発信者の AWS ユーザー名である暗号化コンテキスト AWS KMS を含めるように要求します。次に例を示します。
"encryptionContext": {
"user": "bob"
}
次に、この要件を定義するために、以下の例のようなポリシーステートメントを使用できます。このポリシーステートメントでは、TestTeam
ロールに、KMS キーを使用してデータを暗号化および復号するためのアクセス許可を付与します。ただし、そのアクセス許可は、"user":
"
ペアがリクエストの暗号化コンテキストに含まれる場合にのみ有効です。条件では、ユーザー名を表すために <username>
"aws:username
policy 変数を使用します。
リクエストが評価されるとき、条件の変数が呼び出し元のユーザー名に置き換えられます。そのため条件では、「bob」には "user":
"bob"
、「alice」には "user": "alice"
の暗号化コンテキストを必須とします。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/TestTeam"
},
"Action": [
"kms:Decrypt",
"kms:Encrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:user": "${aws:username}"
}
}
}
IAM ポリシー変数は、kms:EncryptionContext:context-key
条件キーの値でのみ使用できます。キーで変数を使用することはできません。
変数に プロバイダ固有のコンテキストキー を使用することもできます。これらのコンテキストキー AWS は、ウェブ ID フェデレーションを使用して にログインしたユーザーを一意に識別します。
すべての変数と同様に、これらの変数は、実際の暗号化コンテキストではなく kms:EncryptionContext:context-key
ポリシー条件でのみ使用できます。また、条件のキーではなく値でのみ使用できます。
例えば、以下のキーポリシーステートメントは前のものと似ています。ただし、この条件には、Amazon Cognito ユーザープールにログインしたユーザーを値が一意に識別する、キーが sub
の暗号化コンテキストが必要です。Amazon Cognito でのユーザーおよびロールの識別についての詳細は、Amazon Cognito デベロッパーガイドの IAM ロールを参照してください。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/TestTeam"
},
"Action": [
"kms:Decrypt",
"kms:Encrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}"
}
}
}
以下の資料も参照してください。
kms:EncryptionContextKeys
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
複数値 |
|
キーポリシーと 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
}
}
}
以下の資料も参照してください。
kms:ExpirationModel
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:ExpirationModel
条件キーは、リクエストの ExpirationModel パラメータの値に基づき、ImportKeyMaterial オペレーションへのアクセスを制御します。
ExpirationModel
は、インポートされたキーマテリアルの有効期限が切れているかどうかを判断するオプションのパラメータです。有効な値は、KEY_MATERIAL_EXPIRES
および KEY_MATERIAL_DOES_NOT_EXPIRE
です。KEY_MATERIAL_EXPIRES
はデフォルト値です。
有効期限の日付と時刻は、 Validto パラメーターの値によって決まります。ValidTo
パラメータの値が ExpirationModel
である場合を除き、KEY_MATERIAL_DOES_NOT_EXPIRE
パラメータが必要です。また、kms:ValidTo 条件キーを使用して、アクセス条件として特定の有効期限を設定することもできます。
次のポリシーステートメントの例では、kms:ExpirationModel
条件キーを使用して、リクエストに ExpirationModel
パラメータが含まれていて、その値が KEY_MATERIAL_DOES_NOT_EXPIRE
の場合にのみ、ユーザーが KMS キーにキーマテリアルをインポートできるようにします。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
},
"Action": "kms:ImportKeyMaterial",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE"
}
}
}
また、kms:ExpirationModel
条件キーを使用して、キーマテリアルの有効期限が切れている場合にのみ、ユーザーがキーマテリアルをインポートできるようにもします。次のポリシーステートメントの例では、Null 条件演算子とともに kms:ExpirationModel
条件キーを使用して、リクエストに ExpirationModel
パラメータが含まれていない場合にのみ、ユーザーがキーマテリアルをインポートできるようにします。ExpirationModel のデフォルト値は KEY_MATERIAL_EXPIRES
です。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
},
"Action": "kms:ImportKeyMaterial",
"Resource": "*",
"Condition": {
"Null": {
"kms:ExpirationModel": true
}
}
}
以下の資料も参照してください。
kms:GrantConstraintType
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと 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 KMSと統合されたAWS のサービス
次のキーポリシーステートメント例では、 kms:GrantIsForAWSResource
条件キーを使用しています。これにより AWS KMS、Amazon EBS などの と統合された AWS サービスが、指定されたプリンシパルに代わってこの KMS キーに許可を作成できるようになります。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ExampleRole"
},
"Action": "kms:CreateGrant",
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
以下の資料も参照してください。
kms:GrantOperations
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
複数値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
IAM とキーポリシー |
この条件キーを使用して、リクエストの CreateGrant パラメータの値に基づき、GranteePrincipal オペレーションへのアクセスを制御できます。例えば、CreateGrant
リクエストの被付与者プリンシパルが条件ステートメントで指定されたプリンシパルと一致した場合にのみ、KMS キーを使用する権限を作成できます。
グラント対象のプリンシパルを指定するには、 AWS プリンシパルの Amazon リソースネーム (ARN) を使用します。有効なプリンシパルには AWS アカウント、IAM ユーザー、IAM ロール、フェデレーティッドユーザー、引き受けたロールユーザーが含まれます。プリンシパル向け ARN 構文については、「IAM ユーザーガイド」の「IAM の ARN」を参照してください。
次のキーポリシーステートメントの例では、kms:GranteePrincipal
条件キーを使用して、権限の被付与者プリンシパルが LimitedAdminRole
の場合にのみ、KMS キーの権限を作成します。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ExampleRole"
},
"Action": "kms:CreateGrant",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole"
}
}
}
以下の資料も参照してください。
kms:KeyAgreementAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:KeyAgreementAlgorithm
条件キーを使用することで、リクエスト内の KeyAgreementAlgorithm
パラメータの値に基づいて DeriveSharedSecret オペレーションへのアクセスを制御できます。KeyAgreementAlgorithm
では、唯一の有効な値は ECDH
です。
例えば、次のキーポリシーステートメントは、kms:KeyAgreementAlgorithm
条件キーを使用して、KeyAgreementAlgorithm
が ECDH
でない限り、DeriveSharedSecret へのすべてのアクセスを拒否します。
{
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ExampleRole"
},
"Action": "kms:DeriveSharedSecret",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"kms:KeyAgreementAlgorithm": "ECDH"
}
}
}
以下の資料も参照してください。
kms:KeyOrigin
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
KMS キーリソースのオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeyOrigin
条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの Origin
プロパティの値に基づいて、オペレーションへのアクセスを制御します。これは、リソース条件または要求条件として機能します。
この条件キーを使用して、リクエストの Origin パラメータの値に基づき、CreateKey オペレーションへのアクセスを制御できます。Origin
の有効値は、AWS_KMS
、AWS_CLOUDHSM
、および EXTERNAL
です。
たとえば、キーマテリアルが AWS KMS (AWS_KMS
) で生成された場合にのみ、キーマテリアルがカスタムキーストアに関連付けられた AWS CloudHSM クラスター () で生成された場合にのみ、またはキーマテリアルが外部ソース (AWS_CLOUDHSM
) からインポートされた場合にのみ、KMS キーを作成できますEXTERNAL
。 AWS KMS カスタムキーストア キーの 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
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"
}
}
}
以下の資料も参照してください。
kms:KeyUsage
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
KMS キーリソースのオペレーション |
IAM ポリシー キーポリシーと IAM ポリシー |
kms:KeyUsage
条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの KeyUsage
プロパティの値に基づいて、オペレーションへのアクセスを制御します。
この条件キーを使用し、リクエストの KeyUsage パラメータの値に基づいて、CreateKey オペレーションへのアクセスを制御できます。KeyUsage
の有効値は、ENCRYPT_DECRYPT
、SIGN_VERIFY
、GENERATE_VERIFY_MAC
、KEY_AGREEMENT
です。
例えば、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"
}
}
}
以下の資料も参照してください。
kms:MacAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
KMS キーリソースのオペレーション |
キーポリシーと IAM ポリシー |
この条件キーを使用して、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーのみのオペレーションを許可できます。kms:MultiRegionKeyType
条件キーは、KMS キーの MultiRegionKeyType
プロパティに基づいて、KMS キーに対する AWS KMS オペレーションと CreateKey オペレーションへのアクセスを制御します。有効な値は PRIMARY
および REPLICA
です。マルチリージョンキーのみに MultiRegionKeyType
プロパティがあります
通常は、IAM ポリシーの kms:MultiRegionKeyType
条件キーを使用して、複数の KMS キーへのアクセスを制御します。ただし、特定のマルチリージョンキーがプライマリまたはレプリカに変更されることがあるため、キーポリシーでこの条件を使用して、特定のマルチリージョンキーがプライマリキーまたはレプリカキーである場合にのみ、オペレーションを許可します。
例えば、次の IAM ポリシーステートメントでは kms:MultiRegionKeyType
条件キーを使用して、指定した AWS アカウントのマルチリージョンレプリカキーのみでキー削除のスケジュールおよびキャンセルを実行することをプリンシパルに許可します。
{
"Effect": "Allow",
"Action": [
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "arn:aws:kms:*:111122223333:key/*",
"Condition": {
"StringEquals": {
"kms:MultiRegionKeyType": "REPLICA"
}
}
}
すべてのマルチリージョンキーへのアクセスを許可または拒否するには、両方の値または kms:MultiRegionKeyType
の null 値を使用します。ただし、この目的には kms:MultiRegion 条件キーの使用を推奨します。
kms:PrimaryRegion
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 (リスト) |
単一値 |
|
キーポリシーと IAM ポリシー |
この条件キーを使用して、UpdatePrimaryRegion オペレーションの送信先リージョンを制限します。これらは AWS リージョン 、マルチリージョンのプライマリキーをホストできる です。
kms:PrimaryRegion
条件キーは、PrimaryRegion
パラメータ値に基づいて UpdatePrimaryRegion オペレーションへのアクセスを制御します。PrimaryRegion
パラメータは、プライマリに昇格するマルチリージョンレプリカキー AWS リージョン の を指定します。 レプリカキー条件の値は、 や などの 1 us-east-1
つ以上の AWS リージョン 名前ap-southeast-2
、または などのリージョン名パターンです。 eu-*
例えば、次のキーポリシーステートメントでは kms:PrimaryRegion
条件キーを使用して、プリンシパルがマルチリージョンキーのプライマリリージョンを、指定した 4 つのリージョンのうちの 1 つに更新できるようにします。
{
"Effect": "Allow",
"Action": "kms:UpdatePrimaryRegion",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/Developer"
},
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:PrimaryRegion": [
"us-east-1",
"us-west-2",
"eu-west-3",
"ap-southeast-2"
]
}
}
}
kms:ReEncryptOnSameKey
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
ブール値 |
単一値 |
|
キーポリシーと 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 キーを識別するエイリアスに基づいて、暗号化オペレーション (GetPublicKey
または DescribeKey
) で使用される KMS キーへのアクセスを制御します。(このポリシー条件は、GenerateRandom オペレーションが KMS キーまたはエイリアスを使用しないため、オペレーションには影響しません)。
この条件は、 で属性ベースのアクセスコントロール (ABAC) をサポートします。これにより AWS KMS、KMS キーのタグとエイリアスに基づいて KMS キーへのアクセスを制御できます。ポリシーや権限を変更せずに、タグとエイリアスを使用して KMS キーへのアクセスを許可または拒否できます。詳細については、「の ABAC AWS KMS」を参照してください。
このポリシー条件でエイリアスを指定するには、エイリアス名 (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
の値を探します。
この条件では、 AWS KMSの属性ベースのアクセスコントロール (ABAC) をサポートします。ABAC を使用すると、KMS キーに割り当てられたタグと KMS キーに関連付けられたエイリアスに基づいて、KMS キーへのアクセスを制御できます。ポリシーや権限を変更せずに、タグとエイリアスを使用して KMS キーへのアクセスを許可または拒否できます。詳細については、「の ABAC AWS KMS」を参照してください。
エイリアスは AWS アカウント および リージョンで一意である必要がありますが、この条件では、同じリージョン内の複数の KMS キー ( StringLike
比較演算子を使用) または AWS リージョン 各アカウントの異なる 内の複数の KMS キーへのアクセスを制御できます。
注記
kms:ResourceAliases 条件は、KMS キーが aliases per KMS key クォータに適合している場合にのみ有効です。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 キーに対して GenerateDataKey finance-key
オペレーションを呼び出す 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*"
]
}
}
}
kms: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
パラメータ値が指定されたリージョンの 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 キーの使用権限を作成します。
削除プリンシパルを指定するには、 AWS プリンシパルの Amazon リソースネーム (ARN) を使用します。有効なプリンシパルには AWS アカウント、IAM ユーザー、IAM ロール、フェデレーティッドユーザー、引き受けたロールユーザーが含まれます。プリンシパル向け ARN 構文については、「IAM ユーザーガイド」の「IAM の ARN」を参照してください。
次のポリシーステートメント例は、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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:SigningAlgorithm
条件キーを使用し、リクエストの SigningAlgorithm パラメータ値に基づいて、Sign および Verify オペレーションへのアクセスを制御できます。この条件キーは AWS KMS、非対称 KMS キーペアの外部でパブリックキーを使用して署名を検証するなど、 の外部で実行されるオペレーションには影響しません AWS KMS。
次のキーポリシーの例では、リクエストに使用される署名アルゴリズムが RSASSA_PSS アルゴリズム (RSASSA_PSS_SHA512
など) である場合にのみ、testers
ロールを引き受けることができるユーザーが KMS キーを使用してメッセージに署名できるようにします。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/testers"
},
"Action": "kms:Sign",
"Resource": "*",
"Condition": {
"StringLike": {
"kms:SigningAlgorithm": "RSASSA_PSS*"
}
}
}
以下の資料も参照してください。
kms:ValidTo
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
Timestamp |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
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 名 |
---|---|
Amazon API オペレーション | aiops. |
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 DeepRacer | deepracer. |
AWS Directory Service | directoryservice. |
Amazon DocumentDB | docdb-elastic. |
Amazon DynamoDB | dynamodb. |
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 Service | es. ,
aoss. |
Amazon OpenSearch カスタムパッケージ | custom-packages. |
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 AI | 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 Thin Client | thinclient. |
Amazon WorkSpaces Web | workspaces-web. |
AWS X-Ray | xray. |
kms:WrappingAlgorithm
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと 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 オペレーション | ポリシータイプ |
---|---|---|---|---|
|
String |
単一値 |
|
キーポリシーと 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"
}
}
}
以下の資料も参照してください。