パッケージ検証証明書をローテーションする

このページでは、Google Distributed Cloud(GDC)エアギャップ アプライアンスでパッケージ検証に使用されるルート認証局をローテーションする方法について説明します。

GDC パッケージの検証では、ルート認証局(CA)を使用してリリースキー証明書を検証します。そのため、ルート CA 証明書を定期的にローテーションすることが重要になります。リリース通知またはアップグレードの実行時に表示される可能性のある警告メッセージで指示された場合は、ルート CA をローテーションする必要があります。

始める前に

パッケージ検証証明書をローテーションするには、必要な ID とアクセスロールが必要です。

  • package-validation-root-certs ConfigMap への書き込みアクセス権があることを確認します。
  • セキュリティ管理者に、アップグレード デバッガ(upgrade-debugger-cp)ロールを付与するよう依頼します。

証明書のローテーションが必要かどうかを確認する

オペレーションを実行する前に、パッケージ検証証明書のローテーションが必要かどうかを確認します。

  1. KUBECONFIG 環境変数を設定します。

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    PATH_TO_KUBECONFIG_FILE は、ルート管理クラスタで gdcloud auth login を実行して取得した kubeconfig ファイルのパスに置き換えます。

  2. 現在のトラスト アンカーと最新のトラスト アンカーを比較して、アップグレードが必要かどうかを判断します。harbor-system/package-validation-root-certsConfigMap データは、ローカル トラスト アンカーと比較されます。

    $ CURRENT_TRUST_ANCHOR=$(kubectl  --kubeconfig=$KUBECONFIG get cm package-validation-root-certs -n harbor-system -o jsonpath='{.data.ca\.crt}')
    
    $ LATEST_TRUST_ANCHOR=$(cat /root/release/staging_root_ca_certificate.crt)
    
    $ diff <( echo "$CURRENT_TRUST_ANCHOR" ) <( echo "$LATEST_TRUST_ANCHOR" ) && echo trust anchors are same  || echo trust anchors are different, upgrade required!
    

アプライアンスで証明書のローテーションとアップグレードを行う

次の手順に沿って、ルート管理クラスタの harbor-system/package-validation-root-certs にある ConfigMap オブジェクトをローテーションします。インフラストラクチャ オペレーターには、ConfigMap への書き込みアクセス権が必要です。

  1. 次の変数を作成して値を割り当てます。

    USERNAME=USER_NAME #IO
    TARGET_FOLDER=/tmp/${USERNAME}
    OUTPUT="${TARGET_FOLDER}/package-validation-root-certs.yaml"
    LATEST_TRUST_ANCHOR_CA_FILE=/root/release/staging_root_ca_certificate.crt
    CONFIGMAP_NAME=package-validation-root-certs
    NAMESPACE=harbor-system
    

    USER_NAME は、IO ユーザー名に置き換えます。

  2. 証明書のローテーション プロセスの出力ファイルを含むターゲット フォルダを作成します。

    mkdir -p "${TARGET_FOLDER}"
    
  3. LATEST_TRUST_ANCHOR の値を更新して置き換えます。

      cat <<EOF  > "${OUTPUT}"
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: ${CONFIGMAP_NAME}
        namespace: ${NAMESPACE}
      data:
        ca.crt: |
      $(sed 's/^/    /' "${LATEST_TRUST_ANCHOR_CA_FILE}")
      EOF
    
  4. kubectl を使用して新しい構成を適用します。

      kubectl apply -f ${OUTPUT}
    
  5. 新しく適用された ca.crt が ConfigMap 内に存在することを確認します。

      kubectl describe configmap package-validation-root-certs -n harbor-system
    

これにより、package-validation-root-cert で新しい証明書がローテーションされます。