暗号化鍵を使用した Apache Kafka on Heroku の暗号化
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年05月03日(水)
この記事では、Private および Shield Space 内の Apache Kafka on Heroku を暗号化するために AWS Key Management Service (KMS) を使用してカスタマーマスターキー (CMK) を作成する方法について説明します。このプロセスは、大きく分けて 3 つの手順で構成されます。
- AWS KMS でカスタマーマスターキー (CMK) を作成する
- その CMK に IAM ポリシーを適用して、Heroku Data がユーザーの代わりにそのキーを使用できるようにする
- 暗号化鍵を使用して Kafka クラスターを作成する
AWS の前提条件
このセクションの手順は Amazon KMS ダッシュボードから実行します。あるいは、以下に示すように、AWS CLI を使用することもできます。
手順 1: カスタマーマスターキーを作成する
AWS Web コンソールにログインしたら、Key Management Service に移動し、「Create Key」 (キーの作成) をクリックします。
手順 2: 対称キーを選択する
対称キーを選択し、「Next」 (次へ) をクリックします。
バックアップを保存するために S3 を使用しますが、これは対称 CMK のみをサポートしています。
手順 3: 詳細を追加し、アクセス許可を設定する
エイリアス (heroku-data
など) を追加し、「Next」 (次へ) を押します。キーの管理アクセス許可をさらに設定する必要はありません。「Next」 (次へ) をクリックします。
キーの使用のアクセス許可を定義する場合は、一番下にスクロールして、別の AWS アカウントを追加します。ボックスに Heroku Data の AWS アカウント ID (021876802972
) を入力し、「Next」 (次へ) を押します。
手順 4: 確認して完了する
キーポリシーを確認し、作成を完了します。CMK の Amazon Resource Name (ARN) をメモしておきます。
手順 5: 自動キーローテーションを有効にする
キーの情報ページを開くことによって、自動キーローテーションを有効にすることができます。ページの一番下で、「Key Rotation」 (キーのローテーション) タブを選択し、ボックスをチェックして 「Save」 (保存) を押します。
AWS は人手を介さず毎年自動的にキーのローテーションを処理します。AWS KMS 内に生成される対称キーのこのローテーションでは、データの再暗号化は必要ありません。AWS KMS は、古いバージョンのキーで暗号化されたデータの暗号化解除に使用される以前のバージョンのキーを管理します。すべての新しい暗号化リクエストでは、新しいバージョンのキーが使用されます。キーのローテーション時に、Apache Kafka on Heroku クラスターでダウンタイムが発生することはありません。
代替手段: AWS CLI を使用する
AWS CLI を使用して、適切なキーポリシーが設定されたカスタマーマスターキー (CMK) を作成できます。
$ export AWS_ACCOUNT_ID=`aws sts get-caller-identity --output text --query 'Account'`
$ export HEROKU_DATA_ACCOUNT_ID=021876802972
$ curl -s -o key-policy.json https://gist.githubusercontent.com/jdowning/8d146cd238de828141e81b458dc546f0/raw/fc2a69603dc1364f1bc2fd2b5beb0af210150444/key-policy.json
$ aws kms create-key --description 'heroku-data-test' --policy $(envsubst < key-policy.json)
create-key
コマンドの出力には、プロビジョニング中に必要なキーの ARN が含まれています。これは、後の手順で CMK_ARN
として参照されます。
CMK に対して自動キーローテーションを有効にすることをお勧めします。
$ aws enable-key-rotation --key-id CMK_ARN
暗号化鍵を使用して Apache Kafka on Heroku クラスターを作成する
これで、適切なアクセス許可が設定されたカスタマーマスターキーが用意できたので、そのキーを使用して、Heroku Data によって管理されるデータを暗号化できます。CMK の完全な Amazon Resource Name (ARN) が必要です。データベースを作成する場合は --encryption-key
プロビジョニングフラグを使用できます。
暗号化鍵を使用して Apache Kafka on Heroku を暗号化するには、Private または Shield Spaces プランが必要です。
$ heroku addons:create heroku-kafka:private-extended-0 --encryption-key CMK_ARN --app your-app-name
暗号化鍵の無効化
暗号化鍵のライフサイクルの一部として、この鍵を無効にすることが必要になる場合があります。このアクションを実行しているときは、その鍵で暗号化されたすべてのデータがアクセス不可能になります。
暗号化鍵を無効にすると、その鍵を使用しているすべてのサービスとサーバーのシャットダウンがトリガーされます。このアクションを実行する場合は、細心の注意を払ってください。このアクションを実行するときは、サポートに通知して調整することをお勧めします。
暗号化鍵は、AWS Web コンソールまたは AWS CLI を使用して無効にすることができます。
$ aws kms disable-key --key-id CMK_ARN
当社で鍵の無効化の通知を受信した後、アクションが実行されるまでに 10 分の待機期間が発生します。この待機期間は、鍵の状態の誤った変更によって、その鍵に依存しているリソースが不必要に変更されることがないようにするのに役立ちます。
10 分の待機期間が経過したら、その暗号化鍵を使用しているすべてのサービスをシャットダウンします。次に、それらのサービスを実行しているすべてのサーバーを停止します。最後に、無効にしたアクションを通知するメール通知をアプリケーション管理者に送信します。鍵の無効化からサービスのシャットダウンまでに約 20 分かかることを見込んでおいてください。
暗号化鍵の有効化
暗号化鍵を使用して暗号化されたデータへのアクセスを回復する必要がある場合は、その鍵を有効にして復元することができます。暗号化鍵は、AWS Web コンソールまたは AWS CLI を使用して有効にすることができます。
$ aws kms enable-key --key-id CMK_ARN
当社で鍵の有効化の通知を受信したら、以前に停止されたサーバーを起動します。サーバーが動作を開始したら、影響を受けるサービスを起動します。最後に、有効にしたアクションを通知するメール通知をアプリケーション管理者に送信します。鍵の有効化からサービスの再起動までに約 5 分かかることを見込んでおいてください。
制限
顧客の暗号化鍵を使用して暗号化されたデータベースに適用される制限があります。
- この機能は、Private または Shield プランの Apache Kafka on Heroku アドオンでのみ使用できます。
セキュリティのために、顧客が指定する鍵の使用から Heroku で管理される鍵のライフサイクルに自動的に移行する方法は存在しません。1 つ以上のデータサービスでこの機能の使用を停止したい場合は、Heroku サポートに連絡してください。