外部キーストアへのアクセスの制御 - AWS Key Management Service

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

外部キーストアへのアクセスの制御

標準の KMS キーで使用するすべての AWS KMS アクセス制御機能 (キーポリシーIAM ポリシーグラント) は、外部キーストアの KMS キーでも同様に機能します。IAM ポリシーを使うことで、外部キーストアを作成し管理するための API オペレーションへのアクセスを、制御できます。外部キーストアの AWS KMS keys へのアクセスを制御するには、IAM ポリシーとキーポリシーを使用します。また、外部キーストアの KMS キーへのアクセスを制御するには、AWS 組織のサービス制御ポリシーVPC エンドポイントポリシーを使用することもできます。

ユーザーとロールには、それらが実行する可能性の高いタスクに必要なアクセス許可のみ、付与することが推奨されます。

外部キーストアマネージャーの承認

外部キーストアを作成し管理するプリンシパルには、カスタムキーストアオペレーションへのアクセス許可が必要になります。次のリストは、 外部キーストアマネージャーに必要な最小限のアクセス許可です。カスタムキーストアは AWS リソースではないため、ユーザーは、他の AWS アカウント キーストアのプリンシパルに、外部キーストアへのアクセス許可を付与することはできません。

  • kms:CreateCustomKeyStore

  • kms:DescribeCustomKeyStores

  • kms:ConnectCustomKeyStore

  • kms:DisconnectCustomKeyStore

  • kms:UpdateCustomKeyStore

  • kms:DeleteCustomKeyStore

外部キーストアを作成するプリンシパルは、外部キーストアコンポーネントを作成し構成するためのアクセス許可が必要になります。プリンシパルは、外部キーストアを自分のアカウントのみで作成できます。VPC エンドポイントサービスに接続できる外部キーストアを作成するには、プリンシパルは、次のコンポーネントを作成するためのアクセス許可を持っている必要があります。

  • An Amazon VPC

  • パブリックサブネットおよびプライベートサブネット

  • Network Load Balancer とターゲットグループ

  • Amazon VPC エンドポイントサービス

詳細については、「Amazon VPC の Identity and Access Management」、「VPC エンドポイントおよび VPC エンドポイントサービスの Identity and Access Management」、「Elastic Load Balancing API のアクセス許可」を参照してください。

外部キーストアにおける KMS キーのユーザー認証

外部キーストアで AWS KMS keys を作成し管理するプリンシパルは、AWS KMS で KMS キーを作成し管理するプリンシパルと同じアクセス許可が必要になります。外部キーストアの KMS キーの、デフォルトのキーポリシーは、AWS KMS の KMS キーの、デフォルトのキーポリシーと同一です。タグとエイリアスを使用して KMS キーへのアクセスを制御する属性ベースのアクセス制御 (ABAC) は、カスタムキーストアの KMS キーでも同様に有効です。

カスタムキーストアで暗号化オペレーションに KMS キーを使用するプリンシパルには、KMS キーで暗号化オペレーション (KMS: Decryptなど) を実行するアクセス許可が必要です。  これらのアクセス権限は、IAM またはキーポリシーで指定できます。ただし、カスタムキーストアで KMS キーを使用するための追加のアクセス許可は必要ありません。

外部キーストアの KMS キーにのみ適用されるアクセス許可を設定するには、値が EXTERNAL_KEY_STOREkms:KeyOrigin ポリシー条件を使用します。この条件を使用して、kms:CreateKey アクセス許可、または KMS キーリソースに固有のアクセス許可を制限できます。例えば、次の IAM ポリシーを使えば、アタッチされた ID は、KMS が外部キーストアにある限り、アカウントのすべての KMS キーで、指定されたオペレーションを呼び出すことができます。外部キーストアの KMS キーと AWS アカウント の KMS キーへのアクセス許可は制限できますが、アカウントの特定の外部キーストアへのアクセス許可は制限できため、注意が必要です。

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

AWS KMS と外部キーストアプロキシとの通信の承認

AWS KMS は、外部キーマネージャーとの通信を、提供された外部キーストアプロキシを介してのみ行います。AWS KMS は、指定された外部キーストアプロキシ認証の認証情報を持つ Signature Version 4 (SigV4) プロセスを使用してリクエストに署名することで、プロキシを承認します。外部キーストアプロキシにパブリックエンドポイント接続を使用している場合、AWS KMS に追加のアクセス許可は必要ありません。

