Restreindre le déploiement à un espace de noms GKE

Lorsque vous déployez sur Google Kubernetes Engine (GKE), le compte de service d'exécution Cloud Deploy par défaut a accès à tous les espaces de noms du cluster cible. Vous pouvez configurer ce compte de service pour qu'il ne déploie que dans un seul espace de noms.

  1. Assurez-vous que le compte de service d'exécution ne dispose pas du rôle IAM roles/container.developer.

  2. Attribuez le rôle roles/container.clusterViewer au compte de service.

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:SERVICE_ACCOUNT" \
     --role="roles/container.clusterViewer"
    

    Ce rôle permet au compte de service de s'authentifier sur le cluster, mais ne lui permet pas d'effectuer d'autres actions.

  3. Créez un rôle Kubernetes RBAC qui accorde un accès administrateur à l'espace de noms.

    Dans cet exemple, le rôle RBAC dispose d'autorisations étendues, équivalentes au rôle IAM clouddeploy.developer. Pour minimiser le risque d'escalade des privilèges, nous vous recommandons de modifier ces autorisations pour qu'elles correspondent au minimum requis pour vos applications. Pour obtenir des instructions, consultez la documentation RBAC pour GKE.

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. Créez un RoleBinding qui lie ce rôle RBAC dans l'espace de noms de votre choix au compte de service d'exécution Cloud Deploy :

    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
    

    Ce fichier manifeste définit une liaison de stratégie RBAC entre le rôle admin et votre compte de service d'exécution. NAMESPACE est l'espace de noms auquel vous souhaitez accorder l'accès au compte de service. Le compte de service ne peut accéder à aucun autre espace de noms du cluster.

  5. Appliquez le fichier manifeste RBAC au cluster :

    kubectl apply -f YAML_NAME