Restringir a implantação a um namespace do GKE

Ao implantar no Google Kubernetes Engine (GKE), a conta de serviço de execução padrão do Cloud Deploy tem acesso a todos os namespaces no cluster de destino. É possível configurar essa conta de serviço para implantação em apenas um namespace.

  1. Verifique se a conta de serviço de execução não tem o papel roles/container.developer do IAM.

  2. Conceda à conta de serviço o papel roles/container.clusterViewer.

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

    Esse papel permite que a conta de serviço se autentique no cluster, mas não faça mais nada.

  3. Crie uma função RBAC do Kubernetes que conceda acesso de administrador ao namespace.

    O papel de RBAC neste exemplo tem permissões amplas, equivalentes ao papel do IAM clouddeploy.developer. Para minimizar o risco de escalonamento de privilégios, recomendamos que você mude essas permissões para o mínimo necessário para seus aplicativos. Para instruções, consulte a documentação do RBAC para GKE.

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. Crie um RoleBinding que vincule essa função de RBAC no namespace escolhido à conta de serviço de execução do 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
    

    Esse manifesto define uma vinculação de política de RBAC que vincula a função admin à sua conta de serviço de execução. NAMESPACE é o namespace em que você quer conceder acesso à conta de serviço. A conta de serviço não pode acessar nenhum outro namespace no cluster.

  5. Aplique o manifesto RBAC ao cluster:

    kubectl apply -f YAML_NAME