ただし、VPC エンドポイントサービス接続を使用している場合は、AWS KMS に、インターフェイスエンドポイントを作成するためのアクセス許可を付与する必要があります。このアクセス許可は、外部キーストアプロキシが VPC にあるか、または外部キーストアプロキシが他の場所にあるかに関係なく必要となりますが、AWS KMS との通信には VPC エンドポイントサービスを使用します。

AWS KMS がインターフェイスエンドポイントを作成できるようにするには、Amazon VPC コンソールまたは ModifyVpcEndpointServicePermissionsオペレーションを使用します。次のプリンシパルにアクセス許可を付与します:cks.kms.<region>.amazonaws.com

例えば、次の AWS CLI コマンドは、AWS KMS が米国西部 (オレゴン) (us-west-2) リージョンにある指定された VPC エンドポイントサービスに接続することを許可します。このコマンドを使用するときは、先に、Amazon VPC サービス ID と AWS リージョン を、設定上の有効な値に置き換えます。

modify-vpc-endpoint-service-permissions --service-id vpce-svc-12abc34567def0987 --add-allowed-principals '["cks.kms.us-west-2.amazonaws.com"]'

このアクセス許可を削除するには、Amazon VPC コンソールまたは を RemoveAllowedPrincipalsパラメータModifyVpcEndpointServicePermissionsとともに使用します。

外部キーストアプロキシ認証 (オプション)

外部キーストアプロキシの中には、外部キーを使用するための認証要件を実装しているものがあります。外部キーストアプロキシは、特定のユーザーが特定の条件下でのみ特定のオペレーションをリクエストすることを許可する、認証スキームの設計と実装が許可されていますが、必須ではありません。例えばプロキシは、ユーザー A に、特定の外部キーを使用した暗号化は許可するが、それを使用した復号は許可しないように設計されていることがあります。

プロキシ認証は、AWS KMS がすべての外部キーストアプロキシに必要とする、SigV4 ベースのプロキシ認証からは独立しています。また、外部キーストアやその KMS キーに影響するオペレーションへのアクセスを認証する、キーポリシー、IAM ポリシー、グラントとも無関係です。

外部キーストアプロキシによる認証を有効にするため、AWS KMS には、各プロキシ API リクエストに、呼び出し元、KMS キー、AWS KMS オペレーション、AWS のサービス (存在する場合) などのメタデータが含まれています。外部キープロキシ API のバージョン 1 (v1) のリクエストメタデータは、次のとおりです。

"requestMetadata": { "awsPrincipalArn": string, "awsSourceVpc": string, // optional "awsSourceVpce": string, // optional "kmsKeyArn": string, "kmsOperation": string, "kmsRequestId": string, "kmsViaService": string // optional }

例えば、特定のプリンシパル (awsPrincipalArn) からのリクエストを、そのリクエストがプリンシパルの代わりに特定の AWS のサービス (kmsViaService) によって実行された場合のみ許可するよう、プロキシを設定することができます。

プロキシ認証に失敗すると、関連する AWS KMS オペレーションは失敗し、エラーの内容を説明するメッセージが表示されます。詳細については、「プロキシの承認に関する問題 」を参照してください。

mTLS 認証 (オプション)

外部キーストアプロキシが AWS KMS のリクエストを認証できるようにするために、AWS KMS は、外部キーストアへの Signature V4 (SigV4) プロキシ認証の認証情報を使って、外部キーストアプロキシへのすべてのリクエストに署名します。

外部キーストアプロキシが AWS KMS リクエストにのみ応答することをさらに確実にするために、一部の外部キープロキシでは mutual Transport Layer Security (mTLS) がサポートされています。mTLS ではトランザクションの両者が、互いを認証するために証明書を使用します。mTLS によって、標準 TLS が提供しているサーバー側認証に、クライアント側認証 (外部キーストアプロキシサーバーが AWS KMS クライアントを認証する) がさらに追加されます。万が一、プロキシ認証の認証情報が漏洩した場合、mTLS は、第三者が外部キーストアプロキシに API リクエストを実行することを防ぎます。

mTLS を実装するには、以下のプロパティを持つクライアント側の TLS 証明書のみを受け入れるように、外部キーストアプロキシを設定します。

  • TLS 証明書のサブジェクトの共通名は cks.kms.<Region>.amazonaws.com のようにします。例えば、cks.kms.eu-west-3.amazonaws.com などです。

  • この証明書は、Amazon Trust Services に関連づけられた認証局に、紐付けられている必要があります。