6.2. Kubernetes KMS v2 の設定


etcd の外部 KMS 暗号化を設定することで、鍵管理を一元化し、規制遵守要件を満たすことができます。

重要

Kubernetes KMS v2 はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

6.2.1. KMS 暗号化の有効化

etcd データに対してキー管理サービス (KMS) 暗号化を有効にすることで、キー管理を一元化し、コンプライアンス要件を満たすことができます。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • TechPreviewNoUpgrade 機能セットを有効にしたため、KMSEncryption フィーチャーゲートが有効になります。
  • 外部ホストされており、クラスターからアクセス可能な HashiCorp Vault Enterprise インスタンスがあります。Vault Enterprise は、クラスターサービスネットワーク内にホストしてはなりません。Vault Community Edition はサポートされていません。
  • Vault インスタンスを以下のように設定した。

    • マウントパス (デフォルトの transit/ パスなど) で Transit シークレットエンジンが有効になっています。
    • aes256-gcm96 タイプを使用して暗号鍵を作成した (FIPS 140-3 に準拠する場合に推奨)。
    • KMS プラグインがキー情報を暗号化、復号化、および読み取ることを許可する Vault ポリシー
    • ポリシーが添付された AppRole などの認証方法が設定されています。
  • KMS プラグインイメージ用の SHA256 ダイジェストを含む、完全修飾 OCI イメージプル仕様書をお持ちです。イメージは、Red Hat Ecosystem Catalog または Docker Hub から入手できます。詳細は、HashiCorp Vault KMS プラグインコンテナーイメージおよび Red Hat Ecosystem Catalog を参照してください。非接続環境では、イメージはアクセス可能なレジストリーにミラーリングされます。
  • Skopeo と jq ツールがインストールされています。
  • 以下の機能を持つ Vault ポリシーを設定しました。

    path "transit/encrypt/kms-key" {
      capabilities = ["update"]
    }
    
    path "transit/decrypt/kms-key" {
      capabilities = ["update"]
    }
    
    path "transit/keys/kms-key" {
      capabilities = ["read"]
    }
    
    path "sys/license/status" {
      capabilities = ["read"]
    }

    transit を Transit のマウントパスに、kms-key を Vault Transit のキー名に置き換えてください。

  • etcd のバックアップを作成した。

手順

  1. 以下のコマンドを入力して、KMS プラグインイメージの SHA256 ダイジェストを取得します。

    $ skopeo inspect docker://quay.io/redhat-isv-containers/698df066f8d1ddf179c15ef9:<version> | jq -r '.Digest'

    <version> を、お使いのクラスターと互換性のあるプラグインのバージョン (例: 0.1.0-beta-ubi) に置き換えてください。

    結果として得られたダイジェストを使用して、quay.io/redhat-isv-containers/698df066f8d1ddf179c15ef9@sha256:<digest> の形式で完全修飾プル仕様を構築します。

  2. 以下のコマンドを入力して、Vault の認証情報を使用して openshift-config 名前空間にシークレットを作成します。

    $ oc create secret generic vault-approle-secret \
      --from-literal=role-id=<your_role_id> \
      --from-literal=secret-id=<your_secret_id> \
      -n openshift-config

    <your_role_id> と <your_secret_id> を、ご自身の Vault AppRole の認証情報に置き換えてください。

  3. オプション:Vault サーバーがカスタム TLS 認証局を使用している場合は、次のコマンドを入力して、CA バンドルを含む config map を openshift-config 名前空間に作成します。

    $ oc create configmap vault-ca-bundle \
      --from-file=ca-bundle.crt=<path_to_ca_bundle> \
      -n openshift-config
  4. 以下のコマンドを入力して、APIServer カスタムリソースを編集します。

    $ oc edit apiserver cluster
  5. spec.encryption セクションに KMS 設定を追加します。

    apiVersion: config.openshift.io/v1
    kind: APIServer
    metadata:
      name: cluster
    spec:
      encryption:
        type: KMS
        kms:
          type: Vault
          vault:
            kmsPluginImage: <registry>/<repository>@sha256:<digest>
            vaultAddress: https://vault.example.com:8200
            vaultNamespace: my-namespace
            vaultAuthNamespace: my-auth-namespace
            vaultKeyPath: transit/keys/kms-key
            tls:
              caBundle:
                name: vault-ca-bundle
              serverName: vault.example.com
            authentication:
              type: AppRole
              appRole:
                secret:
                  name: vault-approle-secret

    各項目の説明:

    kmsPluginImage
    KMS プラグインコンテナーイメージを、SHA256 ダイジェスト付きの完全修飾 OCI プル仕様として指定します。イメージタグと短い名前は使用できません。非接続環境では、ミラーリングされた場所を使用してください。
    vaultAddress
    Vault サーバーの HTTPS URL を指定します。パス、クエリーパラメーター、およびフラグメントは許可されていません。
    vaultNamespace
    Vault の名前空間を指定します。この値はオプションです。
    vaultAuthNamespace
    Transit ネームスペースと異なる場合に、認証に使用する Vault ネームスペースを指定します。デフォルトでは、vaultNamespace の 値が使用されます。この値はオプションです。
    vaultKeyPath
    Transit 暗号化キーのパスを <mount>/keys/<key_name> の形式で指定します。
    tls.caBundle.name
    CA バンドルを含む openshift-config 名前空間内の config map を指定します。Vault がカスタム CA を使用する場合にのみ必要です。
    tls.serverName
    証明書の検証に使用する TLS サーバー名を指定します。この値はオプションです。
    認証.appRole.secret.name
    AppRole の認証情報を含む openshift-config 名前空間内のシークレット名を指定します。
  6. 保存して終了します。

    kube-apiserver、openshift-apiserver、および 認証 Operator は、設定を検証し、新しいリビジョンを展開します。

