デフォルトのキーポリシー - AWS Key Management Service

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

デフォルトのキーポリシー

KMS キーを作成するときに、新しい KMS キーのキーポリシーを指定できます。指定しない場合、 によって AWS KMS 自動的に作成されます。が AWS KMS 使用するデフォルトのキーポリシーは、 AWS KMS コンソールでキーを作成するか AWS KMS API を使用するかによって異なります。

KMS キーをプログラムにより作成したときのデフォルトキーポリシー

AWS KMS API を使用してプログラムで KMS キーを作成し ( AWS SDKsAWS Command Line Interface、または の使用を含むAWS Tools for PowerShell)、キーポリシーを指定しない場合、 は非常にシンプルなデフォルトキーポリシー AWS KMS を適用します。このデフォルトキーポリシーには、KMS キーを所有 AWS アカウント する に、IAM ポリシーを使用して KMS キー上のすべての AWS KMS オペレーションへのアクセスを許可するアクセス許可を付与するポリシーステートメントが 1 つあります。このポリシーステートメントの詳細については、「AWS アカウント へのアクセスを許可し、IAM ポリシーを有効にする」を参照してください。

を使用して KMS キーを作成するときのデフォルトキーポリシー AWS Management Console

を使用して KMS キーを作成すると AWS Management Console、キーポリシーは、 へのアクセスを許可 AWS アカウント し、IAM ポリシー を有効にするポリシーステートメントで始まります。次に、コンソールは、キー管理者ステートメント キーユーザーステートメント 、およびプリンシパルが他の AWS サービス で KMS キーを使用できるようにするステートメント を追加します (ほとんどのキータイプ)。 AWS KMS コンソールの機能を使用して、IAM ユーザー、IAMroles、およびキーユーザー (またはその両方) を指定できます。 AWS アカウント

アクセス許可

AWS アカウント へのアクセスを許可し、IAM ポリシーを有効にする

次のデフォルトのキーポリシーステートメントは重要です。

  • これにより、KMS キーを所有 AWS アカウント する に KMS キーへのフルアクセスが付与されます。

    他の AWS リソースポリシーとは異なり、 AWS KMS キーポリシーは、アカウントまたはその ID にアクセス許可を自動的に付与しません。アカウント管理者に許可を付与するには、キーポリシーに、このような許可を提供する明示的なステートメントを含める必要があります。

  • これにより、アカウントは IAM ポリシーを使用して、キーポリシーに加えて KMS キーへのアクセスを許可できるようになります。

    この許可がないと、キーへのアクセスを許可する IAM ポリシーは無効になりますが、キーへのアクセスを拒否する IAM ポリシーは依然として有効です。

  • 削除できないアカウントのルートユーザーを含むアカウント管理者にアクセスコントロールの許可を付与することで、キーが管理不能になるリスクが軽減されます。

次のキーポリシーステートメントは、プログラムで作成された KMS キーのデフォルトキーポリシーの全文です。これは、 AWS KMS コンソールで作成された KMS キーのデフォルトキーポリシーの最初のポリシーステートメントです。

{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }
IAM ポリシーが KMS キーへのアクセスを許可できるようにします。

上記のキーポリシーステートメントは、IAM ポリシーとキーポリシーを使用するためのキー許可を所有 AWS アカウント する に、KMS キーに対するすべてのアクション (kms:*) を許可する許可を付与します。

このキーポリシーステートメントのプリンシパルはアカウントプリンシパルであり、これはこの形式にある ARN で表されています: arn:aws:iam::account-id:root。アカウントプリンシパルは、 AWS アカウントとその管理者を表します。

キーポリシーステートメントのプリンシパルがアカウントプリンシパルである場合、ポリシーステートメントはどの IAM プリンシパルに対しても、KMS キーを使用する許可を付与しません。代わりにアカウントに IAM ポリシーを使用して、ポリシーステートメントで指定された許可を委譲することができます。このデフォルトのキーポリシーステートメントにより、アカウントは IAM ポリシーを使用して、KMS キーに対するすべてのアクション (kms:*) の許可を委譲することができます。

KMS キーが管理不能になるリスクを減らします。

