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