IAM ポリシーのベストプラクティス
AWS KMS keys へのアクセスを保護することは、すべての AWS リソースのセキュリティにとって不可欠です。KMS キーは、AWS アカウント で最も機密性の高いリソースの多くを保護するために使用されます。KMS キーへのアクセスを制御するキーポリシー、IAM ポリシー、権限、VPC エンドポイントポリシーを設計します。
KMS キーへのアクセスを制御する IAM ポリシーステートメントでは、最小権限の原則を使用します。IAM プリンシパルで、使用または管理する必要がある KMS キーのみに対して、必要なアクセス許可のみを付与します。
- キーポリシーを使用する
-
可能であれば、他の AWS アカウント を含む多くの KMS キーに適用できる IAM ポリシーではなく、1 つの KMS キーに影響するキーポリシーでアクセス許可を付与します。これは、 kms:PutKeyPolicy や kms:ScheduleKeyDeletion などの機密性の高いアクセス許可にとって特に重要ですが、データの保護方法を決定する暗号化オペレーションでも重要です。
- CreateKey アクセス許可を制限する
-
キー (kms:CreateKey) を作成する権限を必要なプリンシパルにのみ付与します。KMS キーを作成するプリンシパルは、そのキーポリシーも設定するため、自分自身や他のユーザーに、作成した KMS キーを使用および管理するためのアクセス許可を付与できます。このアクセス許可を許可する場合は、 ポリシー条件を使用して制限することを検討してください。例えば、kms:KeySpec 条件を使用して、対称暗号化 KMS キーに対する許可を制限できます。
- IAM ポリシーで KMS キーを指定する
-
ベストプラクティスとして、ポリシーステートメントの
Resource
要素でアクセス許可が適用する各 KMS キーの キー ARN を指定します。この方法は、プリンシパルが必要とする KMS キーへのアクセス許可を制限します。例えば、このResource
要素は、プリンシパルが使用する必要がある KMS キーのみを一覧表示します。"Resource": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" ]
KMS キーの指定が実用的でない場合は、
arn:aws:kms:
のような信頼できる AWS アカウント およびリージョン内の KMS キーへのアクセスを制限するregion
:account
:key/*Resource
値を使用します。または、arn:aws:kms:*:
など、信頼できる AWS アカウント のすべてのリージョン (*) で、KMS キーへのアクセスを制限します。account
:key/*キー ID、エイリアス名、エイリアス ARN を使用して、IAM ポリシーの
Resource
フィールド内の KMS キーを表すことはできません。エイリアス ARN を指定する場合、ポリシーは KMS キーではなく、エイリアスに適用されます。エイリアスの IAM ポリシーの詳細については、エイリアスへのアクセスの制御 を参照してください。 - IAM ポリシーの「リソース」:「*」を避ける
-
ワイルドカード文字 (*) を慎重に使用してください。キーポリシーでは、
Resource
要素のワイルドカード文字は、キーポリシーがアタッチされている KMS キーを表します。ただし、IAM ポリシーでは、Resource
要素 ("Resource": "*"
) 内のワイルドカード文字のみが、プリンシパルのアカウントが使用許可を持つすべての AWS アカウント で、すべての KMS キーにアクセス許可を適用します。これには、他の AWS アカウント の KMS キーと、プリンシパルのアカウントの KMS キーが含まれます。例えば、別の AWS アカウント で KMS キーを使用するには、プリンシパルは、外部アカウントの KMS キーのキーポリシーのアクセス許可、および自分のアカウントの IAM ポリシーのアクセス許可が必要です。任意のアカウントが自分の KMS キーに対する AWS アカウントkms:Decrypt アクセス許可を付与したとします。この場合、すべての KMS キー (
"Resource": "*"
) に対するロールkms:Decrypt
のアクセス許可を付与するアカウントの IAM ポリシーは、要件の IAM パートを満たします。その結果、そのロールを引き受けることができるプリンシパルは、信頼されていないアカウントの KMS キーを使用して、暗号テキストを復号できるようになります。オペレーションのエントリは、両方のアカウントの CloudTrail ログに表示されます。特に、次の API オペレーションを許可するポリシーステートメントではを使用しないでください。
"Resource": "*"
これらのオペレーションは、他の AWS アカウント のKMS キーで呼び出すことができます。 - 「リソース」を使用する場合:「*」
-
IAM ポリシーでは、
Resource
要素でワイルドカード文字は、それを必要とするアクセス権限に対してのみ使用します。"Resource": "*"
要素が必要なのは、次の権限のみです。-
kms:CreateCustomKeyStore や kms:ConnectCustomKeyStore などのカスタムキーストアのアクセス許可。などのカスタムキーストアの権限。
注記 エイリアスオペレーションのアクセス許可 (kms:CreateAlias、kms:UpdateAlias、kms:DeleteAlias) は、エイリアスと KMS キーにアタッチする必要があります。IAM ポリシーで
"Resource": "*"
を使用し、エイリアスと KMS キーを表すことも、Resource
エレメントでエイリアスと KMS キーを指定することもできます。例については、「エイリアスへのアクセスの制御」を参照してください。
このトピックの例では、KMS キーの IAM ポリシーを設計するための詳細情報とガイダンスを示します。一般的な AWS KMS のベストプラクティスガイダンスについては、AWS Key Management Service のベストプラクティス (PDF)