キーポリシーを作成する
キーポリシーは、AWS KMS コンソール、AWS KMS API オペレーション (CreateKey、ReplicateKey、および 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 個の要素で構成されます。
Effect
、Principal
、Action
、Resource
の要素は必須です。- Sid
-
(オプション) ステートメント識別子 (
Sid
)。ステートメントを記述するために使用できる任意の文字列です。キーポリシーのSid
には、スペースを含めることができます。(IAM ポリシーのSid
要素にスペースを含めることはできません。) - Effect
(必須) ポリシーステートメント内の許可を許容するか拒否するかを決定します。有効な値は
Allow
またはDeny
です。KMS キーへのアクセスを明示的に許可しない場合、アクセスは暗黙的に拒否されます。KMS キーへのアクセスを明示的に拒否することもできます。これは、別のポリシーがアクセスを許可している場合でも、ユーザーがアクセスできないようにするために行います。- Principal
(必須) プリンシパルは、ポリシーステートメントで指定されている許可を取得するアイデンティティです。キーポリシーのプリンシパルとして、AWS アカウント、IAM ユーザー、IAM ロール、および一部の AWS サービスを指定できます。IAM ユーザーグループは、どのポリシータイプにおいても有効なプリンシパルではありません。
キーポリシーステートメントのプリンシパルが
arn:aws:iam::
形式の AWS アカウント プリンシパルである場合、ポリシーステートメントはいかなる IAM プリンシパルにも許可を付与しません。代わりに AWS アカウント 許可を付与し、IAM ポリシーを使用して、キーポリシーで指定された許可を委任します。(111122223333
:root"arn:aws:iam::
形式のプリンシパルは、アカウント識別子に「root」が使用されていても AWS アカウントのルートユーザーを示すものではありません。ただし、アカウントプリンシパルは、アカウントのルートユーザーを含むアカウントとその管理者を表します。)111122223333
:root"プリンシパルが別の AWS アカウント またはそのプリンシパルの場合、KMS キーとキーポリシーでリージョンのアカウントが有効になっている場合にのみ、アクセス許可が有効になります。デフォルトで有効になっていないリージョン (「オプトインリージョン」) については、「AWS 全般のリファレンス」の「AWS リージョン の管理」を参照してください。
注記 条件を使用してキーポリシーを制限しない限り、アクセス許可を付与するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクは、別のポリシーステートメントが明示的に拒否しない限り、すべての AWS アカウント のすべてのアイデンティティに、KMS キーを使用するアクセス許可を付与します。他の AWS アカウント のユーザーは、KMS キーを使用するために、各自のアカウントで対応する IAM アクセス許可が必要です。
別の AWS アカウント またはそのプリンシパルに KMS キーの使用を許可するには、キーポリシーと他のアカウントの IAM ポリシーで許可を提供する必要があります。詳細については、「他のアカウントのユーザーに KMS キーの使用を許可する」を参照してください。
- Action
(必須) 許可または拒否する API オペレーションを指定します。例えば、
kms:Encrypt
アクションは AWS KMS の暗号化 オペレーションに対応します。ポリシーステートメントに複数のアクションを一覧表示できます。詳細については、「アクセス許可に関するリファレンス」を参照してください。- Resource
(必須) キーポリシーでは、Resource 要素の値が
"*"
になります。これは「この KMS キー」を意味します。アスタリスク ("*"
) は、キーポリシーがアタッチされた KMS キーを識別します。注記 必要となる
Resource
要素がキーポリシーステートメントにない場合、CreateKey と PutKeyPolicy 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"}} } ] }