【AWS KMS】デフォルトビューに切り替えるボタンが表示されなくなった【原因と直し方を解説】

デフォルトビュー切り替えボタンが表示されない

こんにちは、Daniel (@daniel__blog) です。

先日、下記の問題に遭遇しました。

カスタマー管理キー(CMK)を作成して編集していたら、デフォルトビューに戻せなくなり、ポリシービューからしか編集ができなくなった。

KMSのカスタマー管理キー(CMK)は、デフォルトビューとポリシービューの2種類があります。

それぞれからキーポリシー内容の変更ができます。このうちデフォルトビューからは、主にキー管理者とキーユーザーを簡単に変更できるので大変便利です。

デフォルトビューに切り替えられなくなった場合、ポリシービューからのみ変更することとなり、キーポリシーの JSON の内容を直接編集する必要が生じます。

これだととても不便です。

なぜ戻せなくなったのか、そしてどうすれば戻せるようになるのかについて調べました。

以下、この問題についてお話しします。

この記事が参考になる方
  1. AWS KMSでカスタマーマスターキー(CMK)を作成している
  2. キー使用者、キーユーザー設定を簡単にしたい
  3. デフォルトポリシービューに再度戻したい

問題:デフォルトビューに戻せない

デフォルトビューはキー利用ユーザー設定で便利

KMSのカスタマー管理キー(CMK)では、キー管理者とキーユーザーを個別にカスタマイズすることができます。この点がデフォルトKMSとは異なり、より権限を絞る事ができるCMKのメリットの1つですよね。

この2つの設定項目は、デフォルトビューでそれぞれの「追加」、「削除」ボタンから簡単に変更できるため便利です。

通常、ビューは簡単に切り替えられる

これらの設定の実体は JSON の記述内容となっています。それを見るには、「ポリシービューへの切り替え」ボタンをクリックするだけで簡単に切り替えられます。

通常、ポリシービューに切り替えた後でも、「デフォルトビューへの切り替え」ボタンで簡単に元の画面に戻せます。

突如として消えたビュー切り替えボタン

しかし、あるCMKを編集しているとき、いつの間にか「デフォルトビューへの切り替え」ボタンが消えていました。

いったいなぜ…

原因:ポリシービューに追記された内容があるため

原因はシンプルでした

最初この問題に出会った時、「どうしてだろう」と頭を悩ませました。しかし、原因はシンプルでした。

それは、自分がポリシービューでJSONの内容を直接編集し、ユーザー設定以外の部分を追記、削除していたからのようです。

ビュー切り替えボタンを再度出す

原因がシンプルだったので、元に戻すのも簡単でした。

追記されている部分がなくなればデフォルトビューに再度戻せるようになります。つまり、ポリシーをデフォルト状態に戻せば、再度「デフォルトビューへの切り替え」ボタンは出現します。

(補足)別のサービスで新規KMSを作成する場合

CloudTrailなどの一部サービスでは、S3へログをエクスポートさせることができます。このログエクスポートでも、KMS(CMK)を使って暗号化させることが可能です。

このとき、各サービス側の設定の中で新しくKMSを作成することができます。サービス側で新規KMSを作成する場合、そのサービスで必要なポリシー内容が自動的にキーポリシーに書き込まれます。これは便利。

しかし、前述の通り、ここで作成されるKMSもまた、ポリシー内容が変更されたものであるため、デフォルトビューに切り替えることができないものとなります。

2つの対応方法

内容を維持したままデフォルトビューには戻せない?

しかし、元に戻す方法がわかっても、追記していたポリシーはどうなるの…?となります。

調べた限り、追記したポリシーの内容を維持しつつ、デフォルトビューに戻す方法は見つけられませんでした。AWSの仕様のようです…

確かに、ポリシービューからでもキー管理者とキーユーザーを変更はできます。しかし、JSONの内容を直接いじる必要があるし、誤入力のリスクや設定ミスなど起こる可能性もあるし、何よりちょっと不便ですね…

考えられる対応方法としては、以下の2つがあります。

  1. 追記されている内容を一旦除外し、ユーザー設定を変更する
  2. ポリシービューから直接編集する

方法1.追記されている内容を一旦除外する

前述の通り、ポリシービューからJSONの内容を直接いじったりする場合は、誤入力リスクや設定ミスなど考えられます。

