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

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

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

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

プログラムでキーを作成するときのデフォルトのKMSキーポリシー

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

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

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

アクセス許可

へのアクセスを許可 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キーへのアクセスを許可できるようにします。

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

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

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

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

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

例えば、1 人のユーザーにキーへのアクセスのみを許可するKMSキーポリシーを作成するとします。その後、そのユーザーを削除すると、キーは管理不能になり、サポートに連絡して AWSKMSキーへのアクセスを取り戻す必要があります。

上記のキーポリシーステートメントは、アカウントプリンシパル にキーを制御するアクセス許可を付与します。これはアカウントルートユーザー を含む 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 を許可します。でキーのKMSキーの詳細ページを表示するには、 kms:DescribeKey アクセス許可が必要です AWS Management Console。

kms:Enable*

kms:EnableKey を許可します。対称暗号化KMSキーの場合、 も許可されますkms:EnableKeyRotation

kms:List*

kms:ListGrantskms:ListKeyPolicies、および kms:ListResourceTags を許可します。( でKMSキーを表示するために必要な kms:ListAliasesおよび アクセスkms:ListKeys許可は AWS Management Console、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。KMS キーのキーポリシーを に表示するには、 kms:GetKeyPolicy アクセス許可が必要です AWS Management Console。

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キーを直接使用するアクセス許可を付与します。

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

KMS キーの作成時に、IAMキーユーザーのリスト AWS アカウント にユーザー、IAMロール、その他を追加できます。次の図に示すように、キーポリシーのコンソールのデフォルトビューを使用してリストを編集することもできます。キーポリシー用デフォルトビューは、キーの詳細ページにあります。他のユーザーに 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 コンソール内のKMSキーに関する詳細情報を取得したり、 AWS KMS APIオペレーションを使用したりすることもできます。

デフォルトでは、 AWS KMS コンソールは、次の例のようなキーユーザーのステートメントをデフォルトのキーポリシーに追加します。これらはさまざまなAPIオペレーションをサポートしているため、対称暗号化KMSキー、HMACKMSキー、パブリックキー暗号化の非対称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 キー

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

{ "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キーに関する詳細情報を取得できます。また、キーユーザーは AWS KMS 、コンソールにKMSキーの詳細を表示することもできます。

kms:GenerateDataKey*

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

kms:GenerateMac

キーユーザーがHMACKMSキーを使用して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

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

キーユーザーが KMS キーを AWS サービスで使用できるようにする

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

このキーポリシーステートメントでは、キーユーザーは、 AWS と統合されたサービス AWS KMSから付与オペレーションリクエストが送信された場合にのみ、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キーに対してこれらのアクセス許可を使用できます。

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

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

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

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