AWS:セキュアな設定(KMSによるデータ暗号化)

AWS
スポンサーリンク

AWS KMSによるデータ暗号化

AWSのデータ暗号化には、KMSというサービスを使います。

KMSとは、Key Management Service の略です。

EC2のEBS、S3、RDS等、様々なサービスのデータ暗号化で使用するサービスです。

AWSを使う上では、必ず知っておくべきサービスの一つになります。


EC2やS3バケットの暗号化を行うのに、KMSは必須の設定になるので、最初に学ぶべきサービスでありながら、少し難しい内容にも思えます。


KMSを勉強しようとAWS KMSで検索すると色々書いてあるんですが、カスタマーマスターキーやデータキー、データキーペア、キーマテリアル、ラップキーとか色々な言葉が解説無しに急に出てくるので、セキュリティにおける暗号関連の知識が必要になります。



なので、その辺のセキュリティにおける暗号関連のワードについても、紹介しつつ、設定方法について掲載します。



KMSを設定して、データベースやストレージのデータを暗号化して、システムを安全に運用するようにしましょう。

AWS KMS:AWS側でカスタマーマスターキー(CMK)を作成して、運用する場合

AWSコンソールにログインしたら、サービス一覧の『ネットワーキングとコンテンツ配信』の「Key Management Service」を押します。 

■ステップ 1/5 キーを設定

KMSを押したら、以下の画面が出るので、「カスタマー管理型のキー」を押し「キーの作成」を押します。

キーの作成を押すと以下の画面が出ますので、キータイプにて、「対称」もしくは「非対称」を選択します。

今回は、「対称」を選択し、AWS側でデータキーを作成してもらうため、「KMS」を選択します。


(補足説明)

対称とか非対称とか、何やら聞きなれない言葉だなぁってなりませんか?


『対称とは、共通鍵暗号方式』のことで、『非対称とは、公開鍵暗号方式』のことを言っています。


あ~そういえば、そうだったって思い出す方も多いかと思いますが、いきなり、対称と非対称って出ても共通鍵暗号方式、公開鍵暗号方式という言葉で覚えている人からすると、最初は訳が分からないですよね。


非対称では、公開鍵暗号方式を使うので、データの暗号と復号化以外に、証明書の署名と検証にも利用できますっていうのを書いてくれています。
デジタル証明書やSSL/TLS署名書といった技術で、よく耳にしたことがある方も多いんではないでしょうか。非対称を選べば、公開鍵(パブリックキー)と秘密鍵(プライベートキー)のペア運用になるので、データキーペアという言葉が登場します。


共通鍵暗号方式はデータの暗号と復号で同じ鍵を使うので、対称になります。
公開鍵暗号方式はデータの暗号と復号で別々のカギを使うので、非対称になります。

今回は、対称(共通鍵暗号方式)を選択します。



次に詳細オプションですが、「KMS」、「外部」、「カスタムキーストア(CloudHSM)」という選択肢があります。

・KMSを選択すると、『AWS側で作成・管理してくれるデータキーを使ってデータ暗号化をします。』
 

・外部を選択すると、『自身のローカル環境で作成したデータキーを使ってデータ暗号化をすることができます。外部を選択した場合は、AWSにローカルで作成したデータキーをインポートする必要があります。』


・カスタムキーストア(CloudHSM)を選択すると、『AWSの専用ハードウェアセキュリティモジュール (HSM) インスタンスを使用して、データキーを安全の保護して利用することができます。』



『データを暗号化する鍵をデータキー』
と呼び、『データキーを暗号化するものをカスタマーマスターキー』と呼びます。カスタマーマスタキーは、AWS KMSについて調べると良く出てくるワードです。


データキーを暗号化する理由は、暗号化されたデータを抜き取られたときに平文のデータキーも同時に抜き取られると、暗号化されたデータの内容を解読されてしまうためです。

ユーザが暗号した保存しているデータを復号化する(S3からダウンロード等)ために暗号化されたデータキーも一緒にAWSが持つ必要があります。

暗号化されたデータキーはカスタマーマスターキーで平文のデータキーに復号するロジックを持っており、カスタマーマスターキーにアクセスすることはAmazon従業員でもできないようになっています。




カスタマーマスターキーはAWSが管理し、ユーザは一切扱うことはできないようになっています。非常に重要な鍵になるので、堅牢な保護をするべく、HSM上で管理してくれています。HSMは、鍵管理の専用ハードウェアになるので、普通のパソコンで鍵管理するよりもセキュアで堅牢な鍵管理をしてくれる特化したハードウェアです。

出典:AWS Key Management Serviceとは




更にプレーンテキスト(平文)のCMK(カスタマーマスターキー)は、Amazonの従業員でさえ、アクセスできないようになっている旨も記載があります。クラウドを使ってシステム開発をしても安全なのだろうかと、心配する人もいると思いますが、そうゆうところも配慮して、AWSでは安全に運用してるよ!って、記載してくれています。

