IAM ポリシーのベストプラクティス - AWS Key Management Service

IAM ポリシーのベストプラクティス

AWS KMS keys へのアクセスを保護することは、すべての AWS リソースのセキュリティにとって不可欠です。KMS キーは、AWS アカウント で最も機密性の高いリソースの多くを保護するために使用されます。KMS キーへのアクセスを制御するキーポリシー、IAM ポリシー、権限VPC エンドポイントポリシーを設計します。

KMS キーへのアクセスを制御する IAM ポリシーステートメントでは、最小権限の原則を使用します。IAM プリンシパルで、使用または管理する必要がある KMS キーのみに対して、必要なアクセス許可のみを付与します。

キーポリシーを使用する

可能であれば、他の AWS アカウント を含む多くの KMS キーに適用できる IAM ポリシーではなく、1 つの KMS キーに影響するキーポリシーでアクセス許可を付与します。これは、 kms:PutKeyPolicykms: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:region:account:key/* のような信頼できる AWS アカウント およびリージョン内の KMS キーへのアクセスを制限する Resource 値を使用します。または、arn:aws:kms:*:account:key/* など、信頼できる AWS アカウント のすべてのリージョン (*) で、KMS キーへのアクセスを制限します。

キー 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:CreateAliaskms:UpdateAliaskms:DeleteAlias) は、エイリアスと KMS キーにアタッチする必要があります。IAM ポリシーで "Resource": "*" を使用し、エイリアスと KMS キーを表すことも、Resource エレメントでエイリアスと KMS キーを指定することもできます。例については、「エイリアスへのアクセスの制御」を参照してください。

 

このトピックの例では、KMS キーの IAM ポリシーを設計するための詳細情報とガイダンスを示します。一般的な AWS KMS のベストプラクティスガイダンスについては、AWS Key Management Service のベストプラクティス (PDF) を参照してください。すべての AWS リソースの IAM ベストプラクティスについては、IAM ユーザーガイドIAM でのセキュリティのベストプラクティスを参照してください。