AWS Key Management Service
開発者ガイド

AWS KMS でのポリシー条件の使用

キーポリシーおよび AWS Identity and Access Management ポリシー (IAM ポリシー) で、AWS KMS リソースへのアクセスをコントロールする条件を指定できます。ポリシーステートメントは、条件が true の場合にのみ有効です。たとえば、特定の日付の後にのみ適用されるポリシーステートメントが必要になる場合があります。また、特定の値が API リクエストに表示されているときにのみ、ポリシーステートメントによるアクセスコントロールが必要になる場合もあります。

条件を指定するには、IAM 条件ポリシー演算子を指定して、ポリシーステートメントの Condition 要素で事前定義された条件キーを使用します。条件キーは、AWS に一般的に適用されるものや、AWS KMS に固有のものがあります。

AWS グローバル条件キー

AWS には、グローバル条件キーが用意されています。これは、アクセスコントロールのために AWS を使用するすべての IAM サービスを対象として、事前に定義された一連の条件キーです。たとえば、aws:PrincipalArn 条件キーを使用して、リクエストのプリンシパルが、指定した Amazon リソースネーム (ARN) で表される場合のみアクセスを許可します。

IAM は、各 AWS サービスでサポートされるグローバル条件キーに加えて、AWS サービスでサポートを選択できる条件キーを定義します。AWS KMS は次のオプションのグローバル条件キーをサポートしています。

すべてのオプションのグローバル条件キーのリストと説明については、AWS Identity and Access Management ユーザーガイドの「一部のサービスに使用可能なキー」を参照してください。IAM ポリシーでこれらの条件キーを使用する例については、IAM ユーザーガイドの「リクエストへのアクセスの制御」および「タグキーの制御」を参照してください。

ポリシーで AWS KMS アクセス権限とともに IP アドレス条件を使用する

AWS KMS を使用して、統合された AWS サービスでデータを保護できます。ただし、同じポリシーステートメントで、AWS KMS へのアクセスを許可または拒否する IP アドレス条件の演算子または aws:SourceIp 条件キーを指定するときは注意が必要です。たとえば、「AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する」に示されているポリシーでは、AWS アクションが、指定された IP 範囲からのリクエストに制限されます。

次のシナリオを考えてみます。

  1. AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する」に示されているようなポリシーを、IAM ユーザーにアタッチします。aws:SourceIp 条件キーの値は、ユーザーの会社の IP アドレス範囲に設定します。この IAM ユーザーには、Amazon EBS、Amazon EC2、および AWS KMS を使用できるようにする他のポリシーがアタッチされています。

  2. ユーザーは、暗号化された EBS ボリュームを EC2 インスタンスにアタッチしようとします。このアクションは、関連するすべてのサービスを使用するためのアクセス権限がユーザーに付与されているにもかかわらず、承認エラーが発生して失敗します。

ステップ 2 が失敗するのは、AWS KMS に対する、ボリュームの暗号化されたデータキーの復号化リクエストは、Amazon EC2 インフラストラクチャに関連付けられた IP アドレスから送信されるためです。成功させるには、リクエストは、元のユーザーの IP アドレスからリクエストが送られてこなければなりません。ステップ 1 のポリシーは、指定された IP アドレスからのものではないすべてのリクエストを明示的に拒否するため、Amazon EC2 は、EBS ボリュームの暗号化されたデータキーを復号化するアクセス許可を拒否されます。

また、リクエストが Amazon VPC エンドポイントから送信されている場合、aws:sourceIP 条件キーは無効です。リクエストを AWS KMS VPC エンドポイントなどの VPC エンドポイントに制限するには、aws:sourceVpce または aws:sourceVpc 条件キーを使用します。詳細については、Amazon VPC ユーザーガイドの「VPC エンドポイント - エンドポイントの使用の管理」を参照してください。

ポリシーで AWS KMS アクセス権限とともに VPC エンドポイント条件を使用する

