セキュリティ認証情報のローテーション

このトピックでは、Anthos clusters on AWS(GKE on AWS)管理サービスとユーザー クラスタのセキュリティ認証情報をローテーションする方法について説明します。Anthos clusters on AWS のセキュリティ機能について詳しくは、セキュリティをご覧ください。

始める前に

このページの手順を完了するには、ご自身 Anthos clusters on AWS 構成でディレクトリにアクセスできるようにする必要があります。

管理サービスの証明書

このセクションでは、管理サービスの証明書をローテーションする方法について説明します。

管理認証局

このセクションでは、Anthos clusters on AWS コンポーネントの認証局(CA)署名証明書をローテーションする方法について説明します。

Management API サーバーのルート CA

API サーバーのルート CA をローテーションするには、次の手順を行います。

  1. AWS 上の Anthos クラスタ構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。
    cd anthos-aws
  2. テキスト エディタで anthos-gke.status.yaml を開きます。
  3. キー certificateAuthority のすべての値を削除します。これには、encryptedPrivateKey.kmsKeyARNencryptedPrivateKey.valueencryptedPrivateKey.certificate が含まれます。
  4. anthos-gke aws management init を実行して anthos-gke.status.yaml ファイルを更新します。

     anthos-gke aws management init
    
  5. anthos-gke aws management apply を実行して管理サービスを更新します。

     anthos-gke aws management apply
    

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。
    cd anthos-aws
    anthos-gke aws management get-credentials

その他の管理 CA

このセクションでは、次のすべての CA をローテーションする方法について説明します。

  • 認証 Webhook CA
  • Etcd CA
  • サービス アカウント署名者 CA

次のいずれかの方法でこれらの CA をローテーションできます。

  • anthos-gke.status.yaml から certificateAuthority セクションを削除します。

    1. AWS 上の Anthos クラスタ構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。
      cd anthos-aws
    2. テキスト エディタで anthos-gke.status.yaml を開きます。
    3. キー certificateAuthority のすべての値を削除します。これには、encryptedPrivateKey.kmsKeyARNencryptedPrivateKey.valueencryptedPrivateKey.certificate が含まれます。
    4. anthos-gke aws management init を実行して anthos-gke.status.yaml ファイルを更新します。

       anthos-gke aws management init
      
    5. anthos-gke aws management apply を実行して管理サービスを更新します。

       anthos-gke aws management apply
      

  • 新しい Anthos clusters on AWS のバージョンが利用可能な場合は、Anthos clusters on AWS の管理サービスをアップグレードします。

  • 管理サービスの EC2 インスタンスを再作成します。

    1. anthos-aws ディレクトリから terraform を使用して、管理サービスの ID を取得します。
      cd anthos-aws
      terraform output cluster_id
      出力には、管理サービス ID が含まれます。次の例の場合、ID は gke-12345abc です。
      terraform output cluster_id
      gke-12345abc
      
    2. AWS EC2 コンソールを開きます。
    3. [Instances] をクリックします。
    4. cluster-id-management-0 という名前のインスタンスを探します。
    5. [Actions] -> [Instance state] -> [terminate] を選択して、インスタンスを削除します。EC2 は、同じ EBS ボリュームを使用して、新しいインスタンスを自動的に作成します。

管理 TLS クライアント / サーバーの鍵と証明書

管理サービスの TLS クライアント / サーバーの鍵と証明書をローテーションするには、管理サービス インスタンスを再作成します。インスタンスを再作成するには、次の手順を行います。

  1. anthos-aws ディレクトリから terraform を使用して、管理サービスの ID を取得します。
    cd anthos-aws
    terraform output cluster_id
    出力には、管理サービス ID が含まれます。次の例の場合、ID は gke-12345abc です。
    terraform output cluster_id
    gke-12345abc
    
  2. AWS EC2 コンソールを開きます。
  3. [Instances] をクリックします。
  4. cluster-id-management-0 という名前のインスタンスを探します。
  5. [Actions] -> [Instance state] -> [terminate] を選択して、インスタンスを削除します。EC2 は、同じ EBS ボリュームを使用して、新しいインスタンスを自動的に作成します。

Google Cloud サービス アカウント

管理サービスのサービス アカウント

管理サービスの Google Cloud サービス アカウントをローテーションするには、次の手順を行います。

  1. 前提条件の手順に沿って、新しいサービス アカウントを作成し、サービス アカウント キーをダウンロードする
  2. AWS 上の Anthos クラスタ構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。
    cd anthos-aws
  3. 鍵を別のパスにダウンロードした場合は、テキスト エディタで anthos-gke.yaml ファイルを開きます。.spec.googleCloud.serviceAccountKeys.managementService.status.googleCloud.serviceAccountKeys.connectAgent.spec.googleCloud.serviceAccountKeys.node の値を新しいパスに変更します。

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSManagementService
    metadata:
     name: management
    spec:
     googleCloud:
       serviceAccountKeys:
         managementService: MANAGEMENT_KEY_PATH
         connectAgent: CONNECT_KEY_PATH
         node: NODE_KEY_PATH
     ...
    
  4. anthos-gke aws management init を実行して anthos-gke.status.yaml ファイルを更新します。

    anthos-gke aws management init
    
  5. anthos-gke aws management apply を実行して管理サービスを更新します。

    anthos-gke aws management apply
    

