プロファイル適用性: レベル2
Kubernetesのシークレットを、Cloud KMSの顧客管理キーを使用してアプリケーション層で暗号化し、etcdに保存します。
デフォルトで、GKEは保存されている顧客コンテンツを暗号化します。これにはSecretsが含まれます。GKEはこのデフォルトの暗号化を追加の操作なしで処理および管理します。
アプリケーション層のシークレット暗号化は、ユーザ定義のシークレットや、サービスアカウントキーなどのクラスタの運用に必要なシークレットといった機密データに対して、etcdに保存される追加のセキュリティ層を提供します。
この機能を使用すると、Cloud KMSで管理するキーを使用して、アプリケーション層でデータを暗号化できます。これにより、攻撃者がetcdにアクセスすることができた場合でも、データを保護できます。
![]() |
注意デフォルトでは、アプリケーション層の秘密暗号化は無効になっています。
|
影響
クラスタ内のetcdを保護するためにCloud KMS CryptoKeyを使用するには、Kubernetes Engine Service AgentサービスアカウントがCloud
KMS CryptoKey Encrypter/Decrypterロールを保持している必要があります。
監査
Google Cloud Consoleを使用する:
- Kubernetes Engine のウェブサイトに移動します。
- クラスタのリストから各クラスタをクリックして詳細ペインを表示し、アプリケーション層の秘密暗号化が有効に設定されていることを確認してください。
コマンドラインの使用:
gcloud container clusters describe $CLUSTER_NAME --zone $COMPUTE_ZONE -- format json | jq '.databaseEncryption'
正しく構成されている場合、コマンドの出力は次の詳細を含む対応を返します。
keyName=projects/<key_project_id>/locations/<location>/keyRings/<ring_name>/ cryptoKeys/<key_name>] state=ENCRYPTED { "currentState": "CURRENT_STATE_ENCRYPTED", "keyName": "projects/<key_project_id>/locations/us- central1/keyRings/<ring_name>/cryptoKeys/<key_name>", "state": "ENCRYPTED" }
修復
アプリケーション層の秘密暗号化を有効にするには、いくつかの設定項目が必要です。これには以下が含まれます:
- キーリング
- キー
- Cloud KMS CryptoKey Encrypter/Decrypterロールを持つGKEサービスアカウント
これらが作成されると、既存または新しいクラスターでアプリケーション層の秘密の暗号化を有効にすることができます。
Google Cloud Consoleを使用する:
キーを作成するには:
- Cloud KMS のウェブサイトに移動します。
CREATE KEY RING
を選択します。- キーリング名とキーが保存されるリージョンを入力してください。
CREATE
をクリックします。- Create key
CREATE
をクリックします。
新しいクラスターを有効にするには:
- Kubernetes Engine のウェブサイトに移動します。
CREATE CLUSTER
をクリックし、必要なクラスター モードを選択します。セキュリティ
の見出し内、CLUSTER
の下で、アプリケーション層で秘密を暗号化する
チェックボックスを確認してください。- kmsキーを顧客管理キーとして選択し、プロンプトが表示された場合はGKEサービスアカウントに権限を付与してください。
CREATE
をクリックします。
既存のクラスターを有効にするには:
- Kubernetes Engine のウェブサイトに移動します。
- 更新するクラスターを選択してください。
- 詳細ペインのセキュリティ見出し内で、Application-layer secrets encryptionと名付けられた鉛筆をクリックします。
アプリケーション層での秘密の暗号化
を有効にして、KMSキーを選択してください。変更を保存
をクリックします。
コマンドラインの使用:
キーを作成するには:
キーリングを作成する:
gcloud kms keyrings create <ring_name> --location <location> --project <key_project_id>
キーを作成:
gcloud kms keys create <key_name> --location <location> --keyring <ring_name> --purpose encryption --project <key_project_id>
Kubernetes Engine Serviceエージェントサービスアカウントに
Cloud KMS CryptoKey Encrypter/Decrypter
ロールを付与します。gcloud kms keys add-iam-policy-binding <key_name> --location <location> --keyring <ring_name> --member serviceAccount:<service_account_name> --role roles/cloudkms.cryptoKeyEncrypterDecrypter --project <key_project_id>
アプリケーション層の秘密情報暗号化を使用して新しいクラスターを作成するには:
gcloud container clusters create <cluster_name> --cluster-version=latest --zone <zone> --database-encryption-key projects/<key_project_id>/locations/<location>/keyRings/<ring_name>/cryptoKeys/ <key_name> --project <cluster_project_id>
既存のクラスターで有効にするには:
gcloud container clusters update <cluster_name> --zone <zone> --database- encryption-key projects/<key_project_id>/locations/<location>/keyRings/<ring_name>/cryptoKeys/ <key_name> --project <cluster_project_id>