他の AWS リソースポリシーとは異なり、 AWS KMS キーポリシーは、アカウントまたはそのプリンシパルに自動的にアクセス許可を付与しません。プリンシパルに許可を与えるには (アカウントプリンシパルを含む)、許可を明示的に提供するキーポリシーステートメントを使用する必要があります。アカウントプリンシパルまたはプリンシパルに、KMS キーへのアクセス権を付与する必要はありません。ただし、アカウントプリンシパルにアクセス権を付与することは、キーが管理不能になるのを防ぐために役立ちます。

たとえば、KMS キーへのアクセスを 1 人のユーザーだけに付与するキーポリシーを作成したとします。その後、そのユーザーを削除すると、キーは管理不能になり、KMS キーへのアクセスを取り戻すためにAWS サポートに連絡しなければなりません。

上記のキーポリシーステートメントは、アカウントプリンシパル にキーを制御するアクセス許可を付与します。アカウントプリンシパル はアカウントのルートユーザー を含む AWS アカウント とその管理者を表します。アカウントのルートユーザーは、 AWS アカウントを削除しない限り削除できない唯一のプリンシパルです。IAM のベストプラクティスでは、緊急時を除き、アカウントのルートユーザーの代わりとして行動することを推奨していません。ただし、KMS キーへのアクセス権を持つ他のすべてのユーザーおよびロールを削除した場合には、アカウントのルートユーザーとして行動する必要が生じる場合があります。

KMS キーの管理をキー管理者に許可する

コンソールによって作成されるデフォルトのキーポリシーでは、アカウントで IAM ユーザーとロールを選択し、それらをキー管理者にすることができます。このステートメントは、キー管理者ステートメントと呼ばれます。キー管理者には、KMS キーを管理するためのアクセス許可はありますが、暗号化オペレーションで KMS キーを使用するためのアクセス許可はありません。デフォルトビューやポリシービューで KMS キーを作成するときに、IAM ユーザーとロールをキー管理者のリストに追加できます。

警告

キー管理者にはキーポリシーを変更して許可を作成するアクセス許可があるため、このポリシーで指定されていない AWS KMS アクセス許可を自分自身や他の管理者に付与できます。

タグとエイリアスを管理するアクセス権限を持つプリンシパルも、KMS キーへのアクセスを制御することができます。詳細については、「AWS KMS の ABAC」を参照してください。

注記

IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティのベストプラクティス」を参照してください。

次の例は、 AWS KMS コンソールのデフォルトビューでのキー管理者ステートメントを示しています。

コンソールのデフォルトキーポリシーのキー管理者、デフォルトビュー

AWS KMS コンソールのポリシービューでのキー管理者ステートメントの例を次に示します。このキー管理者ステートメントは、単一リージョンの対称暗号化 KMS キー向けのものです。

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole"}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion", "kms:RotateKeyOnDemand" ], "Resource": "*" }

最も一般的な KMS キーである単一リージョンの対称暗号化 KMS キーのデフォルトキー管理者ステートメントは、以下の許可を付与します。各アクセス許可の詳細については、「AWS KMS アクセス許可」を参照してください。

AWS KMS コンソールを使用して KMS キーを作成すると、コンソールは指定したユーザーとロールをキー管理者ステートメントの Principal要素に追加します。

これらのアクセス許可の多くには、指定した動詞で始まるアクセス許可すべてを許可するワイルドカード文字 (*) が含まれています。その結果、 が新しい API オペレーション AWS KMS を追加すると、キー管理者は自動的にそれらを使用できます。新しいオペレーションを含めるために、キーポリシーを更新する必要はありません。キー管理者を固定された一連の API オペレーションに限定する場合は、キーポリシーを変更することができます。

kms:Create*

kms:CreateAlias および kms:CreateGrant を許可します。(kms:CreateKey のアクセス許可は IAM ポリシーでのみ有効です)

kms:Describe*

kms:DescribeKey を許可します。– AWS Management Consoleで KMS キーのキーの詳細ページを表示するには、kms:DescribeKey のアクセス許可が必要です。

kms:Enable*

kms:EnableKey を許可します。対称暗号化 KMS キーについては、kms:EnableKeyRotation も許可します。

kms:List*

kms:ListGrantskms:ListKeyPolicies、および kms:ListResourceTags を許可します。(KMS キーを AWS Management Consoleで表示するのに必要な kms:ListAliases および kms:ListKeys のアクセス許可は、IAM ポリシーでのみ有効です)