AWS KMS では、Amazon Virtual Private Cloud (Amazon VPC) エンドポイントがサポートされています。このエンドポイントは、AWS PrivateLink を使用します。特定の VPC または VPC エンドポイントへのアクセスを許可または拒否するには、IAM ポリシーで次のグローバル条件キーを使用します。また、こうしたグローバル条件キーを AWS KMS キーポリシーで使用して、AWS KMS CMK へのアクセスを、VPC または VPC エンドポイントからのリクエストに制限することもできます。

  • aws:SourceVpc は、指定した VPC からのリクエストにアクセスを制限します。

  • aws:SourceVpce は、指定した VPC エンドポイントからのリクエストにアクセスを制限します。

これらの条件キーをキーポリシーステートメントで使用して、AWS KMS CMK へのアクセスを許可または拒否すると、ユーザーに代わって AWS KMS を使用するサービスへのアクセスを意図せず拒否してしまう可能性があります。

IP アドレス条件キーの例のような状況にならないように注意してください。CMK のリクエストを VPC または VPC エンドポイントに制限すると、AWS KMS、Amazon S3 などの統合サービスからの Amazon EBS 呼び出しが失敗する可能性があります。ソースリクエストの最初の送信元が VPC 内または VPC エンドポイントであっても、これは発生することがあります。

AWS KMS 条件キー

AWS KMS には、キーポリシーと IAM ポリシーで使用できる、事前に定義された追加の条件キーのセットが用意されています。これらの条件キーは AWS KMS に固有です。たとえば、kms:EncryptionContext 条件キーを使用して、AWS KMS カスタマーマスターキー (CMK) へのアクセスを制御するときに特定の暗号化コンテキストを要求できます。

次のトピックでは、ポリシー構文を示すポリシーステートメントの例を含む各 AWS KMS の条件キーを説明します。

kms:BypassPolicyLockoutSafetyCheck

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

kms:BypassPolicyLockoutSafetyCheck

Boolean

CreateKey

PutKeyPolicy

CreateKey: IAM ポリシーのみ

PutKeyPolicy: IAM およびキーポリシー

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

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

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }

kms:BypassPolicyLockoutSafetyCheck ポリシーまたはキーポリシーで IAM 条件キーを使用して、PutKeyPolicy オペレーションへのアクセスを制御することもできます。次のキーポリシーのポリシーステートメントの例では、CMK のポリシーを変更する際にユーザーがポリシーのロックアウト安全チェックを回避できないようにします。

このポリシーステートメントでは、明示的に Deny を使用せずに、Allow を指定した Null condition operator を使用し、リクエストに BypassPolicyLockoutSafetyCheck パラメーターが含まれていない場合にのみアクセスを許可します。パラメータが使用されていない場合、デフォルト値は false です。バイパスが必要な限定された状況では、ポリシーステートメントの強度がわずかに弱くなると上書きされる場合があります。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }

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

kms:CallerAccount

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

kms:CallerAccount

文字列

kms:CallerAccount 条件キーは、以下を除くすべての AWS KMS オペレーションに存在します: CreateKeyGenerateRandomListAliasesListKeysListRetirableGrantsRetireGrant

キーポリシーのみ

この条件キーを使用して、IAM アカウントのすべての ID (AWS ユーザーおよびロール) へのアクセスを許可または拒否できます。キーポリシーでは、Principal 要素を使って、ポリシーステートメントが適用される ID を指定できます。Principal 要素の構文では、AWS アカウントのすべての ID を指定することはできません。しかし、この条件キーを、すべての Principal ID を指定する AWS 要素と組み合わせることによって、これを実現することができます。

