プロファイル適用性: レベル2
Cloud KMSで管理された顧客キーを使用して、アプリケーション層でKubernetesのシークレットをetcdに保存された状態で暗号化します。
デフォルトで、GKEは保存されている顧客コンテンツを暗号化します。これにはSecretsも含まれます。GKEはこのデフォルトの暗号化を追加の操作なしで処理および管理します。
アプリケーション層の秘密情報暗号化は、ユーザ定義の秘密情報やサービスアカウントキーなど、クラスターの運用に必要な秘密情報といった機密データに対して、追加のセキュリティ層を提供します。これらはすべてetcdに保存されます。
この機能を使用すると、Cloud KMSで管理するキーを使用してアプリケーション層でデータを暗号化できます。これにより、攻撃者がetcdにアクセスすることができた場合でも保護されます。
注意デフォルトでは、アプリケーション層の秘密暗号化は無効になっています。
|
影響
クラスタ内のetcdを保護するためにCloud KMS CryptoKeyを使用するには、Kubernetes Engine Service AgentサービスアカウントがCloud
KMS CryptoKey Encrypter/Decrypterロールを持っている必要があります。
監査
Google Cloud Consoleを使用する:
- Google Cloud Console Kubernetes EngineページにアクセスしてKubernetes Engineに移動します
- クラスターのリストから各クラスターをクリックして詳細ペインを表示し、アプリケーション層の秘密情報の暗号化が有効に設定されていることを確認してください。
- 既存のクラスターを確認するには、まずクラスター名、場所、プロジェクトの3つの変数を定義し、次のコマンドを実行します。
gcloud container clusters describe $CLUSTER_NAME --location $LOCATION -- project $PROJECT_ID --format json | jq '.databaseEncryption'
正しく設定されている場合、コマンドの出力は次の詳細を含む対応を返します。
{ "currentState": "CURRENT_STATE_ENCRYPTED", "state": "ENCRYPTED" }
修復
アプリケーション層の秘密情報暗号化を有効にするには、いくつかの設定項目が必要です。これには以下が含まれます。
- キーリング
- キー
Cloud KMS CryptoKey Encrypter/Decrypterロールを持つGKEサービスアカウント
これらが作成されると、既存または新規のクラスターでアプリケーション層の秘密情報暗号化を有効にすることができます。
Google Cloud Consoleを使用する:
キーを作成するには、次の手順に従います。
- Google Cloud ConsoleセキュリティページにアクセスしてCloud KMSに移動します。
- CREATE KEY RINGを選択
- キーリング名とキーが保存されるリージョンを入力してください。
- 作成をクリックします。
- Create key
- 作成をクリックします。
新しいクラスターで有効にするには:
- Google CloudコンソールKubernetes EngineページにアクセスしてKubernetes Engineに移動します。
- CREATE CLUSTERをクリックし、必要なクラスターモードを選択します。
- セキュリティの見出し内で、CLUSTERの下にあるアプリケーション層で秘密を暗号化するチェックボックスを確認してください。
- KMS Keyを顧客管理キーとして選択し、プロンプトが表示された場合はGKEサービスアカウントに権限を付与してください。
- 作成をクリックします。
既存のクラスターで有効にするには:
- Google CloudコンソールKubernetes EngineページにアクセスしてKubernetes Engineに移動します。
- 更新するクラスターを選択してください。
- 詳細ペインのセキュリティ見出し内で、アプリケーション層の秘密暗号化と名付けられた鉛筆をクリックしてください。
アプリケーション層での秘密の暗号化を有効にして、KMS Keyを選択してください。- 変更を保存をクリック。
コマンドラインの使用:
キーリングを作成するには
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>/cryptoKey s/<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>/cryptoKey s/<key_name> --project <cluster_project_id>
