キーポリシーを作成する - AWS Key Management Service

キーポリシーを作成する

キーポリシーは、AWS KMS コンソール、AWS KMS API オペレーション (CreateKeyReplicateKey、および PutKeyPolicy など)、または AWS CloudFormation テンプレートを使用して作成し、管理することができます。

AWS KMS コンソールで KMS キーを作成すると、コンソールのデフォルトのキーポリシーに基づいてキーポリシーを作成するためのステップがコンソールに表示されます。CreateKey または ReplicateKey API を使用するときにキーポリシーを指定しない場合、これらの API はプログラム的に作成されたキーのデフォルトキーポリシーを適用します。PutKeyPolicy を使用する、または AWS CloudFormation テンプレートを使用して KMS キーを作成する場合は、キーポリシーを指定することが必要になります。

各ポリシードキュメントには、1 つ以上のポリシーステートメントを指定できます。以下は、1 つのポリシーステートメントがある有効なキーポリシードキュメントの例です。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Describe the policy statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeySpec": "SYMMETRIC_DEFAULT" } } } ] }

キーポリシー形式

キーポリシードキュメントは、以下のルールに従う必要があります。

  • 最大 32 キロバイト (32,768 バイト)

  • キーポリシーステートメントの Sid 要素には、スペースを含めることができます。(IAM ポリシードキュメントの Sid 要素では、スペースが禁止されています。)

キーポリシードキュメントには、以下の文字のみを含めることができます。

  • 印字可能な ASCII 文字

  • 基本ラテンおよびラテン 1 補助文字セットの印字可能な文字

  • タブ (\u0009)、ラインフィード (\u000A)、およびキャリッジリターン (\u000D) の特殊文字

キーポリシー内の要素

キーポリシードキュメントには、次の要素が必要です。

Version

キーポリシードキュメントのバージョンを指定します。バージョンを 2012-10-17 (最新バージョン) に設定します。

Statement

ポリシーステートメントを囲みます。キーポリシードキュメントには、少なくとも 1 つのステートメントが必要です。

各キーポリシーステートメントは、最大 6 個の要素で構成されます。EffectPrincipalActionResource の要素は必須です。

Sid

(オプション) ステートメント識別子 (Sid)。ステートメントを記述するために使用できる任意の文字列です。キーポリシーの Sid には、スペースを含めることができます。(IAM ポリシーの Sid 要素にスペースを含めることはできません。)

Effect

(必須) ポリシーステートメント内の許可を許容するか拒否するかを決定します。有効な値は Allow または Deny です。KMS キーへのアクセスを明示的に許可しない場合、アクセスは暗黙的に拒否されます。KMS キーへのアクセスを明示的に拒否することもできます。これは、別のポリシーがアクセスを許可している場合でも、ユーザーがアクセスできないようにするために行います。

Principal

(必須) プリンシパルは、ポリシーステートメントで指定されている許可を取得するアイデンティティです。キーポリシーのプリンシパルとして、AWS アカウント、IAM ユーザー、IAM ロール、および一部の AWS サービスを指定できます。IAM ユーザーグループは、どのポリシータイプにおいても有効なプリンシパルではありません。

キーポリシーステートメントのプリンシパルが arn:aws:iam::111122223333:root" 形式の AWS アカウント プリンシパルである場合、ポリシーステートメントはいかなる IAM プリンシパルにも許可を付与しません。代わりに AWS アカウント 許可を付与し、IAM ポリシーを使用して、キーポリシーで指定された許可を委任します。(arn:aws:iam::111122223333:root" 形式のプリンシパルは、アカウント識別子に「root」が使用されていても AWS アカウントのルートユーザーを示すものではありません。ただし、アカウントプリンシパルは、アカウントのルートユーザーを含むアカウントとその管理者を表します。)

プリンシパルが別の AWS アカウント またはそのプリンシパルの場合、KMS キーとキーポリシーでリージョンのアカウントが有効になっている場合にのみ、アクセス許可が有効になります。デフォルトで有効になっていないリージョン (「オプトインリージョン」) については、「AWS 全般のリファレンス」の「AWS リージョン の管理」を参照してください。

注記

条件を使用してキーポリシーを制限しない限り、アクセス許可を付与するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクは、別のポリシーステートメントが明示的に拒否しない限り、すべての AWS アカウント のすべてのアイデンティティに、KMS キーを使用するアクセス許可を付与します。他の AWS アカウント のユーザーは、KMS キーを使用するために、各自のアカウントで対応する IAM アクセス許可が必要です。

別の AWS アカウント またはそのプリンシパルに KMS キーの使用を許可するには、キーポリシーと他のアカウントの IAM ポリシーで許可を提供する必要があります。詳細については、「他のアカウントのユーザーに KMS キーの使用を許可する」を参照してください。

Action

(必須) 許可または拒否する API オペレーションを指定します。例えば、kms:Encrypt アクションは AWS KMS の暗号化 オペレーションに対応します。ポリシーステートメントに複数のアクションを一覧表示できます。詳細については、「アクセス許可に関するリファレンス」を参照してください。

Resource

(必須) キーポリシーでは、Resource 要素の値が "*" になります。これは「この KMS キー」を意味します。アスタリスク ("*") は、キーポリシーがアタッチされた KMS キーを識別します。

注記

必要となる Resource 要素がキーポリシーステートメントにない場合、CreateKeyPutKeyPolicy API は成功しますが、ポリシーステートメントによる影響はありません。Resource 要素のないキーポリシーステートメントは、どの KMS キーにも適用されません。

Condition

(オプション) 条件は、キーポリシーを有効にするために満たす必要がある要件を指定します。条件により、AWS は、API リクエストのコンテキストを評価し、ポリシーステートメントが適用されるかどうかを判断できます。

条件を指定するには、事前定義された条件キーを使用します。AWS KMS は AWS グローバル条件キーAWS KMS 条件キーをサポートします。属性ベースのアクセスコントロール (ABAC) をサポートするために、AWS KMS は、タグとエイリアスに基づいて KMS キーへのアクセスを制御する条件キーを提供します。詳細については、「AWS KMS の ABAC」を参照してください。

条件の形式は次のとおりです。

"Condition": {"condition operator": {"condition key": "condition value"}}

例:

"Condition": {"StringEquals": {"kms:CallerAccount": "111122223333"}}

AWS ポリシー構文の詳細については、「IAM ユーザーガイド」の「 AWS IAM ポリシーリファレンス」を参照してください。

キーポリシーの例

以下は、対称暗号化 KMS キーの完全なキーポリシーの例です。この章の主なポリシー概念について読むと、参考に使うことができます。このキーポリシーでは、先ほどの「デフォルトキーポリシー」のセクションからのポリシーステートメント例と、以下を実行するための 1 つのキーポリシーを組み合わせています。

  • 例 AWS アカウント、111122223333 に、KMS キーへのフルアクセスを許可します。これにより、アカウントとその管理者 (アカウントのルートユーザーを含む) は、アカウントの IAM ポリシーを使用して KMS キーへのアクセスを許可できます。

  • IAM ユーザーの KMSAdminUser、および IAM ロールの KMSAdminRole が KMS キーを管理できるようにします。

  • IAM ユーザー ExampleUser、IAM ロール ExampleRole、および AWS アカウント 444455556666 が KMS キーを使用できるようにします。

{ "Version": "2012-10-17", "Id": "key-consolepolicy-2", "Statement": [ { "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }, { "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": "*" }, { "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"}} } ] }