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

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

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

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

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

AWS Management Console を使用して KMS キーを作成した場合のデフォルトのキーポリシー

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

アクセス許可

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

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

  • このステートメントは、KMS キーを所有する AWS アカウント に KMS キーへのフルアクセスを付与しています。

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

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

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

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

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

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

上記のキーポリシーステートメントは、キーの許可を有する AWS アカウント に IAM ポリシーとキーポリシーを使用して、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」を参照してください。

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


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

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

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KMSAdminUser", "arn:aws:iam::111122223333:role/KMSAdminRole" ]}, "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" ], "Resource": "*" }

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

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

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

 

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

kms:ImportKeyMaterial

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

kms:ReplicateKey

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

kms:UpdatePrimaryRegion

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

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

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

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

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


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

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

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

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/ExampleUser", "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:user/ExampleUser", "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:user/ExampleUser"}, "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:user/ExampleUser"}, "Action": [ "kms:DescribeKey", "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*" }
非対称 KMS キーのパブリックキー暗号化

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

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "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:user/ExampleUser"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:Sign", "kms:Verify" ], "Resource": "*" }

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

kms:Encrypt

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

kms:Decrypt

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

kms:DescribeKey

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

kms:GenerateDataKey*

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

kms:GenerateMac

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

kms: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 キーで署名をキーユーザーが検証できるようにします。

kms:VerifyMac

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

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

コンソールのデフォルトキーポリシーでは、グラントを使用する AWS サービス内のデータを保護するために必要となるグラント許可もキーユーザーに付与されます。AWS サービスでは、KMS キーを使用するための特定の限定された許可を取得するために、しばしばグラントを使用します。

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

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

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "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 サービスへの許可を制限するカスタムキーポリシーを作成することができます。詳細については、「kms:ViaService」の条件キーを参照してください。