【KMS】デフォルトのキーポリシーについて調べてみた

【KMS】デフォルトのキーポリシーについて調べてみた

Clock Icon2022.01.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは! AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

今回は、KMSのデフォルトのキーポリシーについてブログを書いてみたいと思います。

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

いきなりまとめ

  • 最終奥義「ルートユーザー」で修復するために必要
  • ユーザーポリシー(IAMポリシー)で制御するために必要

AWSリソースのアクセス制御方法とは

まずはじめに、AWSリソースにアクセスする方法は大きく分けて2つあります。

  • ユーザーポリシーで管理する方法
  • リソースベースポリシーで管理する方法

ユーザーポリシーで管理する方法とは

IAMユーザー、ユーザーグループ、ロールにIAMポリシーを設定しアクセスを管理する方法です。

リソースベースポリシーで管理する方法とは

S3バケットポリシーや、KMSのキーポリシーなどリソースポリシーを定義してアクセスを管理する方法です。

リソースベースのポリシーをサポートする AWS サービス

アクセス制御実装パターン

アクセス制御の実装パターンとしてはさきほどの2つの方法を使用して3つのパターンが挙げられると思います。

  • ユーザーポリシーのみ使用するパターン
  • リソースベースポリシーのみ使用するパターン
  • どっちも使用するパターン

S3バケットポリシーの場合

3つのパターンすべてを使用可能です。

KMSの場合

KMSキーポリシーでは、キーポリシーに1つ以上の設定値が必要です。

つまり、ユーザーポリシーのみでの管理はできない仕様となっています。

使用可能な実装パターン

  • リソースベースポリシーのみ使用するパターン
  • どっちも使用するパターン

キーポリシーは、AWS KMS の KMS キーへのアクセスを制御するための主要な方法です。すべての KMS キーには、厳密に 1 つのキーポリシーが必要です。

AWS KMS でのキーポリシーの使用

デフォルトのキーポリシーとは?

以下のポリシーです。

カスタマー管理キーを作成する際に、デフォルトでついているキーポリシーです。

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
      "AWS": "arn:aws:iam::111122223333:root"
  },
  "Action": "kms:*",
  "Resource": "*"
}

デフォルトキーポリシーの役割とは

最終奥義「ルートユーザー」で使用できるよう許可する

ルートユーザーは、特別なユーザーです。

AWSアカウント内のすべての操作を行えるユーザーとなります。

そこで、AWSアカウントが削除されない限り存在するルートユーザーにキーポリシー復旧の最終手段として権限を付与する意味が込められています。

  "Principal": {
      "AWS": "arn:aws:iam::111122223333:root"
  }

ユーザーポリシー(IAMポリシー)で制御するために必要

KMSのキーポリシーでは、ユーザーポリシーのみでの管理はできない仕様と記載しました。

しかし、キーポリシー(リソースベースポリシー)の許可範囲を大きく広げてユーザーポリシーで制御する方法に寄せることはできます。

そのためにもデフォルトキーポリシーは使用されています。

以下の"AWS": "arn:aws:iam::111122223333:root"はルートユーザーのみではなく、AWSアカウント(111122223333)全体のリソースからのユーザーポリシー制御を許可する意味も含まれています。

あくまで、ユーザーポリシーの使用を許可しているだけで、IAMリソースがユーザーポリシーで許可されていない場合は、アクセスできません。

  "Principal": {
      "AWS": "arn:aws:iam::111122223333:root"
  }

もっと知りたい人向け

S3バケットポリシーでデフォルトポリシーが必要ではない理由 (仮説ベース)

さきほどKMSについては、デフォルトで以下のポリシー表記がないとユーザーポリシーに寄せれないと述べました。

  "Principal": {
      "AWS": "arn:aws:iam::111122223333:root"
  }

しかし、S3作成時にバケットポリシーを設定しなくてもユーザーポリシーに寄せることができます。

理由は、リソースベースポリシーが暗黙的に許可されているからだと思われます。

ルートユーザーは、キーポリシーにより明示的に許可されている場合にのみ KMS キーにアクセスできるため、KMS キーにアクセスできません。これは、ルートユーザーへのアクセスを暗黙的に許可する AWS の他のほとんどのリソースとは異なります。

AWS KMS でのキーポリシーの使用

つまり、 "AWS": "arn:aws:iam::111122223333:root" のポリシーが暗黙的に定義されているのではないかと思います。

「AWSの他のほとんどのリソース」リストが見つかればよかったのですが今のところ見つけられていないので仮説ベースで書かせていただきました。

まとめ

KMSのデフォルトキーポリシーについて調べてみたらとても奥が深くとても面白かったです。

この記事が参考になれば幸いです。

以上、AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.