たとえば、次のポリシーステートメントは、kms:CallerAccount 条件キーを使用する方法を示しています。このポリシーステートメントは、Amazon EBS 用に AWS によって管理される CMK のキーポリシー内にあります。すべての Principal ID を指定する AWS 要素を kms:CallerAccount 条件キーと組み合わせて、AWS アカウント 111122223333 のすべての ID へのアクセスが許可されます。これには、AWS KMS を通じたリクエストのみを許可して、さらにアクセス権限を制限する追加の kms:ViaService 条件キー (Amazon 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:EncryptionContext:

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

kms:EncryptionContext:

文字列

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyWithoutPlaintext

ReEncrypt

IAM およびキーポリシー

kms:EncryptionContext: 条件キープレフィックスを使用し、暗号化オペレーションのリクエストで暗号化コンテキストに基づいて CMK へのアクセスを制御できます。暗号化コンテキストペアのキーと値の両方を評価するには、この条件キープレフィックスを使用します。暗号化コンテキストキーのみを評価するには、kms:EncryptionContextKeys 条件キーを使用します。

暗号化コンテキストは、任意の AWS KMS 暗号化オペレーション (EncryptDecryptGenerateDataKeyGenerateDataKeyWithoutPlaintextReEncrypt) と CreateGrant オペレーションのリクエストに含めることができる、シークレットでないキーと値の一連のペアです。暗号化オペレーションに暗号化コンテキストを指定するときに、復号オペレーションと同じ暗号化コンテキストを指定する必要があります。それ以外の場合、復号リクエストは失敗します。

kms:EncryptionContext: 条件キープレフィックスを使用するには、encryption_context_key プレースホルダーを暗号化コンテキストキーで置き換えます。encryption_context_value プレースホルダーを暗号化コンテキスト値で置き換えます。

"kms:EncryptionContext:encryption_context_key": "encryption_context_value"

たとえば、次の条件キーでは、キーが AppName、値が ExampleApp である暗号化コンテキストを指定します。

"kms:EncryptionContext:AppName": "ExampleApp"

次の例のキーポリシーステートメントでは、この条件キーが使用されます。リクエストでは複数の暗号化コンテキストペアを使用できるため、条件演算子には ForAnyValue または ForAllValues が含まれている必要があります。

このポリシーでは、リクエストの暗号化コンテキストペアの少なくとも 1 つが "AppName": "ExampleApp" である場合のみ、GenerateDataKey リクエストで CMK の使用がプリンシパルに許可されます。

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

複数の暗号化コンテキストペアを要求するには、kms:EncryptionContext: 条件の複数のインスタンスを含めることができます。たとえば、次のポリシーステートメントの例では、ForAllValues 演算子を使用して、次の両方の暗号化コンテキストペアを要求しています (それ以外は要求していません)。ペアが指定される順序は重要ではありません。

  • "AppName": "ExampleApp"

  • "FilePath": "/var/opt/secrets/"

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp", "kms:EncryptionContext:FilePath": "/var/opt/secrets/" } } }

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

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

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

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

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "ForAnyValue: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:EncryptionContextKey": "AppName" } } }

暗号化コンテキストのキーと値の両方について大文字と小文字を区別する評価を要求するには、同じポリシーステートメントで kms:EncryptionContextKeykms:EncryptionContext: のポリシーの条件を一緒に使用します。たとえば、次のポリシーステートメントの例では、StringEquals 演算子で大文字と小文字が区別されるため、暗号化コンテキストキーと暗号化コンテキスト値の両方で大文字と小文字が区別されます。

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

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

kms:EncryptionContextKeys

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

kms:EncryptionContextKeys

文字列 (リスト)

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyWithoutPlaintext

ReEncrypt

IAM およびキーポリシー

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

この条件キーを使用して、AWS KMS API リクエストで暗号化コンテキストに基づいてアクセスを制御できます。暗号化コンテキストは、– 暗号化オペレーション (EncryptDecryptGenerateDataKeyGenerateDataKeyWithoutPlaintextReEncrypt)、および CreateGrant オペレーションに含めることができるキーと値のペアのセットです。リクエストでは複数の暗号化コンテキストペアを使用できるため、条件演算子には ForAnyValue または ForAllValues が含まれている必要があります。

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

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }

StringEquals 条件演算子では大文字と小文字が区別されるため、前のポリシーステートメントでは、暗号化コンテキストキーのスペルおよび大文字と小文字の区別が必要になります。ただし、キーの大文字と小文字の区別を無視する条件演算子 (StringEqualsIgnoreCase など) を使用できます。

各条件では、複数の暗号化コンテキストキーを指定できます。たとえば、次のポリシーステートメントでは、ForAllValues および StringEquals 条件演算子を使用して、値にかかわらず、リクエストの暗号化テキストに AppName および FilePath キーの両方が含まれる場合にのみ (それ以外は含まれません)、指定されたオペレーションが許可されます。暗号化コンテキストのキーの順序は重要ではありません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "AppName", "FilePath" ] } } }

kms:EncryptionContextKeys 条件キーを使用して、CMK を使用する暗号化オペレーションで暗号化テキストを要求することもできます。

以下のキーポリシーステートメントの例では、kms:EncryptionContextKeys を指定した Null condition operator 条件キーを使用して、kms:EncryptionContextKeys 条件キーが API リクエストに含まれている (null でない) 場合にのみ CMK へのアクセスを許可します。暗号化コンテキストのキーまたは値はチェックされず、暗号化コンテキストが存在することだけが確認されます。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContextKeys": false } } }

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

kms:ExpirationModel

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

kms:ExpirationModel

文字列

ImportKeyMaterial

IAM およびキーポリシー

kms:ExpirationModel 条件キーは、リクエストの ExpirationModel パラメータの値に基づき、ImportKeyMaterial オペレーションへのアクセスを制御します。

ExpirationModel は、インポートされたキーマテリアルの有効期限が切れているかどうかを判断するオプションのパラメータです。有効な値は、KEY_MATERIAL_EXPIRES および KEY_MATERIAL_DOES_NOT_EXPIRE です。KEY_MATERIAL_EXPIRES はデフォルト値です。

有効期限の日時は、ValidTo パラメータの値で決まります。ValidTo パラメータの値が ExpirationModel である場合を除き、KEY_MATERIAL_DOES_NOT_EXPIRE パラメータが必要です。また、kms:ValidTo 条件キーを使用して、アクセス条件として特定の有効期限を設定することもできます。

次のポリシーステートメントの例では、kms:ExpirationModel 条件キーを使用して、リクエストに ExpirationModel パラメータが含まれており、その値が KEY_MATERIAL_DOES_NOT_EXPIRE の場合にのみ、ユーザーによる CMK へのキーマテリアルのインポートを許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "StringEquals": { "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE" } } }

また、kms:ExpirationModel 条件キーを使用して、キーマテリアルの有効期限が切れている場合にのみ、ユーザーによるキーマテリアルのインポートを許可できます。条件に有効期限を指定する必要はありません。次のポリシーステートメントの例では、kms:ExpirationModel を指定した Null condition operator 条件キーを使用して、リクエストに ExpirationModel パラメーターが含まれていない場合にのみ、ユーザーによるキーマテリアルのインポートを許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "Null": { "kms:ExpirationModel": true } } }

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

kms:GrantConstraintType

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

kms:GrantConstraintType

文字列

CreateGrant

IAM およびキーポリシー

この条件キーを使用して、リクエストの許可制約のタイプに基づいて、CreateGrant オペレーションへのアクセスを制御できます。

許可の作成では、オプションで許可の制約を指定して、特定の暗号化コンテキストが存在する場合のみ、許可によってオペレーションを実行できます。許可の制約には、EncryptionContextEquals またはEncryptionContextSubset の 2 つのタイプがあります。この条件キーを使用して、リクエストにどちらのタイプが含まれているか確認できます。

