キーポリシーにおける AWS サービスのアクセス許可 - AWS Key Management Service

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

キーポリシーにおける AWS サービスのアクセス許可

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

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

カスタマーマネージドキーに対してサービスで必要になるアクセス許可を調べるには、そのサービスの暗号化に関するドキュメントを参照してください。例えば、Amazon Elastic Block Store (Amazon EBS) で必要なアクセス許可については、Linux インスタンス用 Amazon EC2 ユーザーガイドおよび Windows インスタンス用 Amazon EC2 ユーザーガイドPermissions for IAM users を参照してください。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 条件キーを含めることです。これらの条件キーは、リソースが暗号化されるときに暗号文にバインドされる暗号化コンテキストにアクセス許可を関連付けるため、特に効果的です。

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

サービスがリソースを暗号化するときに使用する暗号化コンテキストに値を設定します。この情報は通常、サービスのドキュメントのセキュリティに関する章で確認できます。例えば、AWS Proton の暗号化コンテキストが、AWS Proton リソースとそれに関連するテンプレートを識別します。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 KMS のサービスから AWS に送信された場合にのみ、認可コンテキストに含まれます。この条件の組み合わせにより、最小特権のアクセス許可が実装され、可能性のある「混乱した代理」シナリオが回避されます。サービスプリンシパルは通常、キーポリシーではプリンシパルとして使用されませんが、AWS CloudTrail などの 一部の AWS のサービスでは必要になります。

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

注記

AWS KMS キーポリシーで許可されていない文字がリソース ARN に含まれている場合、そのリソース 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/*" ] } } } ] }