kms:Put*

kms:PutKeyPolicy を許可します。このアクセス許可により、キー管理者が、この KMS キーのキーポリシーを変更できるようになります。

kms:Update*

kms:UpdateAlias および kms:UpdateKeyDescription を許可します。マルチリージョンキーの場合、この KMS キーで kms:UpdatePrimaryRegion が許可されます。

kms:Revoke*

kms:RevokeGrant を許可します。これにより、キー管理者は自分がグラントの無効なプリンシパルでなくてもグラントを削除できるようになります。

kms:Disable*

kms:DisableKey を許可します。対称暗号化 KMS キーについては、kms:DisableKeyRotation も許可します。

kms:Get*

kms:GetKeyPolicy および kms:GetKeyRotationStatus を許可します。インポートしたキーマテリアルを含む KMS キーの場合、kms:GetParametersForImport を許可します。非対称 KMS キーの場合、kms:GetPublicKey を許可します。 AWS Management Consoleで KMS キーのキーポリシーを表示するには、kms:GetKeyPolicy のアクセス許可が必要です。

kms:Delete*

kms:DeleteAlias を許可します。インポートしたキーマテリアルを含むキーの場合、kms:DeleteImportedKeyMaterial を許可します。kms:Delete* のアクセス許可では、キー管理者が KMS キー (ScheduleKeyDeletion) を削除できません。

kms:TagResource

kms:TagResource を許可します。これにより、キー管理者は KMS キーにタグを追加できるようになります。タグは KMS キーへのアクセス制御にも使用できるため、このアクセス許可により、管理者が KMS キーへのアクセスを許可または拒否できるようになります。詳細については、「AWS KMS の ABAC」を参照してください。

kms:UntagResource

kms:UntagResource を許可します。これにより、キー管理者は KMS キーからタグを削除できるようになります。タグはキーへのアクセス制御に使用できるため、このアクセス許可により、管理者は KMS キーへのアクセスを許可または拒否できるようになります。詳細については、「AWS KMS の ABAC」を参照してください。

kms:ScheduleKeyDeletion

kms:ScheduleKeyDeletion を許可します。これにより、キー管理者はこの KMS キーを削除できるようになります。このアクセス許可を削除するには、[Allow key administrators to delete this key] (キーの管理者がこのキーを削除できるようにします) オプションをオフにします。

kms:CancelKeyDeletion

kms:CancelKeyDeletion を許可します。これにより、キー管理者はこの KMS キーの削除をキャンセルできるようになります。このアクセス許可を削除するには、[Allow key administrators to delete this key] (キーの管理者がこのキーを削除できるようにします) オプションをオフにします。

kms:RotateKeyOnDemand

を許可します。これによりkms:RotateKeyOnDemand、キー管理者はこの KMS キー のキーマテリアルのオンデマンドローテーションを実行できます

 

AWS KMS は、専用キー を作成するときに、デフォルトのキー管理者ステートメントに次のアクセス許可を追加します。

kms:ImportKeyMaterial

kms:ImportKeyMaterial のアクセス許可により、キー管理者が KMS キーにキーマテリアルをインポートできるようになります。このアクセス許可は、キーマテリアルのない KMS キーを作成する場合にのみキーポリシーに含まれます。

kms:ReplicateKey

アクセスkms:ReplicateKey許可により、キー管理者は別のリージョンにマルチリージョンのプライマリキーのレプリカを作成できます AWS 。このアクセス許可は、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーを作成する場合にのみ、キーポリシーに含まれます。

kms:UpdatePrimaryRegion

kms:UpdatePrimaryRegion のアクセス許可により、キー管理者が、マルチリージョンレプリカキーをマルチリージョンプライマリキーに変更できるようになります。このアクセス許可は、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーを作成する場合にのみ、キーポリシーに含まれます。

KMS キーの使用をキーユーザーに許可する

コンソールが KMS キー用に作成するデフォルトのキーポリシーでは、アカウントの IAM ユーザーと IAM ロール、および外部 を選択し AWS アカウント、キーユーザー にすることができます。