出典:AWS Key Management Service のよくある質問




少し余談が多くなりました。それでは次の画面の設定についてです。




■ステップ 2/5 ラベルを追加

「対称」、「KMS」を選択し、次へのボタンを押すと以下の画面が出ます。

・エイリアスは、作成する鍵に名前を付けます。

・説明 – オプションは、作成する鍵を、どのような用途で使うのか説明書きをしておくものです。(忘れないためですね。)


タグは、コスト管理画面などで、『使用中のリソースを確認』するときに使う、便利なもので、エイリアスのように名前や値を設定しておくと便利です。


コスト画面で、検証用のリソース(EC2、RDS、KMS、S3)における月々の費用や、商用のリソース(EC2、RDS、KMS、S3)における月々の費用を分けて確認したい場合、検証用タグのリソースのみを確認するといった設定をすると便利です。

■ステップ 3/5 キーの管理アクセス許可を定義

次へを押したら、以下の画面が出ます。

ここでは、鍵の管理者を設定します。鍵設定の削除や変更等を可能にします。


KMS APIを使用して、今回の設定(KMS選択によるデータキーの作成)にて作成した鍵の管理できるIAMユーザやIAMロールを設定できます。API利用のない人は、飛ばしても構いません。


下記のようなマネージメントコンソールアクセスにて、KMSの管理をするためのポリシー(権限)を付与したIAMユーザ等にて、鍵の管理することも可能です。


ちなみにKMS APIは、AWS SDKを使ってアクセスする際のアプリケーションインターフェースになります。つまりプログラミングで作ったアプリケーションでアクセスする際のIAMユーザもしくはIAMロールを設定しておき、権限を持つ人だけが、今回の設定(KMS選択によるデータキーの作成)で作成した鍵の管理ができるようにします。

(今回の画面は初期のものなので、IAMユーザが全く表示されていませんのでご注意を。)

次へを押したら、以下の画面が出ます。

■ステップ 4/5 キーの使用アクセス許可を定義

ここでは、鍵の使用を許可する設定(鍵を利用するユーザー等の設定)を行います。

誰が、何のサービスのデータ暗号化に関してアクセスできるか設定可能ですが、最初は飛ばして構いません。

(今回の画面は初期のものなので、IAMユーザが全く表示されていませんのでご注意を。)

■ステップ 5/5 キーポリシーの確認と編集

次へを押したら、以下の画面が出ます。

JSON形式でキーの利用に関する権限について編集できます。

初期状態だと以下のようになります。

完了ボタンを押せば、EBSやS3のデータ暗号化用のKMS作成が完了です。



EC2やS3のバケットを作成時の暗号化設定にて、作成したKMSを選択できるようになります。

スポンサーリンク

AWS KMS:自身(ローカル環境)で作成したカスタマーマスターキー(CMK)を運用する場合

次は、自身(ローカル環境)で作成したカスタマーマスタキーでKMSを運用する際の設定方法について、紹介します。


ステップ1/5のキーを設定時の「詳細オプション」キーマテリアルオリジンの「外部」の選択のことになります。自身で作成したカスタマーマスタキー(キーマテリアル)をAWSにインポートして運用します。


「外部」を選択する意味は、自社の運用ポリシー等に沿った鍵利用を配慮するために提供されています。AWSに任せるのではなく、自社ポリシーで決まった周期による鍵の更新や使用すべき暗号化アルゴリズム、シード、ソルト等の適用があることを配慮し、自社ポリシーに従ったカスタマーマスタキーの利用ができるように提供されています。

■ステップ 1/5 キーを設定

以下の「カスタマー管理型のキー」画面で、「対称」を選択肢、「外部」を選択します。


「インポートされたキーの使用によるセキュリティ、可用性、および耐久性への影響について理解しています。」のチェックボックスにチェックをつけて、次へを押します。(これは、自身で鍵の定期的な更新が必要になるため、鍵運用に関して十分に理解して運用しましょうと注意を促しています。) 

■ステップ 2/5 ラベルを追加

次に以下の画面がでますが、『AWS側で作成したカスタマーマスタキーを運用する場合』で紹介した内容と同様なので、説明を省略します。

■ステップ 3/5 キーの管理アクセス許可を定義

次に以下の画面がでますが、こちらも『AWS側で作成したカスタマーマスタキーを運用する場合』で紹介した内容と同様なので、説明を省略します。

■ステップ 4/5 キーの使用アクセス許可を定義

次に以下の画面がでますが、こちらも『AWS側で作成したカスタマーマスタキーを運用する場合』で紹介した内容と同様なので、説明を省略します。

ステップ 5/5 キーポリシーの確認と編集

次に以下の画面がでますが、こちらも『AWS側で作成したカスタマーマスタキーを運用する場合』で紹介した内容と同様なので、説明を省略します。

完了ボタン押すと次に自身で作成したデータキーのインポートに向けた設定に移ります。

■ラップキーとインポートトークンのダウンロード

以下の画面が出ます。