次のポリシーステートメントの例では、kms:GrantConstraintType 条件キーを使用して、リクエストに EncryptionContextEquals 許可の制約が含まれている場合のみ、ユーザーによる許可の作成を可能にします。この例は、キーポリシーのポリシーステートメントを示しています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GrantConstraintType": "EncryptionContextEquals" } } }

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

kms:GrantIsForAWSResource

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

kms:GrantIsForAWSResource

Boolean

CreateGrant

ListGrants

RevokeGrant

IAM およびキーポリシー

AWS KMS と統合されている AWS サービスがユーザーに代わって許可オペレーションを実行している場合に、CreateGrantListGrants、または RevokeGrant オペレーションへのアクセスを許可または拒否します。この条件キーは、ユーザーが持つ、許可オペレーションを直接実行するためのアクセス権限には影響しません。

たとえば、次のキーポリシーステートメントは、kms:GrantIsForAWSResource 条件キーを使用しています。これにより、ユーザーは、統合されているいずれかのサービスがユーザーに代わって許可を作成した場合のみ、この CMK で許可を作成することを許可されます。ユーザーが許可を直接作成することはできません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }

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

kms:GrantOperations

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

kms:GrantOperations

文字列

CreateGrant

IAM およびキーポリシー

この条件キーを使用して、リクエストの許可オペレーションに基づいて CreateGrant オペレーションへのアクセスを制御できます。たとえば、暗号化へのアクセス権限は委任するが、復号化へのアクセス権限は委任しない許可をユーザーが作成するようにできます。

次のポリシーステートメント例では、kms:GrantOperations 条件キーを使用して、この CMK が対象の CMK である場合に、暗号化および再暗号化のアクセス権限を委任する許可をユーザーが作成できるようにします。この例は、キーポリシーのポリシーステートメントを示しています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Encrypt", "ReEncryptTo" ] } } }

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

kms:GranteePrincipal

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

kms:GranteePrincipal

文字列

CreateGrant

IAM およびキーポリシー

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

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

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

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

kms:KeyOrigin

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

kms:KeyOrigin

文字列

CreateKey

IAM ポリシー

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

たとえば、キーマテリアルが KMS で生成される場合のみ (AWS_KMS)、キーマテリアルがカスタムキーストア に関連付けられている AWS CloudHSM クラスターで生成される場合のみ (AWS_CLOUDHSM)、または外部ソースからキーマテリアルがインポートされる場合のみ (EXTERNAL)、ユーザーによる CMK の作成を許可できます。

次のポリシーステートメントの例では、kms:KeyOrigin 条件キーを使用して、キーのオリジンが外部の場合 (つまり、キーマテリアルがインポートされている場合) にのみ、ユーザーによる CMK の作成を許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "EXTERNAL" } } }

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

kms:ReEncryptOnSameKey

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

kms:ReEncryptOnSameKey

Boolean

ReEncrypt

IAM およびキーポリシー

この条件キーを使用して、リクエストで指定される対象の CMK が、元の暗号化で使用されたものと同じであるかどうかに基づいて、ReEncrypt オペレーションへのアクセスを制御します。たとえば、次のポリシーステートメントでは、kms:ReEncryptOnSameKey 条件キーを使用して、対象の CMK が元の暗号化に使用されたものと同じである場合にのみ、ユーザーによる再暗号化を許可します。この例は、キーポリシーのポリシーステートメントを示しています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ReEncrypt*", "Resource": "*", "Condition": { "Bool": { "kms:ReEncryptOnSameKey": true } } }

kms:RetiringPrincipal

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

kms:RetiringPrincipal

文字列 (リスト)

CreateGrant

IAM およびキーポリシー

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

次のポリシーステートメントの例では、CMK の許可の作成をユーザーに許可します。kms:RetiringPrincipal 条件キーでは、CreateGrant リクエストへのアクセス権限が制限されます。許可の削除プリンシパルは LimitedAdminRole または OpsAdmin ユーザーのどちらかとなります。

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

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

kms:ValidTo

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

kms:ValidTo

