AWS KMS でのポリシー条件の使用 - 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 KMS キーポリシーおよび IAM ポリシーでグローバル条件キーを使用できます。たとえば、aws: PrincipalArn 条件キーを使用して、リクエスト内のプリンシパルが条件キーの値の Amazon リソースネーム (ARN) で表されている場合にのみ、カスタマーマスターキー (CMK) へのアクセスを許可できます。

AWS KMS は、次のものを除くすべての AWS グローバル条件キーをサポートします。

AWS グローバル条件キー (使用可能なリクエストのタイプなど) については、IAM ユーザーガイド の「AWS グローバル条件コンテキストキー」を参照してください。IAM ポリシーでグローバル条件キーを使用する例については、IAM ユーザーガイド の「リクエストへのアクセスの制御」および「タグキーの制御」を参照してください。

以下のトピックでは、IP アドレスと VPC エンドポイントに基づく条件キーを使用するための特別なガイダンスを提供します。

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 を使用します。キーポリシーおよび IAM ポリシーで次の グローバル条件キーを使用して、リクエストが VPC から送信されたとき、または VPC エンドポイントを使用するときに、AWS KMS リソースへのアクセスを制御できます。詳細については、「ポリシーステートメントでの VPC エンドポイントの使用」を参照してください。

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

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

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

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

AWS KMS 条件キー

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

API オペレーションリクエストの条件

AWS KMS 条件キーの多くは、AWS KMS オペレーションのリクエスト内のパラメータの値に基づいて CMK へのアクセスを制御します。たとえば、IAM ポリシーで kms:CustomerMasterKeySpec 条件キーを使用すると、CreateKey リクエスト内の CustomerMasterKeySpec パラメータの値が RSA_4096 である場合にのみ CreateKey オペレーションの使用を許可できます。

このタイプの条件は、パラメータのデフォルト値を使用する場合など、リクエストにパラメータが表示されない場合でも機能します。たとえば、kms:CustomerMasterKeySpec 条件キーを使用すると、CustomerMasterKeySpec パラメータの値が SYMMETRIC_DEFAULT (デフォルト値) の場合にのみ CreateKey オペレーションを使用できるようになります。この条件では、SYMMETRIC_DEFAULT 値を持つ CustomerMasterKeySpec パラメータを持つリクエストと、CustomerMasterKeySpec パラメータを持たないリクエストが許可されます。

API オペレーションで使用される CMKs の条件

一部の AWS KMS 条件キーは、オペレーションで使用される CMK のプロパティに基づいてオペレーションへのアクセスを制御します。たとえば、kms:KeyOrigin 条件を使用すると、CMK の OriginAWS_KMS である場合にのみ、プリンシパルが CMK で GenerateDataKey を呼び出すことができます。この方法で条件キーを使用できるかどうかを確認するには、条件キーの説明を参照してください。

このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。ListKeys などの特定の CMK リソースに対して許可されていないオペレーションでこのタイプの条件キーを使用すると、条件が満たされないため、アクセス許可は有効になりません。ListKeys オペレーションの承認に関与する CMK リソースはなく、CustomerMasterKeySpec プロパティもありません。

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

kms:BypassPolicyLockoutSafetyCheck

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

kms:BypassPolicyLockoutSafetyCheck

Boolean

CreateKey

PutKeyPolicy

IAM ポリシーのみ

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

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

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

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

文字列

CMK リソースオペレーション

キーポリシーのみ

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

この条件はキーポリシーでのみ有効であるため、この条件を使用して、任意の CMK リソースオペレーション、つまり特定の CMK を使用するすべての AWS KMS オペレーションへのアクセスを制御できます。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次のポリシーステートメントは、kms:CallerAccount 条件キーを使用する方法を示しています。このポリシーステートメントは、Amazon EBS 用に CMK によって管理される AWS のキーポリシー内にあります。すべての 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:CustomerMasterKeySpec

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

kms:CustomerMasterKeySpec

文字列

CreateKey

CMK リソースオペレーション

IAM ポリシー

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

