Google Kubernetes Engine(GKE)にデプロイする場合、デフォルトの Cloud Deploy 実行サービス アカウントは、ターゲット クラスタ内のすべての Namespace にアクセスできます。そのサービス アカウントを構成して、1 つの名前空間にのみデプロイできます。
実行サービス アカウントに
roles/container.developerIAM ロールがないことを確認します。サービス アカウントに
roles/container.clusterViewerロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT" \ --role="roles/container.clusterViewer"このロールにより、サービス アカウントはクラスタで認証できますが、他の操作はできません。
Namespace への管理者アクセス権を付与する Kubernetes RBAC ロールを作成します。
この例の RBAC ロールには、
clouddeploy.developerIAM ロールと同等の幅広い権限があります。権限昇格のリスクを最小限に抑えるため、これらの権限をアプリケーションに必要な最小限の権限に変更することをおすすめします。手順については、GKE の RBAC ドキュメントをご覧ください。kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: admin namespace: NAMESPACE rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"]選択した Namespace の RBAC ロールを Cloud Deploy 実行サービス アカウントにバインドする
RoleBindingを作成します。kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: admin namespace: NAMESPACE subjects: # Google Cloud user account - kind: User name: SERVICE_ACCOUNT roleRef: kind: Role name: admin apiGroup: rbac.authorization.k8s.ioこのマニフェストは、
adminロールを実行サービス アカウントにバインドする RBAC ポリシーを定義します。NAMESPACEは、サービス アカウントにアクセス権を付与する名前空間です。サービス アカウントは、クラスタ上の他の名前空間にアクセスできません。RBAC マニフェストをクラスタに適用します。
kubectl apply -f YAML_NAME