コンソールは、キーユーザーのキーポリシーに 2 つのポリシーステートメントを追加します。

  • KMS キーの直接使用 — 最初のキーポリシーステートメントは、そのタイプの KMS キーでサポートされるすべての暗号化オペレーションに対して KMS キーを直接使用するアクセス許可をキーユーザーに付与します。

  • サービスで AWS KMS キーを使用する — 2 番目のポリシーステートメントは、 と統合されている AWS サービスが、Amazon S3 バケットや Amazon DynamoDB テーブル などのリソースを保護するために、ユーザーに代わって KMS キー AWS KMS を使用できるようにするアクセス許可をキーユーザーに付与します。

KMS キーを作成するときに、IAM ユーザー、IAM ロール、その他の AWS アカウント をキーユーザーのリストに追加できます。次の図に示すように、キーポリシーのコンソールのデフォルトビューを使用してリストを編集することもできます。キーポリシー用デフォルトビューは、キーの詳細ページにあります。他の のユーザーに KMS キー AWS アカウント の使用を許可する方法の詳細については、「」を参照してください他のアカウントのユーザーに KMS キーの使用を許可する

注記

IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティのベストプラクティス」を参照してください。

コンソールのデフォルトキーポリシーのキーユーザー、デフォルトビュー

デフォルトの単一リージョンの対称用キーユーザーステートメントにより、次のアクセス許可が付与されます。各アクセス許可の詳細については、AWS KMS アクセス許可 を参照してください。

AWS KMS コンソールを使用して KMS キーを作成すると、コンソールは指定したユーザーとロールを各キーユーザーステートメントの Principal要素に追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }

暗号化オペレーションで KMS キーを使用することをキーユーザーに許可する

キーユーザーには、KMS キーでサポートされるすべての暗号化オペレーションで KMS キー を直接使用するためのアクセス許可が付与されています。また、 DescribeKey オペレーションを使用して、 AWS KMS コンソールまたは AWS KMS API オペレーションを使用して KMS キーに関する詳細情報を取得することもできます。

デフォルトでは、 AWS KMS コンソールは、次の例のようなキーユーザーステートメントをデフォルトのキーポリシーに追加します。これらは異なる API オペレーションをサポートするため、対称暗号化 KMS キー、HMAC KMS キー、パブリックキー暗号化用の非対称 KMS キー、および署名と検証用の非対称 KMS キー向けのポリシーステートメント内のアクションは、それぞれわずかに異なります。

対称暗号化 KMS キー

コンソールは、対称暗号化 KMS キーのキーポリシーに以下のステートメントを追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*" ], "Resource": "*" }
HMAC KMS キー

コンソールは、HMAC KMS キーのキーポリシーに以下のステートメントを追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:DescribeKey", "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*" }
非対称 KMS キーのパブリックキー暗号化

コンソールでは、暗号化と復号のキーを使用して、非対称 KMS キーのキーポリシーに次のステートメントを追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey", "kms:GetPublicKey" ], "Resource": "*" }
非対称 KMS キーの署名および検証

コンソールは、署名と検証のキーを使用して、非対称 KMS キーのキーポリシーに次のステートメントを追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:Sign", "kms:Verify" ], "Resource": "*" }
共有シークレットを取得するための非対称 KMS キー

コンソールは、キーアグリーメント のキー使用法を持つ非対称 KMS キーのキーポリシーに次のステートメントを追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:DeriveSharedSecret" ], "Resource": "*" }

これらのステートメントのアクションは、キーユーザーに次のアクセス許可を付与します。

kms:Encrypt

キーユーザーがこの KMS キーでデータを暗号化できるようにします。

kms:Decrypt

キーユーザーがこの KMS キーでデータを復号できるようにします。

kms:DeriveSharedSecret

キーユーザーがこの KMS キーを使用して共有シークレットを取得できるようにします。

kms:DescribeKey

この KMS キーに関する詳細情報 (その識別子、作成日、キーステータスなど) を、キーユーザーが取得できるようにします。また、キーユーザーは KMS キーの詳細を AWS KMS コンソールに表示することもできます。

kms:GenerateDataKey*

クライアント側の暗号化オペレーションのために、対称データキーまたは非対称データキーペアをキーユーザーがリクエストできるようにします。コンソールでは、* ワイルドカード文字を使用して、、GenerateDataKey、、GenerateDataKeyWithoutPlaintextGenerateDataKeyPairおよび の API オペレーションのアクセス許可を表しますGenerateDataKeyPairWithoutPlaintext。これらのアクセス許可は、データキーを暗号化する対称 KMS キーでのみ有効です。