kms:CustomerMasterKeySpec 条件キーは、オペレーションによって作成される、またはオペレーションで使用される CMK の CustomerMasterKeySpec プロパティの値に基づいて、オペレーションへのアクセスを制御します。

この条件キーを IAM ポリシーで使用すると、CreateKey リクエストの CustomerMasterKeySpec パラメータの値に基づいて CreateKey オペレーションへのアクセスを制御できます。たとえば、この条件を使用すると、ユーザーが対称 CMKs のみを作成、または RSA キーを持つ CMKs のみを作成することを許可できます。

以下の IAM ポリシーステートメント例では、kms:CustomerMasterKeySpec 条件キーを使用して、リクエストの CustomerMasterKeySpecRSA_4096 である場合にのみ、プリンシパルが CMK を作成できるようにします。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "RSA_4096" } } }

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

たとえば、次の IAM ポリシーでは、プリンシパルが指定された CMK リソースオペレーションを実行することを許可しますが、アカウント内の対称 CMKs でのみ許可します。

{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "SYMMETRIC_DEFAULT" } } }

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

kms:CustomerMasterKeyUsage

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

kms:CustomerMasterKeyUsage

文字列

CreateKey

CMK リソースオペレーション

IAM ポリシー

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

kms:CustomerMasterKeyUsage 条件キーは、オペレーションによって作成される、またはオペレーションで使用される CMK の KeyUsage プロパティの値に基づいて、オペレーションへのアクセスを制御します。

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

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

次の IAM ポリシーステートメントの例では、kms:CustomerMasterKeyUsage 条件キーを使用して、KeyUsageENCRYPT_DECRYPT の場合にのみユーザーが CMK を作成できるようにしています。

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

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

たとえば、次の IAM ポリシーでは、プリンシパルが特定の CMK リソースオペレーションを実行することを許可しますが、署名と検証に使用されるアカウント内の CMKs に対してのみ許可します。