タイムスタンプ

ImportKeyMaterial

IAM およびキーポリシー

kms:ValidTo 条件キーは、リクエストの ValidTo パラメータの値に基づき、ImportKeyMaterial オペレーションへのアクセスを制御します。これにより、インポートされたキーマテリアルが失効するタイミングが決まります。この値は、Unix 時間で表現されます。

デフォルトでは、ValidTo パラメータは ImportKeyMaterial リクエストで必要です。ただし、ExpirationModel パラメータの値が KEY_MATERIAL_DOES_NOT_EXPIRE の場合、ValidTo パラメータは無効です。また、kms:ExpirationModel 条件キーを使用して、ExpirationModel パラメータまたは特定のパラメータの値を要求することもできます。

次のポリシーステートメントの例では、キーマテリアルの CMK へのインポートをユーザーに許可します。kms:ValidTo 条件キーは、ImportKeyMaterial リクエストへのアクセス権限を制限します。ここで、ValidTo の値は 1546257599.0 (2018 年 12 月 31 日 午後 11:59:59) 以下となります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "NumericLessThanEquals": { "kms:ValidTo": "1546257599.0" } } }

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

kms:ViaService

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

kms:ViaService

文字列

kms:ViaService 条件キーは次を除くすべての AWS KMS オペレーションで有効になっています (CreateKeyGenerateRandomListAliasesListKeysListRetirableGrantsRetireGrant)。

IAM およびキーポリシー

kms:ViaService 条件キーは、AWS KMS カスタマーマスターキー (CMK) の使用を、指定の AWS サービスからのリクエストだけに制限します。各 kms:ViaService 条件キーに 1 つ以上のサービスを指定できます。

たとえば、キーポリシーの以下のステートメントは、kms:ViaService 条件キーを使って、米国西部 (オレゴン) リージョンの Amazon EC2 または Amazon RDS から ExampleUser に代わってリクエストされた場合のみ、カスタマー管理の CMK を指定のアクションに使用することを許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "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 条件キーを使用して、特定のサービスからリクエストされた場合の CMK の使用を拒否することもできます。たとえば、キーポリシーの以下のステートメントは、kms:ViaService 条件キーを使って、AWS Lambda から ExampleUser に代わってリクエストされた場合にカスタマー管理 CMK が Encrypt オペレーションに使用させるのを防ぎます。

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": {"lambda.us-west-2.amazonaws.com"} } } }

重要

kms:ViaService 条件キーを使用する場合は、サービスが、AWS アカウントのプリンシパルに代わってリクエストを行います。これらのプリンシパルは、次のアクセス許可が必要です。

  • CMK を使用するアクセス権限。プリンシパルの代わりにサービスがカスタマー管理の CMK を使用できるようにするため、プリンシパルは統合されたサービスに権限を付与する必要があります。詳細については、「AWS サービスでの AWS KMS の使用方法」を参照してください。

  • 統合されたサービスを使用するアクセス権限。AWS KMS と統合される AWS サービスへのアクセスをユーザーに許可する方法の詳細については、統合されるサービスのドキュメントを参照してください。

AWS 管理の CMK は、すべてそのキーポリシードキュメントにある kms:ViaService 条件キーを使用します。この条件は、その CMK を作成したサービスからリクエストされた場合のみ、CMK の使用を許可します。AWS 管理の CMK のキーポリシーを表示するには、GetKeyPolicy オペレーションを使用します。

kms:ViaService 条件キーは IAM とキーポリシーのステートメントで有効です。指定するサービスは、AWS KMS と統合されていて、kms:ViaService 条件キーをサポートしている必要があります。

次の表は、AWS KMS と統合されていて、カスタマー管理 CMK をサポートし、カスタマー管理 CMK での kms:ViaService 条件キーの使用をサポートしている AWS サービスの一覧です。この表にあるサービスの中には、一部のリージョンで使用できないものもあります。

