デフォルトのキーポリシー
KMS キーを作成するときに、新しい KMS キーのキーポリシーを指定できます。指定しない場合、このポリシーは AWS KMS によって作成されます。AWS KMS が使用するデフォルトのキーポリシーは、キーが AWS KMS コンソールで作成されたかどうか、または AWS KMS API を使用したかどうかによって異なります。
- KMS キーをプログラムにより作成したときのデフォルトキーポリシー
-
AWS KMS API を使用して KMS キーをプログラム (AWS SDK
、AWS Command Line Interface、または AWS Tools for PowerShell の使用を含む) で作成し、キーポリシーを指定しなかった場合、AWS KMS は非常にシンプルなデフォルトキーポリシーを適用します。このデフォルトのキーポリシーには、KMS キー許可を有する AWS アカウント に対して、IAM ポリシーを使用して KMS キー上のすべての AWS KMS オペレーションに対するアクセスを許可する権限を付与するポリシーステートメントが 1 つ含まれます。このポリシーステートメントの詳細については、「AWS アカウント へのアクセスを許可し、IAM ポリシーを有効にする」を参照してください。 - AWS マネジメントコンソール を使用して KMS キーを作成した場合のデフォルトのキーポリシー
-
AWS マネジメントコンソール を使用して KMS キーを作成した場合、キーポリシーは、AWS アカウント へのアクセスを許可し、IAM ポリシーを有効にするポリシーステートメントで始まります。次に、コンソールはキー管理者ステートメント、キーユーザーステートメント、および (ほとんどのキータイプで) プリンシパルに他の AWS サービスで KMS キーを使用する許可を与えるステートメントを追加します。AWS KMS コンソールの機能を使用して IAM ユーザー、IAM ロール、AWS アカウント (キー管理者、キーユーザー、またはその両方) を指定できます。
アクセス許可
AWS アカウント へのアクセスを許可し、IAM ポリシーを有効にする
次のデフォルトのキーポリシーステートメントは重要です。
-
このステートメントは、KMS キーを所有する AWS アカウント に KMS キーへのフルアクセスを付与しています。
他の AWS リソースポリシーとは異なり、AWS KMS キーポリシーは、アカウントまたはそのアイデンティティに対して許可を自動的に付与しません。アカウント管理者に許可を付与するには、キーポリシーに、このような許可を提供する明示的なステートメントを含める必要があります。
-
これにより、アカウントは 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 キーへのアクセスを許可できるようにします。
-
上記のキーポリシーステートメントは、キーの許可を有する AWS アカウント に IAM ポリシーとキーポリシーを使用して、KMS キーに対するすべてのアクション (
kms:*) を許可する権限を付与しています。このキーポリシーステートメントのプリンシパルはアカウントプリンシパルであり、これはこの形式にある ARN で表されています:
arn:aws:iam::。アカウントプリンシパルは、AWS アカウントとその管理者を表します。account-id:rootキーポリシーステートメントのプリンシパルがアカウントプリンシパルである場合、ポリシーステートメントはどの 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 キー向けのものです。
注記
AWS KMS コンソールは、ステートメント識別子 "Allow access for Key Administrators" のキーポリシーにキー管理者を追加します。このステートメント識別子を変更すると、コンソールでステートメントに加えた更新が表示される方法に影響する可能性があります。
{ "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 要素に追加します。
これらのアクセス許可の多くには、指定した動詞で始まるアクセス許可すべてを許可するワイルドカード文字 (*) が含まれています。その結果、AWS KMS で新しい API オペレーションが追加されると、キー管理者が自動的にそれらを使用できるようになります。新しいオペレーションを含めるために、キーポリシーを更新する必要はありません。キー管理者を固定された一連の API オペレーションに限定する場合は、キーポリシーを変更することができます。
kms:Create*-
kms:CreateAlias および kms:CreateGrant を許可します。(
kms:CreateKeyのアクセス許可は IAM ポリシーでのみ有効です) kms:Describe*-
kms:DescribeKey を許可します。– AWS マネジメントコンソール で KMS キーのキーの詳細ページを表示するには、
kms:DescribeKeyのアクセス許可が必要です。 kms:Enable*-
kms:EnableKey を許可します。対称暗号化 KMS キーについては、kms:EnableKeyRotation も許可します。
kms:List*-
kms:ListGrants、
kms:ListKeyPolicies、および kms:ListResourceTags を許可します。(KMS キーを AWS マネジメントコンソール で表示するのに必要な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 マネジメントコンソール で 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 KMS と統合された AWS サービスが代わりに KMS キーを使用して、Amazon S3 バケットや Amazon DynamoDB テーブルなどのリソースを保護できるようにします。
KMS キーの作成時に、IAM ユーザー、IAM ロール、その他の AWS アカウント をキーユーザーのリストに追加できます。次の図に示すように、キーポリシーのコンソールのデフォルトビューを使用してリストを編集することもできます。キーポリシー用デフォルトビューは、キーの詳細ページにあります。他の AWS アカウント のユーザーに KMS キーの使用を許可する方法の詳細については、他のアカウントのユーザーに KMS キーの使用を許可する を参照してください 。
注記
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティのベストプラクティス」を参照してください。
デフォルトの単一リージョンの対称用キーユーザーステートメントにより、次のアクセス許可が付与されます。各アクセス許可の詳細については、AWS KMS アクセス権限 を参照してください。
AWS KMS コンソールを使用して KMS キーを作成する場合、コンソールでは、指定したユーザーとロールを各キーユーザーステートメントの Principal 要素に追加します。
注記
AWS KMS コンソールは、ステートメント識別子 "Allow use of the key" および "Allow
attachment of persistent resources" のキーポリシーにキーユーザーを追加します。これらのステートメント識別子を変更すると、コンソールでステートメントに加えた更新が表示される方法に影響する可能性があります。
{ "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*-
クライアント側の暗号化オペレーションのために、対称データキーまたは非対称データキーペアをキーユーザーがリクエストできるようにします。コンソールは * ワイルドカード文字を使用して、次の API オペレーションの権限を表します: GenerateDataKey、GenerateDataKeyWithoutPlaintext、GenerateDataKeyPair、GenerateDataKeyPairWithoutPlaintext。これらのアクセス許可は、データキーを暗号化する対称 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 キーを使用するには、これらのグラント許可が必要になりますが、これらの許可だけでは不十分です。キーユーザーには、統合されたサービスを使用するアクセス許可も必要です。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 サービスへの許可を制限するカスタムキーポリシーを作成することができます。詳細については、「kms:ViaService」の条件キーを参照してください。