{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:DescribeKey", "kms:GetPublicKey", "kms:ScheduleKeyDeletion" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "SIGN_VERIFY" } } }

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

kms:DataKeyPairSpec

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

kms:DataKeySpec

文字列

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

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

この条件キーを使用して、リクエスト内の KeyPairSpec パラメータの値に基づいて、GenerateDataKeyPair および GenerateDataKeyPairWithoutPlaintext オペレーションへのアクセスを制御できます。たとえば、特定のタイプのデータキーペアのみを生成することをユーザーに許可できます。

次のキーポリシーステートメントの例では、kms:DataKeyPairSpec 条件キーを使用して、ユーザーが CMK を使用して RSA データキーペアのみを生成できるようにしています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext" ], "Resource": "*", "Condition": { "StringLike": { "kms:DataKeyPairSpec": "RSA*" } } }

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

kms:EncryptionAlgorithm

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

kms:EncryptionAlgorithm

文字列

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

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

kms:EncryptionAlgorithm 条件キーを使用して、オペレーションで使用される暗号化アルゴリズムに基づいて暗号化オペレーションへのアクセスを制御できます。EncryptDecrypt、および ReEncrypt オペレーションでは、リクエストの EncryptionAlgorithm パラメータの値に基づいてアクセスを制御します。データキーとデータキーペアを生成するオペレーションでは、データキーの暗号化に使用される暗号化アルゴリズムに基づいてアクセスを制御します。

この条件キーは、AWS KMS 外の非対称 CMK ペアでパブリックキーを使用した暗号化など、AWS KMS の外部で実行されるオペレーションには影響しません。

リクエスト内の暗号化アルゴリズムパラメータ

ユーザーが CMK で特定の暗号化アルゴリズムのみを使用できるようにするには、Deny 効果と StringNotEquals 条件演算子を含むポリシーステートメントを使用します。たとえば、次のキーポリシーステートメントの例では、リクエストの暗号化アルゴリズムが RSAES_OAEP_SHA_256 でない限り、ExampleRole ロールを引き受けるプリンシパルが、指定された暗号化オペレーションでこの対称 CMK を使用することを禁止しています。

ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このような二重否定を持つポリシーステートメントは、この CMK に対する他のポリシーおよび許可によって、このロールが他の暗号化アルゴリズムを使用することを防止します。このポリシーステートメントの Deny は、キーポリシーまたは Allow 効果のある IAM ポリシーよりも優先され、この CMK とそのプリンシパルに対するすべての許可よりも優先されます。

{ "Sid": "Allow only one encryption algorithm with this asymmetric CMK", "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 条件キーを使用して、データキーとデータキーペアを生成するオペレーションへのアクセスを制御することもできます。これらのオペレーションでは、対称 CMKs と SYMMETRIC_DEFAULT アルゴリズムのみが使用されます。

たとえば、この IAM ポリシーは、プリンシパルを対称暗号化に制限します。リクエストで指定された、またはオペレーションで使用されている暗号化アルゴリズムが SYMMETRIC_DEFAULT でない限り、暗号化オペレーションのサンプルアカウントにある CMK へのアクセスを拒否します。非対称 CMKのまたは非対称暗号化アルゴリズムを使用して、データキーペアのデータキーを暗号化する、またはデータキーペアのプライベートキーを暗号化できないため、GenerateDataKeyGenerateDataKeyWithoutPlaintextGenerateDataKeyPair、および GenerateDataKeyPairWithoutPlaintext の追加による即時の実際的な影響はありません。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:GenerateDataKeyPair*" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } } }

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

kms:EncryptionContext:

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

kms:EncryptionContext:

文字列

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

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

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

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

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

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:EncryptionContextKeyskms:EncryptionContext: のポリシー条件を一緒に使用します。たとえば、次のポリシーステートメントの例では、StringEquals 演算子で大文字と小文字が区別されるため、暗号化コンテキストキーと暗号化コンテキスト値の両方で大文字と小文字が区別されます。

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

暗号化コンテキスト条件での変数の使用

暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など別の型を使用する場合、AWS KMS ではリテラル文字列として解釈されます。

"encryptionContext": { "department": "10103.0" }

ただし、kms:EncryptionContext: 条件キーペアの値は IAM ポリシー変数にすることができます。これらのポリシー変数はリクエストの値に基づいて実行時に解決されます。たとえば、aws:CurrentTime はリクエストの時間に解決され、aws:username は呼び出し元のフレンドリ名に解決されます。

これらのポリシー変数を使用し、ポリシーステートメントを作成して、暗号化コンテキストに限定的な情報 (呼び出し元のユーザー名など) を必要とする条件を指定できます。ポリシーステートメントに変数を含めるため、ロールを引き受けることができるすべてのユーザーに同じポリシーステートメントを使用できます。ユーザー別にポリシーステートメントを記述する必要はありません。

ロールを引き受けることができるすべてのユーザーが同じ CMK を使用してデータを暗号化および復号する状況を考えます。ただし、それらのユーザーに自分が暗号化したデータのみの復号を許可するとします。まず、AWS KMS へのすべてのリクエストに、キーが user であり、値が呼び出し元の AWS ユーザー名である暗号化コンテキストを含めることを要件とします。

"encryptionContext": { "user": "bob" }

次に、この要件を定義するために、以下の例のようなポリシーステートメントを使用できます。このポリシーステートメントは、TestTeam ロールに、CMK を使用してデータを暗号化および復号するためのアクセス許可を付与します。ただし、そのアクセス許可は、"user": "<username>" ペアがリクエストの暗号化コンテキストに含まれる場合にのみ有効です。ユーザー名を表すために、条件で aws:username ポリシー変数を使用します。

リクエストが評価されるとき、条件の変数が呼び出し元のユーザー名に置き換えられます。そのため条件では、「bob」には "user": "bob"、「alice」には "user": "alice" の暗号化コンテキストを必須とします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ] "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:user": "${aws:username}" } } }

IAM ポリシー変数は、kms:EncryptionContext: 条件のキーペアの値でのみ使用できます。キーで変数を使用することはできません。

変数でプロバイダー固有のコンテキストキーを使用することもできます。これらのコンテキストキーにより、Web ID フェデレーションを使用して AWS にログインしたユーザーが一意に識別されます。

