最小特権のアクセス許可 - AWS Key Management Service

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

最小特権のアクセス許可

KMS キーは機密情報の保護に用いられるため、最小特権アクセスの原則に従うことをお勧めします。キーポリシーを定義する際は、タスクの実行に必要な最小限のアクセス許可のみを委任してください。追加の IAM ポリシーでアクセス許可をさらに制限する予定がある場合にのみ、KMS キーポリシーに対してすべてのアクション (kms:*) を許可します。IAM ポリシーを使用してアクセス許可を管理する場合は、どのユーザーが IAM ポリシーを作成して IAM プリンシパルにアタッチできるかを制限し、ポリシーの変更をモニタリングすること。

もしキーポリシーと IAM ポリシーの両方ですべてのアクション (kms:*) を許可すると、プリンシパルはその KMS キーに対して管理アクセスと使用の両方の許可を持つことになります。セキュリティのベストプラクティスとして、このようなアクセス許可は特定のプリンシパルにのみ付与することをお勧めします。これを行うには、キーポリシーでプリンシパルを明示的に指名するか、もしくはどのプリンシパルに IAM ポリシーをアタッチするかを制限します。条件キーを使用してアクセス許可を制限することもできます。例えば、API コールを行うプリンシパルに条件ルールで指定されたタグがある場合、aws:PrincipalTag を使用してすべてのアクションを許可できます。

AWS でポリシーステートメントがどのように評価されるかを理解するには、「IAM ユーザーガイド」の「ポリシー評価ロジック」を参照してください。ポリシーを作成する前にこのトピックを確認して、アクセス権限を持たないプリンシパルへアクセスできるようにするなど、意図しない影響をおよぼすポリシーの作成を避けるように努めてください。

ヒント

本番環境以外の環境でアプリケーションをテストする場合は、IAM Access Analyzer を使用して IAM ポリシーに最小権限を適用します。

IAM ロールの代わりに IAM ユーザーを使用する場合は、長期的な認証情報の脆弱性を軽減するために、AWS 多要素認証 (MFA) を有効にすることを強くお勧めします。MFA の使用により、以下が可能となります。

  • キー削除のスケジューリングなどの特権アクションを実行する前に、MFA を使用して認証情報を検証するようユーザーに義務付けることができます。

  • 管理者アカウントのパスワードと MFA デバイスの所有権を複数の人の間で分割する「分割認証」を実装することができます。

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

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

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

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

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

ポリシーステートメントのアクションが CreateGrant、または EncryptionContext パラメータを使用する AWS KMS 対称暗号化オペレーション (GenerateDataKeyDecrypt などのオペレーション) である場合にのみ、暗号化コンテキスト条件キーを使用します。(サポートされているオペレーションのリストについては、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 に設定します。条件ステートメントでは、ARN 内のすべての要素が一致するときに個別に評価されるように ArnEquals 演算子が使用されます。この例では、特定のアカウントおよびリージョンの証跡に対するアクセス許可を制限するために、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/*" ] } } } ] }