プロファイル適用性: レベル2
Cloud KMSで顧客管理キーを使用して、アプリケーション層でetcdに保存されたKubernetesのシークレットを暗号化します。
デフォルトで、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 websiteに移動します。
- クラスタのリストから各クラスタをクリックして詳細ペインを表示し、アプリケーション層の秘密情報暗号化が有効に設定されていることを確認してください。
コマンドラインの使用:
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をクリックしてください。
新しいクラスターを有効にするには:
- Kubernetes Engine のウェブサイトにアクセスしてください。
CREATE CLUSTERをクリックし、必要なクラスターモードを選択してください。Securityの見出し内で、CLUSTERの下にあるEncrypt secrets at the application layerチェックボックスを確認してください。- kmsキーを顧客管理キーとして選択し、プロンプトが表示された場合はGKEサービスアカウントに権限を付与してください。
CREATEをクリックしてください。
既存のクラスターを有効にするには:
- Kubernetes Engine のウェブサイトにアクセスしてください。
- 更新するクラスターを選択してください。
- 詳細ペインのセキュリティ見出し内で、アプリケーション層の秘密暗号化と名付けられた鉛筆をクリックしてください。
Encrypt secrets at the application layerを有効にして、KMSキーを選択してください。SAVE CHANGESをクリックしてください。
コマンドラインを使用
キーを作成するには、次の手順に従います。
キーリングを作成する:
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>
