こんにちは、Daniel (@daniel__blog) です。
先日、下記の問題に遭遇しました。
カスタマー管理キー(CMK)を作成して編集していたら、デフォルトビューに戻せなくなり、ポリシービューからしか編集ができなくなった。
KMSのカスタマー管理キー(CMK)は、デフォルトビューとポリシービューの2種類があります。
それぞれからキーポリシー内容の変更ができます。このうちデフォルトビューからは、主にキー管理者とキーユーザーを簡単に変更できるので大変便利です。
デフォルトビューに切り替えられなくなった場合、ポリシービューからのみ変更することとなり、キーポリシーの JSON の内容を直接編集する必要が生じます。
これだととても不便です。
なぜ戻せなくなったのか、そしてどうすれば戻せるようになるのかについて調べました。
以下、この問題についてお話しします。
- AWS KMSでカスタマーマスターキー(CMK)を作成している
- キー使用者、キーユーザー設定を簡単にしたい
- デフォルトポリシービューに再度戻したい
問題:デフォルトビューに戻せない
デフォルトビューはキー利用ユーザー設定で便利
KMSのカスタマー管理キー(CMK)では、キー管理者とキーユーザーを個別にカスタマイズすることができます。この点がデフォルトKMSとは異なり、より権限を絞る事ができるCMKのメリットの1つですよね。
この2つの設定項目は、デフォルトビューでそれぞれの「追加」、「削除」ボタンから簡単に変更できるため便利です。
通常、ビューは簡単に切り替えられる
これらの設定の実体は JSON の記述内容となっています。それを見るには、「ポリシービューへの切り替え」ボタンをクリックするだけで簡単に切り替えられます。
通常、ポリシービューに切り替えた後でも、「デフォルトビューへの切り替え」ボタンで簡単に元の画面に戻せます。
突如として消えたビュー切り替えボタン
しかし、あるCMKを編集しているとき、いつの間にか「デフォルトビューへの切り替え」ボタンが消えていました。
いったいなぜ…
原因:ポリシービューに追記された内容があるため
原因はシンプルでした
最初この問題に出会った時、「どうしてだろう」と頭を悩ませました。しかし、原因はシンプルでした。
それは、自分がポリシービューでJSONの内容を直接編集し、ユーザー設定以外の部分を追記、削除していたからのようです。
ビュー切り替えボタンを再度出す
原因がシンプルだったので、元に戻すのも簡単でした。
追記されている部分がなくなればデフォルトビューに再度戻せるようになります。つまり、ポリシーをデフォルト状態に戻せば、再度「デフォルトビューへの切り替え」ボタンは出現します。
(補足)別のサービスで新規KMSを作成する場合
CloudTrailなどの一部サービスでは、S3へログをエクスポートさせることができます。このログエクスポートでも、KMS(CMK)を使って暗号化させることが可能です。
このとき、各サービス側の設定の中で新しくKMSを作成することができます。サービス側で新規KMSを作成する場合、そのサービスで必要なポリシー内容が自動的にキーポリシーに書き込まれます。これは便利。
しかし、前述の通り、ここで作成されるKMSもまた、ポリシー内容が変更されたものであるため、デフォルトビューに切り替えることができないものとなります。
2つの対応方法
内容を維持したままデフォルトビューには戻せない?
しかし、元に戻す方法がわかっても、追記していたポリシーはどうなるの…?となります。
調べた限り、追記したポリシーの内容を維持しつつ、デフォルトビューに戻す方法は見つけられませんでした。AWSの仕様のようです…
確かに、ポリシービューからでもキー管理者とキーユーザーを変更はできます。しかし、JSONの内容を直接いじる必要があるし、誤入力のリスクや設定ミスなど起こる可能性もあるし、何よりちょっと不便ですね…
考えられる対応方法としては、以下の2つがあります。
- 追記されている内容を一旦除外し、ユーザー設定を変更する
- ポリシービューから直接編集する
方法1.追記されている内容を一旦除外する
前述の通り、ポリシービューからJSONの内容を直接いじったりする場合は、誤入力リスクや設定ミスなど考えられます。
上記を気にされる場合は、追記した内容を一旦別の場所にコピペ ➔ ユーザー設定を変更 ➔ 再度ペーストし直すのもありかなと思います。
方法2.ポリシービューから直接編集する
ポリシービューから戻せないならば、ポリシービュー上からキー管理者とキーユーザーを変更してしまおうという方法です。
こちらの方が現実的かと思いますので、以下に詳しくやり方を記載します。
キー管理者を変更する場合
キー管理者を変更する場合、以下SidのPrincipalの内容を変更する必要があります。
※ユーザー名「test001」のように記載します。
{
"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 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は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.追記した内容だけ消すと再び現れる
追記した内容だけ除外することで、問題なく再度ボタンを表示できました。
以下の画像の選択した部分を削除し、「変更の保存」を押すと…(⬇)
「ポリシービューへの切り替え」ボタンが再表示されました。(⬇)
今回は以上です!
最後までお読み頂きありがとうございました。