暗号化鍵を使用した Apache Kafka on Heroku の暗号化
最終更新日 2025年04月22日(火)
この記事では、Private および Shield Space 内の Apache Kafka on Heroku を暗号化するために AWS Key Management Service (KMS) を使用して顧客管理キー (CMK) を作成する方法について説明します。このプロセスは、大きく分けて 3 つの手順で構成されます。
- AWS KMS で顧客管理キー (CMK) を作成する
- その CMK に Identity and Access Management (IAM) ポリシーを適用して、Heroku Data がユーザーの代わりにそのキーを使用できるようにする
- 暗号化鍵を使用して Kafka クラスターを作成する
AWS の前提条件
このセクションの手順は Amazon KMS ダッシュボードから実行します。または、AWS CLI を使用することもできます。
手順 1: 顧客管理キーを作成する
AWS Web コンソールにログインしたら、Key Management Service
に移動し、Create Key
(キーの作成) をクリックします。
手順 2: 対称キーを選択する
キーのタイプに Symmetric
(対称)、キーの使用法に Encrypt and decrypt
(暗号化と暗号化解除) を選択して、Next
(次へ) をクリックします。
バックアップを保存するために S3 を使用しますが、これは対称 CMK のみをサポートしています。
手順 3: 詳細を追加し、アクセス許可を設定する
heroku-data
などのエイリアスを追加し、Next
(次へ) をクリックします。キーのシステム管理者権限の設定はスキップできます。
キーの使用権限を定義するときは、Heroku Data の AWS アカウント ID 021876802972
をOther AWS accounts
(その他の AWS アカウント) セクションに入力し、Next
(次へ) をクリックします。
手順 4: 確認して完了する
キーポリシーを確認し、作成を完了します。CMK の Amazon Resource Name (ARN) をメモしておきます。
手順 5: 自動キーローテーションを有効にする
キーの情報ページに移動して、自動キーローテーションを有効にできます。Automatic key rotation
(自動キーローテーション) セクションで Enable
(有効化) を選択し、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 プランが必要です。
addons:create
の例は Heroku CLI v9.0.0 以降の構文に従っています。v8.11.5 以前を使用している場合は、次のコマンドを使用してください。
$ heroku addons:create heroku-kafka:private-extended-0 --encryption-key CMK_ARN --app your-app-name
$ heroku addons:create heroku-kafka:private-extended-0 --app your-app-name -- --encryption-key CMK_ARN
暗号化鍵の無効化
暗号化鍵のライフサイクルの一部として、この鍵を無効にすることが必要になる場合があります。このアクションを実行しているときは、その鍵で暗号化されたすべてのデータがアクセス不可能になります。
暗号化鍵を無効にすると、その鍵を使用しているすべてのサービスとサーバーのシャットダウンがトリガーされます。このアクションを実行する場合は、細心の注意を払ってください。このアクションを実行するときは、サポートに通知して調整することをお勧めします。
暗号化鍵は、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 サポートに連絡してください。