ユーザー クラスタのサービス アカウント

これらのサービス アカウントを AWSClusters と AWSNodePools に適用するには、アップグレードまたは削除してから、再作成する必要があります。

ユーザー クラスタの証明書

このセクションでは、ユーザー クラスタの証明書をローテーションする方法について説明します。

ユーザー クラスタの CA と SSH 認証鍵

ほとんどのユーザー クラスタ用の CA は、クラスタの作成時に作成されます。

ユーザー クラスタを削除すると、Anthos clusters on AWS は次の証明書をローテーションします。

  • API サーバーのルート CA
  • API フロント プロキシ CA
  • etcd CA
  • Kubernetes サービス アカウント署名者 CA
  • コントロール プレーンとノードの SSH 認証鍵ペア

ユーザー クラスタの認証 Webhook CA

ユーザー クラスタの認証 Webhook CA をローテーションするには、anthos-gke.status.yaml ファイルを編集して変更を適用します。

  1. AWS 上の Anthos クラスタ構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。
    cd anthos-aws
  2. テキスト エディタで anthos-gke.status.yaml を開きます。
  3. キー certificateAuthority のすべての値を削除します。これには、encryptedPrivateKey.kmsKeyARNencryptedPrivateKey.valueencryptedPrivateKey.certificate が含まれます。
  4. anthos-gke aws management init を実行して anthos-gke.status.yaml ファイルを更新します。

     anthos-gke aws management init
    
  5. anthos-gke aws management apply を実行して管理サービスを更新します。

     anthos-gke aws management apply
    

ユーザー クラスタの TLS 鍵ペアと証明書

Anthos clusters on AWS は、インスタンスの作成時に TLS 鍵ペアと証明書を生成します。これらのペアをローテーションするには、コントロール プレーンとノードプールに対して次の手順を行いインスタンスを再作成します。

コントロール プレーン

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。
    cd anthos-aws
    anthos-gke aws management get-credentials
  2. kubectl を使用して、AWSCluster からコントロール プレーンの AWS EC2 ターゲット グループを取得します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get awscluster cluster-name \
      -o jsonpath='{.status.targetGroupName}{"\n"}'
    

    出力には、コントロール プレーンの EC2 ターゲット グループの名前が含まれます。例: gke-123456a7-controlplane

  3. AWS EC2 コンソールを開きます。左側のペインで [Target Groups] を選択します。

  4. 検索バーをクリックして、ターゲット グループを探します。ターゲット グループの名前をクリックし、[Targets] をクリックします。コントロール プレーンのインスタンスの一覧が表示されます。

  5. ターゲット グループ内の各インスタンスに対して、次の手順を行います。

    1. インスタンスの [Instance ID] をクリックします。AWS EC2 インスタンス コンソールが表示されます。

    2. [Instance ID] をクリックします。

    3. [Actions] -> [Instance state] -> [terminate] を選択して、インスタンスを削除します。EC2 は、同じ EBS ボリュームを使用して、新しいインスタンスを自動的に作成します。

    4. [Target Groups] ページに戻ります。

  6. グループ内のすべてのインスタンスを終了したら、[Target Groups] ページに戻ります。

  7. ページの [Registered Targets] セクションで [Status] 列を見つけます。各インスタンスの [Status] は [Healthy] になっているはずです。一部のインスタンスが正常な場合は、数分待ってから更新()アイコンをクリックします。

  8. ターゲット グループ内のすべてのインスタンスが正常に動作したら、次のステップに進みます。

ノードプール

ノードプールの TLS 証明書をローテーションするには:

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。
    cd anthos-aws
    anthos-gke aws management get-credentials
  2. kubectl を使用して、AWSNodePool からノードプールの AWS EC2 ターゲット グループを取得します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get awsnodepool -o jsonpath='{.items[*].status.autoScalingGroupName}{"\n"}'
    

    出力には、ノードプールの EC2 ターゲット グループの名前が含まれます。例: gke-123456a7-nodepool-abc123

  3. AWS EC2 コンソールを開きます。左側のペインで [Target Groups] を選択します。

  4. 検索バーをクリックして、ターゲット グループを探します。ターゲット グループの名前をクリックし、[Targets] をクリックします。コントロール プレーンのインスタンスの一覧が表示されます。

  5. ターゲット グループ内の各インスタンスに対して、次の手順を行います。

    1. インスタンスの [Instance ID] をクリックします。AWS EC2 インスタンス コンソールが表示されます。

    2. [Instance ID] をクリックします。

    3. [Actions] -> [Instance state] -> [terminate] を選択して、インスタンスを削除します。EC2 は、同じ EBS ボリュームを使用して、新しいインスタンスを自動的に作成します。

    4. [Target Groups] ページに戻ります。

  6. グループ内のすべてのインスタンスを終了したら、[Target Groups] ページに戻ります。

  7. ページの [Registered Targets] セクションで [Status] 列を見つけます。各インスタンスの [Status] は [Healthy] になっているはずです。一部のインスタンスが正常な場合は、数分待ってから更新()アイコンをクリックします。

  8. ターゲット グループ内のすべてのインスタンスが正常に動作したら、次のステップに進みます。