km:GenerateMac

キーユーザーが HMAC KMS キーを使用して HMAC タグを生成できるようにします。

km:GetPublicKey

非対称 KMS キーのパブリックキーをキーユーザーがダウンロードできるようにします。このパブリックキーを共有する関係者は、 の外部でデータを暗号化できます AWS KMS。ただし、これらの暗号テキストは、 AWS KMSで Decrypt オペレーションを呼び出すことによってのみ復号できます。

kms:ReEncrypt*

この KMS キーで最初に暗号化されたデータの再暗号化、またはこの KMS キーを使用して以前に暗号化されたデータの再暗号化をキーユーザーが行えるようにします。ReEncrypt オペレーションでは、送信元と送信先の KMS キーの両方にアクセスする必要があります。これを行うには、ソース KMS キーの kms:ReEncryptFrom アクセス許可と宛先 KMS キーの kms:ReEncryptTo アクセス許可を許可します。ただし、わかりやすいようにコンソールでは、両方の KMS キーで kms:ReEncrypt* を (* をワイルドカード文字で) 許可します。

kms:Sign

この KMS キーでメッセージにキーユーザーが署名できるようにします。

kms:Verify

この KMS キーで署名をキーユーザーが検証できるようにします。

km:VerifyMac

キーユーザーが HMAC KMS キーを使用して HMAC タグを検証できるようにします。

AWS サービスで KMS キーを使用することをキーユーザーに許可する

コンソールのデフォルトのキーポリシーでは、grants を使用する AWS のサービスでデータを保護するために必要な権限をキーユーザーに付与します。 AWS サービスは、多くの場合、権限を使用して KMS キーを使用するための具体的で制限された権限を取得します。

このキーポリシーステートメントは、キーユーザーが KMS キーに対する許可を作成、表示、および取り消すことを許可します。ただし、許可オペレーションリクエストが AWS と統合された サービス AWS KMSから送信された場合に限ります。kms:GrantIsForAWSResource ポリシー条件では、ユーザーはこれらの許可オペレーションを直接呼び出すことはできません。キーユーザーが許可すると、 AWS サービスはユーザーに代わってグラントを作成し、KMS キーを使用してユーザーのデータを保護することをサービスに許可できます。

キーユーザーが統合サービスで KMS キーを使用するには、これらのグラント許可が必要になりますが、これらの許可だけでは不十分です。キーユーザーには、統合されたサービスを使用するアクセス許可も必要です。と統合されている AWS のサービスへのアクセス権をユーザーに付与する方法の詳細については AWS KMS、統合サービスのドキュメントを参照してください。

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }

例えば、キーユーザーは以下の方法により、KMS キーでこれらのアクセス許可を使用できます。

  • この KMS キーを Amazon Elastic Block Store (Amazon EBS) および Amazon Elastic Compute Cloud (Amazon EC2) とともに使用して、暗号化された EBS ボリュームを EC2 インスタンスにアタッチします。キーユーザーは、KMS キーを使用して暗号化されたボリュームをインスタンスにアタッチするアクセス許可を、Amazon EC2 に暗黙的に付与します。詳細については、「Amazon Elastic Block Store (Amazon EBS) が を使用する方法 AWS KMS」を参照してください。

  • この KMS キーを Amazon Redshift とともに使用して、暗号化されたクラスターを起動します。キーユーザーは、KMS キーを使用して暗号化されたクラスターを起動し、暗号化されたスナップショットを作成するアクセス許可を、Amazon Redshift に暗黙的に付与します。詳細については、「Amazon Redshift が AWS KMS を使用する方法」を参照してください。

  • この KMS キーを、AWS KMSと統合された他のAWS サービスで使用します。これらのサービスは、暗号化されたリソースを作成、管理したり、これらのサービスで使用する際にグラントを使用します。

デフォルトキーポリシーにより、キーユーザーは、自身のグラント許可をグラントを使用するすべての統合サービスに付与することができます。ただし、指定された AWS サービスへのアクセス許可を制限するカスタムキーポリシーを作成できます。詳細については、「km:ViaService」の条件キーを参照してください。