すべての変数と同様に、これらの変数は、実際の暗号化コンテキストではなく kms:EncryptionContext: ポリシー条件でのみ使用できます。また、条件のキーではなく値でのみ使用できます。

たとえば、以下のキーポリシーステートメントは前のものと似ています。ただし、この条件では、暗号化コンテキストのキーが sub であり、値が、Amazon Cognito ユーザープールにログインしたユーザーを一意に識別する必要があります。Amazon Cognito でのユーザーおよびロールの識別の詳細については、Amazon Cognito 開発者ガイド の「IAM ロール」を参照してください。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ] "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}" } } }

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

kms:EncryptionContextKeys

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

kms:EncryptionContextKeys

文字列 (リスト)

CreateGrant

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

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

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

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

この条件キーを使用して、AWS KMS API リクエストで暗号化コンテキストに基づいてアクセスを制御できます。暗号化コンテキストは、対称 CMKs を使用する AWS KMS 暗号化オペレーション (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 を使用する暗号化オペレーションで暗号化テキストを要求することもできます。

以下のキーポリシーステートメントの例では、Null condition operator を指定した kms:EncryptionContextKeys 条件キーを使用して、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 のサービスがユーザーの代わりにオペレーションを呼び出す場合にのみ CreateGrant オペレーション、ListGrants オペレーション、または RevokeGrant オペレーションに対するアクセス許可が付与または拒否されます。このポリシー条件では、ユーザーがこれらの許可オペレーションを直接呼び出すことはできません。

次のキーポリシーステートメントの例では、kms:GrantIsForAWSResource 条件キーが使用されます。これにより AWS KMS と統合された AWS のサービス (Amazon EBS など) が、指定されたユーザーに代わってこの 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

CMK リソースオペレーション

IAM ポリシー

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

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

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

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

以下のポリシーステートメントの例では、kms:KeyOrigin 条件キーを使用して、AWS KMS がキーマテリアルを作成したときにのみ CMK を作成することをユーザーに許可します。

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

kms:KeyOrigin 条件キーを使用して、オペレーションに使用される CMK の Origin プロパティに基づいて CMK を使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次の IAM ポリシーでは、プリンシパルが指定された CMK リソースオペレーションの実行を許可しますが、カスタムキーストアで作成されたアカウントの CMKs に対してのみ許可します。

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

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

kms:MessageType

文字列

Sign

Verify

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

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

たとえば、次のキーポリシーステートメントでは、kms:MessageType 条件キーを使用して、ユーザーが非対称 CMK を使用してメッセージに署名できますが、メッセージダイジェストへの署名は許可されません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringEquals": { "kms:MessageType": "RAW" } } }

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

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:SigningAlgorithm

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

kms:SigningAlgorithm

文字列

Sign

Verify

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

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

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

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringLike": { "kms:SigningAlgorithm": "RSASSA_PSS*" } } }

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

kms:ValidTo

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

kms:ValidTo

タイムスタンプ

ImportKeyMaterial

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

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

デフォルトでは、ValidTo パラメータは ImportKeyMaterial リクエストで必要です。ただし、ExpirationModel パラメータの値が KEY_MATERIAL_DOES_NOT_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

文字列

CMK リソースオペレーション

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

kms:ViaService 条件キーは、AWS KMS カスタマーマスターキー (CMK) の使用を、指定された AWS のサービスからのリクエストに制限します。各 kms:ViaService 条件キーに 1 つ以上のサービスを指定できます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表で、オペレーションの Resources 列で 値 CMK を探します。

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

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

次の表は、AWS KMS と統合されていて、カスタマー管理 CMKs をサポートし、カスタマー管理 CMKs での kms:ViaService 条件キーの使用をサポートしている AWS サービスの一覧です。この表にあるサービスの中には、一部のリージョンで使用できないものもあります。すべての AWS パーティションで、AWS KMS ViaService 名の .amazonaws.com サフィックスを使用します。

カスタマー管理 CMKs で kms:ViaService 条件キーをサポートするサービス
サービス名 AWS 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 DynamoDB dynamodb.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 Apache 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" } } }

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