上記を気にされる場合は、追記した内容を一旦別の場所にコピペ ➔ ユーザー設定を変更 ➔ 再度ペーストし直すのもありかなと思います。

方法2.ポリシービューから直接編集する

ポリシービューから戻せないならば、ポリシービュー上からキー管理者とキーユーザーを変更してしまおうという方法です。

こちらの方が現実的かと思いますので、以下に詳しくやり方を記載します。

キー管理者を変更する場合

キー管理者を変更する場合、以下SidのPrincipalの内容を変更する必要があります。
※ユーザー名「test001」のように記載します。

変更する項目
“Sid”: “Allow access for Key Administrators”
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AWSアカウントIDを入力>:user/test001"
            },
            "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"
            ],
            "Resource": "*"
        }

キーユーザーを変更する場合

キーユーザーを変更する場合、以下SidのPrincipalの内容を変更する必要があります。
※ユーザー名「test001」のように、2箇所に記載します。

変更する項目
“Sid”: “Allow use of the key”
“Sid”: “Allow attachment of persistent resources”
{
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AWSアカウントIDを入力>:user/test001"
            },
            "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::<AWSアカウントIDを入力>:user/test001"
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }

ユーザー指定時の注意

ユーザーを1つ指定する場合と、複数指定する場合では、若干書き方が変わるので注意が必要です。これは注意というよりも、JSON記入時のお作法ですね。

◆ユーザー、ロールを1つだけ指定する場合

        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AWSアカウントIDを入力>:user/test001"
            },

◆ユーザー、ロールを複数指定する場合

        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::<AWSアカウントIDを入力>:user/test001",
                    "arn:aws:iam::<AWSアカウントIDを入力>:user/test002"
                ]
            },

【確認】実際に切り替えボタンを消す➔再表示するのかどうか見てみる

ここでは一例として、GuardDuty用を想定したKMSを使いながら、実際にデフォルトビューに戻れなくなるのかを確認してみます。

GuardDuty用KMSについて

GuardDutyはS3へのログエクスポート設定ができますが、ここでKMS(CMK)を使った暗号化を設定することができます。

暗号化に使用するKMS(CMK)キーは事前に作成しておく必要があります(GuardDuty側の設定画面で新規作成できないため)。また、対象KMS(CMK)キーのキーポリシーには以下の内容を追加しておく必要があります。内容としては、GuardDutyサービスに権現を与えるためのようです。

{
    "Sid": "Allow GuardDuty to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "guardduty.amazonaws.com"
            },
            "Action": "kms:GenerateDataKey",
            "Resource": "*"
}

1.GuardDuty用のKMS(CMK)を作成

ということで、実際に準備していきます。事前にKMS(CMK)を作成しておく必要があるので、まずはKMSサービスを開きます。(⬇)

「キーの作成」をクリックして、「次へ」をクリックします。(⬇)

「エイリアス」と「タグ」に任意の値をそれぞれ入力します。(⬇)

「キーの管理アクセス許可を定義」は空白で大丈夫なので、「次へ」をクリックします。(⬇)

「キーの使用アクセス許可を定義」も空白で大丈夫です。「次へ」をクリックします。(⬇)

ポリシー内容も変更せず、「完了」をクリックします。(⬇)

作成できました。(⬇)

2.この時点ではデフォルトビューに戻れる

画像の通り、最初はデフォルトビューが表示されるし、ポリシービューへの切り替えも、その後デフォルトビューへ戻すことも問題なくできます。

3.ポリシービューからポリシー内容を追記してみる

前述のGuardDutyでKMSを使用する場合に追加しないといけないステートメントを追加してみます。

ポリシービューから編集します。以下のポリシーに…(⬇)

こんな感じで追記しました。「変更の保存」を押します。(⬇)

4.確かに、ビュー切り替えボタンがなくなる

すると、キーポリシー画面から「デフォルトビューへの切り替え」ボタンがなくなりました。

5.追記した内容だけ消すと再び現れる

追記した内容だけ除外することで、問題なく再度ボタンを表示できました。

以下の画像の選択した部分を削除し、「変更の保存」を押すと…(⬇)

「ポリシービューへの切り替え」ボタンが再表示されました。(⬇)

今回は以上です!
最後までお読み頂きありがとうございました。