IT

暗号化キーを扱う2つのサービス(AWS認定セキュリティ – 専門知識勉強その4)

今回はデータ保護の領域から暗号化キーを扱う2つのサービスについてまとめてみます。直接使ったことはないサービスなので基本事項を押さえるのが目的です。

AWS Key Management Service (KMS)

暗号化キーの作成と管理を行うサービス。暗号化のある他のサービスでも使われ、試験でも頻出する模様。

エンベロープ暗号化(Envelope Encryption)と呼ばれる仕組みで、データを暗号化するCustomer Data Key(CDK)に加えてCDKを暗号化するCustomer Master Key(CMK)の2つのキーを使用する(両方とも復号も行う)。APIも含めた使い方の概要は以下の通り。

ローテーションを有効化すると1年ごとにCMKが自動でローテーションされるが、以前のCMKも保持しているので古いデータも復号できる。1年という期間が許容できない場合は手動ローテーションもできるが、実際には単に新規CMKを作成するだけである。この時、エイリアスを作成しておくと呼び出し側の処理を変えずに済む。

AWSが作成したCMKではなく、例えばオンプレと同じキー(と暗号化アルゴリズム)を使用したい場合などにはインポートすることができる(BYOK: Bring Your Own Key)。ただし、ローテーションができない(有効期限の設定は可能)、障害時に自動復旧されないなどの制約がある。

アクセス制御に関しては、IAMポリシーで使用側に対して行うことの他に、CMK側にどのようなアクセスが可能かをキーポリシーとして設定できる。デフォルトでは以下が設定され、CMKを生成したアカウントの全ユーザーやロールにKMSの全アクセスを許可している。キーポリシーを利用してキー管理者とキー利用者を設定したりMFAを強制させたりもできる。さらにCreateGrantを使用して一時的な許可(Grant)を与えることも可能。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "【任意の識別子】",
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::【アカウントID】:root"},  // 全ユーザーとロールを意味する
    "Action": "kms:*",
    "Resource": "*",  // アタッチするKMSを表すため常に"*"
  }]
}

CMKには3種類あり、これまでの話はカスタマー管理CMKのものである。この他に、他のAWSサービスで作成・使用されるAWS管理CMK(コンソール上では「aws/【サービス名】」と表示される)と、アカウントに関係なくAWSが裏で使用しているAWS所有CMKがある。

AWS CloudHSM

こちらもKMSと同様に暗号化キーの作成と管理を行うサービスだが、公式に「法令順守のためのハードウェアセキュリティモジュール(Hardware Security Module)」とある通りKMSよりも高いコンプライアンスに対応するためのサービスで、以下のような特徴がある。

  • キーの保管に専用のハードウェアが使用される
  • VPC内で実行され、AWSはアクセスできない
  • 対称キー(共通鍵暗号方式)と非対称キー(公開鍵暗号方式)の両方に対応している
    • KMSでも2019年11月から非対称キーに対応しているが、試験には反映されていない可能性あり。
  • 耐障害性などはユーザーが管理する
  • KMSと統合してCloudHSMクラスターをカスタムキーストアとして使用可能