検証

  1. 暗号化タイプを確認するには、以下のコマンドを入力します。

    $ oc get apiserver cluster -o jsonpath='{.spec.encryption.type}'

    出力には KMS が表示されます。

  2. 以下のコマンドを入力して、KMS プラグインの健全性と設定の検証を確認してください。

    $ oc get kubeapiserver cluster -ojsonpath='{.status.encryptionStatus}' | jq .

    preflight.result.status に Succeeded が表示され、healthReports のすべてのノードに Healthy が表示されていることを確認してください。

  3. kube-apiserver のロールアウトの進捗を監視するには、以下のコマンドを入力します。

    $ oc get co kube-apiserver

    ロールアウト時の出力例

    NAME             VERSION      AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    kube-apiserver   5.0.0-rc.4   True        True          False      35m     NodeInstallerProgressing: 2 nodes are at revision 6; 1 node is at revision 7

    PROGRESSING がFalse と表示されたら、ロールアウトは完了です。

  4. 以下のコマンドを入力して、暗号化移行のステータスを確認します。

    $ oc get kubeapiserver cluster -o jsonpath='{.status.conditions[?(@.type=="Encrypted")]}' | jq .

    完了時の出力例

    {
      "lastTransitionTime": "2026-09-24T16:41:48Z",
      "message": "All resources encrypted: secrets, configmaps",
      "reason": "EncryptionCompleted",
      "status": "True",
      "type": "Encrypted"
    }

    etcd で暗号化を確認する前に、理由がEncryptionCompleted と表示されるまで待ってください。

  5. etcd で秘密情報が暗号化されていることを確認します。

    警告

    暗号化の検証を行う前に、すべてのコントロールプレーンノードで kube-apiserver の ロールアウトが完了するまで待ってください。ノードが以前のリビジョンを実行している間に作成されたシークレットは、KMS で暗号化されません。

    1. 以下のコマンドを入力して、テスト用のシークレットを作成します。

      $ oc create secret generic test-secret --from-literal=key=value -n default
    2. 以下のコマンドを入力して、etcd Pod 名を取得します。

      $ oc get pods -n openshift-etcd -l app=etcd -o name | head -1
    3. 以下のコマンドを入力して、etcd 内のシークレットデータを確認します。

      $ oc exec -n openshift-etcd <etcd_pod_name> -- etcdctl get /kubernetes.io/secrets/default/test-secret --print-value-only | hexdump -C | head -1

      出力例

      00000000  6b 38 73 3a 65 6e 63 3a  6b 6d 73 3a 76 32 3a 31  |k8s:enc:kms:v2:1|

      出力は k8s:enc:kms:v2: で始まり、その後に暗号化されたバイナリーデータが続きます。

    4. 以下のコマンドを入力して、テスト用のシークレットを削除します。

      $ oc delete secret test-secret -n default
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る