【新機能】AWS Key Management Serviceの新API「UpdateAlias API」でキーローテーションが簡単確実に!

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

こんにちは、せーのです。今日はAWSの鍵を管理するのに便利な新APIをご紹介します。

KMSでのキーローテーション

AWSでより強固なセキュリティを保つために「データの暗号化」というのは選択肢として大事な概念になります。AWSにてデータを暗号化する際にはKMSを使用して暗号化キーを使ってデータを暗号化するのがベストプラクティスとなります。KMSの場合はデータを暗号化した鍵(データキー)はすぐに破棄してしまって、データキーを更に暗号化するキー(マスターキー)をAWS内にて保管する、という方法を取ります。鍵を暗号化する鍵、という二重のセキュリティにてデータを大切に保管するわけです。KMSをサラッと理解するにはクラメソのKMSマスター、虎塚の記事が良いと思います。

マスターキーに万が一にも不正にアクセスされるといけないので、定期的にローテーションさせるのが良いでしょう。KMSでは1年毎に自動でマスターキーを更新、ローテーションすることが出来ます。更にマスターキーにはエイリアスが付けられるので、操作するときにはキーが更新されても同じエイリアスで操作ができます。

しかし企業の規定やセキュリティポリシーの関係で「1年のローテーションは長すぎる」という時もあります。例えば3ヶ月ごとに鍵は更新する、というポリシーで運用した場合は手動でマスターキーを更新することになりますが、今までは

  • 1.マスターキーのエイリアスを削除
  • 2.新たにエイリアスを再作成
  • 3.新しいマスターキーにマッピング

という手順を踏むことになり、どうしても削除してから再作成、マッピングするまでに鍵がエイリアスから使えない時間が発生していました。

今回のアップデートで加わった「UpdateAlias API」はそこのタイムラグを解消し、API一発でエイリアスの新しい鍵へのマッピングを安全に行うことが出来るようになりました。

UpdateAlias API概要

ここでUpdateAlias APIのオプションを見ておきましょう。

  • --alias-name : エイリアス名
  • --target-key-id : ローテーション先のマスターキーARN

API自体は非常にシンプルですね。
1点だけ間違いやすい点として、--alias-nameを指定するときには必ず「alias/」というプレフィックスをつけるというルールがあります。つまり例えば[KmsTest]というエイリアス名をつけたら、APIを叩く時はaws kms update-alias --alias-name alias/KmsTestとなります。 基本としてエイリアスはアルファベット、数字、スラッシュ(/)、アンダースコア(_)、ハイフン(-)が使えます。

やってみる

それではやってみましょう。ところでKMSを初めて触る人は「そもそもKMSってどこにあるんだ?」となるかと思います。KMS、実はIAMの中にあるんです。マネージメントコンソールでIAMを開き、メニュー左下の「暗号化キー」をクリックするとKMSの画面に移ります。

kms_updateapi1

ではマスターキーを作ってみます。ちなみにマスターキーは削除が出来ません(無効化はできる)ので、どうせテストだからとエイリアス名にあまり変な名前をつけると後々人に見せられない管理画面になりますので注意してください。

kms_updateapi2

今回はおとなしく「KMSRotationTest」とつけてみます。

kms_updateapi9

次にこの鍵を管理するIAMを決めます。

kms_updateapi4

次はこの鍵を使用するIAMを決めます。使用者と管理者が分かれてるんですね。

kms_updateapi5

最後にポリシーを確認してマスターキーの作成が完了します。同様にローテーション先となるマスターキーも作っておきます。こちらは「KMSRotationTest2」としました。

kms_updateapi12

これで2つマスターキーを作りました。

kms_updateapi13

普段は「KMSRotationTest」を使用しているとして、月日が経ったので「KMSRotationTest2」にローテーションしてみます。まずローテーション先となる「KMSRotationTest2」をクリックしてARNを確認します。

kms_updateapi14

つぎにAWS CLIからコマンドを叩きます。エイリアス名には「alias/」をつけることを忘れないように。あとリージョン間違いは地味に起こりやすいのでリージョンも確認して。

aws kms update-alias  --alias-name alias/KMSRotationTest --target-key-id arn:aws:kms:us-east-1:123456789012:key/2dac8459-6c99-47b2-b24-25843f67314e --region us-east-1

特にレスポンスが帰ってこないので通ったかどうか見てみましょう。マスターキーの一覧を見てみると「KMSRotationTest2」のIDがあった場所に「KMSRotationTest」というエイリアス名がついています。

kms_updateapi15

コマンド上ではlist-aliasesというコマンドで確認できます。

aws kms list-aliases --region us-east-1
False
ALIASES	arn:aws:kms:us-east-1:123456789012:alias/KMSRotationTest	alias/KMSRotationTest	2dac8459-6c99-47b2-b242-25843f67314e
ALIASES	arn:aws:kms:us-east-1:123456789012:alias/KMSRotationTest2	alias/KMSRotationTest2	2dac8459-6c99-47b2-b242-25843f67314e

「KMSRotationTest」と「KMSRotationTest2」の2つに対して同じキーIDがついています。ひとつのマスターキーには複数のエイリアスがつけられるんですね。

まとめ

いかがでしたでしょうか。KMSはなかなかとっつきにくいイメージのあるサービスですが、使い出すととても便利に、安全にデータを保管しておくことが出来るので是非とも触ってみてください。

参考サイト