ラップアルゴリズム「RSAES_OAEP_SHA_1 」を選択し、「ラップキーとインポートトークンのダウンロード」を押して、ファイルをダウンロードしてください。



ラップキーとは、『パブリックキー(公開鍵)』のことです。
ラップキーで、自身で作成したカスタマーマスタキーをラップ(暗号化)します。

カスタマーマスタキーの作成とラップ(カスタマーマスタキーの暗号化)には、ローカル環境でOpenSSLを使用します。

OpenSSLをインストールした端末で以下のコマンドを実行します。

平文のカスタマーマスタキーを256 ビット対称にて生成します。

$ openssl rand -out PlaintextKeyMaterial.bin 32

次に以下のコマンドを実行します。


– in keyには、ダウンロードしたラップキーのファイル名を指定します。
コンソールからダウンロードした場合は、「wrappingKey_CMK_key_ID_timestamp」の命名規則のファイルがダウンロードされているはずです。


– outには、出力されるファイル名を指定します。
平文のカスタマーマスタキー「PlaintextKeyMaterial.bin」をダウンロードしたラップキーにて暗号化したカスタマーマスタキー「EncryptedKeyMaterial.bin」にします。

$ openssl rsautl -encrypt \
                 -in PlaintextKeyMaterial.bin \
                 -oaep \
                 -inkey PublicKey.bin \
                 -keyform DER \
                 -pubin \
                 -out EncryptedKeyMaterial.bin

ラップキーとインポートトークンをダウンロードし、OpenSSLでカスタマーマスタキーを暗号化したら、先ほどの画面で次へを押すと以下の画面がでます。



この画面にて、暗号化したカスタマーマスタキーと、先ほどダウンロードしたインポートトークンをアップロードすれば完了です。


ダウンロードしたラップキーとインポートトークンには24時間内という有効期限が設定されています。24時間の有効期限付きのダウンロードしたインポートトークンに一致する暗号化されたデータキーであることの検証が取れたものが有効になる仕組みです。(ダウンロードしたインポートトークンの期限が切れた場合は、再度ダウンロードする必要があります。)



有効期限オプションは、カスタマーマスタキーを定期的に更新するために、カスタマーマスタキーの利用において有効期限を設定するものです。

まとめ

・AWS KMSは、データを暗号化する鍵の一元管理サービス
・KMSではAWS側で作成したデータキーの利用が可能
・KMSでは自社ポリシーに基づく自身(ローカル環境)で作成したデータキ―をAWSにインポートすることで利用が可能
・KMSで作成されるCMK(カスタマーマスターキー)は、HSMで堅牢な保護されている
・CMK(カスタマーマスターキー)はAmazon従業員でもアクセス不可



以下のページでEC2のEBSの暗号化を紹介しています

以下のページでS3のバケットの暗号化を紹介しています

参考:AWS KMSの仕組みを理解する

AWS KMSの仕組みを理解するのに色々なURLにアクセスする必要がありますので、参考に掲載します。以下の用語に関する理解を前提に読んでみてください。

・カスタマーマスターキー:データキーを暗号化する鍵
・データーキー:データを暗号化する鍵
・対称『共通鍵暗号方式』、非対称『公開鍵暗号方式』
・キーマテリアル:データキー、証明書 等
・ラップキー:データキーを暗号化する公開鍵(パブリックキー)
・インポートトークン:インポートするデータキーが正しいものと証明するのに利用

AWS Key Management Service とは
 『KMSについて記載』
AWS Key Management Service の概念
 『KMS利用におけるカスタマーマスターキーやデータキーに関して記載』
AWS KMS概要
 『KSMのセキュリティに関して記載(CMKのHSM管理等が書いてます)』
AWS環境におけるデータ保護の実装
 『KMSの全体的な概要(③をより端的にまとめられていると思います)』
キーマテリアルのインポート ステップ 2: パブリックキーおよびインポートトークンのダウンロード
 『データキーのインポート、OpenSSLについて記載』

こちらも参考になると思います。
AWS Key ManagementService のベストプラクティス
AWS Key Management Service暗号化の詳細

オススメ参考書籍

AWSを初めて学ぶ人、操作する人は以下の書籍が、とっかかり(最初の第一歩)としてお勧めです。

オススメポイント!

① コンソール操作画面付きで、基礎知識と合わせて、丁寧に設定方法を解説

② AWSシステムを構築する上で基礎となる概念「VPC」、「AZ」、「パブリック/プライベートサブネット」、「ネットワークACL」、「セキュリティグループ」等の解説もある

③ パターン別の設計として、Wordpress(Webサーバ)、MySQL(DBサーバ)を使ったシステム構築等も解説している

初心者には非常に役に立つ解説本となっていますので、一番お勧めします。



以下の書籍もAWSシステムの基礎概念や様々なサービスを紹介しています。
資格取得に向けた問題も掲載されています。
AWSのことはあまり知らない & 資格も取りたいって人向けです

コメント

タイトルとURLをコピーしました