キーポリシーでの AWS サービスのアクセス許可 - AWS Key Management Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

キーポリシーでの AWS サービスのアクセス許可

多くの AWS のサービスでは AWS KMS keys 、 を使用して管理するリソースを保護します。あるサービスで AWS 所有のキー または AWS マネージドキー が使用される場合、そのサービスではこれらの KMS キーのキーポリシーが確立されて管理されます。

ただし、お客様が AWS のサービスでカスタマーマネージドキーを使用する場合は、ご自身でキーポリシーを設定して管理します。ユーザーに代わってリソースを保護するのに必要な最小限のアクセス許可が、そのキーポリシーによってサービスに付与される必要があります。最小特権の原則 (サービスで必要なアクセス許可のみを付与) に従うことをお勧めします。どのアクセス許可がそのサービスで必要かを把握し、AWS グローバル条件キーおよび AWS KMS 条件キーを使用してアクセス許可を絞り込むことで、これを効果的に行うことができます。

カスタマーマネージドキーに対してサービスで必要になるアクセス許可を調べるには、そのサービスの暗号化に関するドキュメントを参照してください。例えば、Amazon Elastic Block Store (Amazon EBS) に必要なアクセス許可については、「Amazon Amazon EC2 ユーザーガイド」および「Amazon EC2 ユーザーガイド」の「IAM ユーザーのアクセス許可」を参照してください。 Amazon EC2 Secrets Manager で必要なアクセス許可については、AWS Secrets Manager ユーザーガイドAuthorizing use of the KMS key を参照してください。

最小特権のアクセス許可の実装

KMS キーを使用するアクセス許可を AWS サービスに付与する場合は、そのアクセス許可が、サービスがユーザーに代わってアクセスする必要があるリソースに対してのみ有効であることを確認します。この最小特権戦略は、 AWS サービス間でリクエストが渡されたときに KMS キーが不正に使用されるのを防ぐのに役立ちます。

最小特権戦略を実装するには、 AWS KMS 暗号化コンテキスト条件キーとグローバルソース ARN またはソースアカウント条件キーを使用することをお勧めします。

暗号化コンテキスト条件キーの使用

リソースの使用 AWS KMS 時に最小特権のアクセス許可を実装する最も効果的な方法は、プリンシパルが AWS KMS 暗号化オペレーションを呼び出すことを許可するポリシーに kms:EncryptionContext:context-keyまたは kms:EncryptionContextKeys条件キーを含めることです。これらの条件キーは、リソースが暗号化されるときに暗号文にバインドされる暗号化コンテキストにアクセス許可を関連付けるため、特に効果的です。

暗号化コンテキスト条件キーは、ポリシーステートメントのアクションが であるとき、CreateGrantまたは GenerateDataKeyDecrypt などのオペレーションなどの EncryptionContextパラメータを使用する AWS KMS 対称暗号化オペレーションの場合にのみ使用します。(サポートされているオペレーションのリストについては、kms:EncryptionContext:context-key または kms:EncryptionContextKeys を参照してください) これらの条件キーを使用して などの他のオペレーションを許可するとDescribeKey、アクセス許可は拒否されます。

サービスがリソースを暗号化するときに使用する暗号化コンテキストに値を設定します。この情報は通常、サービスのドキュメントのセキュリティに関する章で確認できます。例えば、 AWS Proton の暗号化コンテキストは、 Proton AWS リソースとそれに関連するテンプレートを識別します。AWS Secrets Manager 暗号化コンテキストが、シークレットとそのバージョンを識別します。Amazon Location の暗号化コンテキストが、トラッカーやコレクションを識別します。

次のキーポリシーステートメントの例では、承認されたユーザーの代わりに Amazon Location Service がグラントの作成を許可しています。このポリシーステートメントは、kms:ViaServicekms:CallerAccount、および kms:EncryptionContext:context-key条件キーを使用して、アクセス許可を特定のトラッカーリソースに関連付けることで、アクセス許可を制限します。

{ "Sid": "Allow Amazon Location to create grants on behalf of authorized users", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/LocationTeam" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "geo.us-west-2.amazonaws.com", "kms:CallerAccount": "111122223333", "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker" } } }

aws:SourceArn または aws:SourceAccount 条件キーの使用

キーポリシーステートメントのプリンシパルが AWS のサービスプリンシパルになる場合は、kms:EncryptionContext:context-key 条件キーに加えて aws:SourceArn または aws:SourceAccount グローバル条件キーの使用を強くお勧めします。ARN とアカウント値は、リクエストが別の AWS サービス AWS KMS から に送信された場合にのみ、承認コンテキストに含まれます。この条件の組み合わせにより、最小特権のアクセス許可が実装され、可能性のある「混乱した代理」シナリオが回避されます。サービスプリンシパルは通常、キーポリシーではプリンシパルとして使用されませんが、 などの一部の AWS サービスではそれ AWS CloudTrailが必要です。

aws:SourceArn または aws:SourceAccount グローバル条件キーを使用する場合、暗号化されているリソースの Amazon リソースネーム (ARN) またはアカウントに値を設定します。例えば、証跡を暗号化するための AWS CloudTrail アクセス許可を付与するキーポリシーステートメントでは、その証跡の ARN に aws:SourceArn の値を設定します。可能な限り、より具体的な aws:SourceArn を使用してください。ARN またはワイルドカード文字を使用した ARN パターンに値を設定します。リソースの ARN が不明の場合は、代わりに aws:SourceAccount を使用してください。

注記

リソース ARN に AWS KMS キーポリシーで許可されていない文字が含まれている場合、そのリソース ARN をaws:SourceArn条件キーの値に使用することはできません。その代わりに aws:SourceAccount 条件キーを使用してください。キーポリシードキュメントのルールに関する詳細については、「キーポリシー形式」を参照してください。

次のキーポリシーの例では、アクセス許可を取得するプリンシパルは AWS CloudTrail サービスプリンシパル、cloudtrail.amazonaws.com になります。最小特権を実装するために、このポリシーでは aws:SourceArn および kms:EncryptionContext:context-key 条件キーが使用されます。ポリシーステートメントでは CloudTrail 、 が KMS キーを使用して、証跡の暗号化に使用するデータキーを生成できます。aws:SourceArn および kms:EncryptionContext:context-key の条件は個別に評価されます。指定されたオペレーションの KMS キーを使用するリクエストでは、両方の条件が満たされている必要があります。

サンプルアカウント (111122223333) および us-west-2 リージョンの finance 証跡に対するサービスのアクセス許可を制限する場合、このポリシーステートメントで aws:SourceArn 条件キーを特定の証跡の ARN に設定します。条件ステートメントは ArnEquals演算子を使用して、ARN 内のすべての要素が一致するときに個別に評価されるようにします。この例では、特定のアカウントおよびリージョンの証跡に対するアクセス許可を制限するために、kms:EncryptionContext:context-key 条件キーも使用されています。

このキーポリシーを使用する前に、サンプルアカウント ID、リージョン、および証跡名をアカウントの有効な値に置き換えてください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CloudTrail to encrypt logs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cloudtrail:us-west-2:111122223333:trail/finance" ] }, "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:111122223333:trail/*" ] } } } ] }