Pod のセキュリティ ポリシーの有効化

Pod のセキュリティ ポリシーを有効にすると、不正使用された名前空間(istio-system 以外)が、同じノードを共有する別の名前空間のセキュリティに影響しないようにします。Mesh CA で動作するサンプル PodSecurityPolicy リソース ファイルには、Anthos Service Mesh が用意されています。これらのファイルは必要に応じて変更できます。以下では、最初に Pod のセキュリティ ポリシーを適用してから、GKE クラスタの Pod のセキュリティ ポリシーを有効にします。

Pod のセキュリティ ポリシーの有効化

  1. システムに Pod のセキュリティ ポリシーがすでに定義されているかどうかを確認します。

    kubectl get psp --all-namespaces
    
    • コマンドが既存のポリシーのリストを返す場合、システムにはすでに Pod のセキュリティ ポリシーが適用されています。ロールバックを行う必要がある場合に備え、既存の PodSecurityPolicy YAML ファイルを使用できるようにしておくことをおすすめします。既存の各 Pod のセキュリティ ポリシーの spec 部分(gce で始まるポリシーを除く)に、次のセクションを追加する必要があります。

      allowedHostPaths:
        - pathPrefix: "/var/run/sds"
          readOnly: true
      allowedCapabilities:
        - NET_ADMIN
        - NET_RAW
      

      これらの行により、/var/run/sds ホストパスからの読み取りが許可され、自動サイドカー インジェクションが可能になります。

      kubectl を使用すると、Kubernetes で Pod のセキュリティ ポリシーの編集と適用が可能になります。

      kubectl edit psp YOUR_EXISTING_POD_SECURITY_POLICY
      
    • このコマンドが No resources found を返す場合、Pod のセキュリティ ポリシーが定義されていません。既存のワークロードと競合しないように、samples/security/psp/all-pods-psp.yaml ファイルの変更が必要になる場合もあります。詳細については、Pod のセキュリティ ポリシーのガイドをご覧ください。ファイルを変更したら、それを適用します。

      kubectl apply -f "samples/security/psp/all-pods-psp.yaml"
      
  2. Pod のセキュリティ ポリシーを適用して Secret Discovery Service(SDS)を保護します。

    kubectl apply -f "samples/security/psp/citadel-agent-psp.yaml"
    

    これにより、ホスト VM 上で UDS パス /var/run/sds を作成する権限が Citadel エージェント(ノード エージェントとも呼ばれる)に付与されます。

  3. 次のコマンドを実行して、Pod のセキュリティ ポリシーを有効にします。

    gcloud beta container clusters update ${CLUSTER_NAME} \
        --enable-pod-security-policy
    

    Pod のセキュリティ ポリシーが有効になるまで数分かかることがあります。このプロセス中、既存のワークロードは Kubernetes マスターに接続できません。Kubernetes マスターが再起動するまで待ちます。クラスタのステータスは、Google Cloud コンソールの Kubernetes クラスタページで確認できます。

    詳細については、Pod のセキュリティ ポリシーの使用をご覧ください。

Pod のセキュリティ ポリシーの確認

既存のワークロードがある場合は、新しい Pod のセキュリティ ポリシーを使用してワークロードをデプロイできることを検証することをおすすめします。

  1. 確認するデプロイを選び、レプリカを増やしていきます。たとえば、指定したサービスに 1 つのレプリカがある場合は 1 ずつ増やします。

    kubectl scale deployment YOUR_DEPLOYMENT --replicas=2 -n YOUR_NAMESPACE
    
  2. デプロイがスケールアップされていることを確認します。

    kubectl get deploy
    
  3. 新しいワークロードをデプロイできることを確認します。つまり、Pod のセキュリティ ポリシーはサービスのワークロードのデプロイには影響しません。

    kubectl get deployment YOUR_SERVICE -n YOUR_NAMESPACE
    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    YOUR_SERVICE            2/2     2            2           ...
    
  4. サービスのレプリカをスケールダウンします。

    kubectl scale deployment YOUR_SERVICE --replicas=1 -n YOUR_NAMESPACE
    
  5. ワークロードが正常にデプロイされない場合は、YAML ファイルを修正しながら、Pod のセキュリティ ポリシーを一時的に無効にできます。

    gcloud beta container clusters update ${CLUSTER_NAME} \
      --no-enable-pod-security-policy
    

次のステップ