カスタマー管理 CMK で kms:ViaService 条件キーをサポートするサービス

サービス名 KMS ViaService 名
AWS Backup backup.AWS_region.amazonaws.com
Amazon Connect connect.AWS_region.amazonaws.com
AWS Database Migration Service (AWS DMS) dms.AWS_region.amazonaws.com
AWS Directory Service directoryservice.AWS_region.amazonaws.com
Amazon EC2 Systems Manager ssm.AWS_region.amazonaws.com
Amazon Elastic Block Store (Amazon EBS) ec2.AWS_region.amazonaws.com (EBS のみ)
Amazon Elastic File System elasticfilesystem.AWS_region.amazonaws.com
Amazon Elasticsearch Service es.AWS_region.amazonaws.com
Amazon FSx fsx.AWS_region.amazonaws.com
AWS Glue glue.AWS_region.amazonaws.com
Amazon Kinesis kinesis.AWS_region.amazonaws.com
Amazon Kinesis ビデオストリーム kinesisvideo.AWS_region.amazonaws.com
AWS Lambda lambda.AWS_region.amazonaws.com
Amazon Lex lex.AWS_region.amazonaws.com
Amazon Managed Streaming for Kafka kafka.AWS_region.amazonaws.com
Amazon Neptune rds.AWS_region.amazonaws.com
Amazon Redshift redshift.AWS_region.amazonaws.com
Amazon Relational Database Service (Amazon RDS) rds.AWS_region.amazonaws.com
Amazon RDS パフォーマンスインサイト rds.AWS_region.amazonaws.com
AWS Secrets Manager (Secrets Manager) secretsmanager.AWS_region.amazonaws.com
Amazon Simple Email Service (Amazon SES) ses.AWS_region.amazonaws.com
Amazon Simple Notification Service (Amazon SNS) sns.AWS_region.amazonaws.com
Amazon Simple Storage Service (Amazon S3) s3.AWS_region.amazonaws.com
AWS Snowball importexport.AWS_region.amazonaws.com
Amazon SQS sqs.AWS_region.amazonaws.com
Amazon WorkMail workmail.AWS_region.amazonaws.com
Amazon WorkSpaces workspaces.AWS_region.amazonaws.com
AWS X-Ray xray.AWS_region.amazonaws.com

kms:WrappingAlgorithm

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

kms:WrappingAlgorithm

文字列

GetParametersForImport

IAM およびキーポリシー

この条件キーは、リクエストの WrappingAlgorithm パラメータの値に基づき、GetParametersForImport オペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のアルゴリズムを使用してキーマテリアルを暗号化するよう要求できます。異なるラップアルゴリズムを指定すると必要なパブリックキーとインポートトークンのリクエストが失敗します。

次のポリシーステートメント例では、GetParametersForImport 条件キーを使用して、RSAES_OAEP_SHA_1 オペレーションを呼び出すアクセス許可をユーザーに与えていますが、kms:WrappingAlgorithm ラップアルゴリズムを使用することはできません。GetParametersForImport リクエストの WrappingAlgorithmRSAES_OAEP_SHA_1 の場合、オペレーションは失敗します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringNotEquals": { "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1" } } }

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

kms:WrappingKeySpec

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

kms:WrappingKeySpec

文字列

GetParametersForImport

IAM およびキーポリシー

この条件キーは、リクエストの WrappingKeySpec パラメータの値に基づき、GetParametersForImport オペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のタイプのパブリックキーを使用するよう要求できます。リクエストで別のキータイプを指定すると、エラーになります。

WrappingKeySpec パラメータ値の有効な値は RSA_2048 のみであるため、ユーザーによるこの値の使用を無効にすることで、GetParametersForImport オペレーションを効率的に無効にすることができます。

次のポリシーステートメントの例では、kms:WrappingAlgorithm 条件キーを使用してリクエストの WrappingKeySpecRSA_2048 になるようにします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_2048" } } }

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