Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Restrict resource operations in a cluster by using custom RBAC

Última atualização: Oct 12, 2026

Quando as ClusterRoles predefinidas no console do Container Service for Kubernetes (ACK) não atendem aos seus requisitos, crie Roles e ClusterRoles personalizadas para implementar um controle de acesso baseado em função (RBAC) granular.

Políticas de RBAC personalizadas

Crie manifestos YAML personalizados para Roles e ClusterRoles a fim de implementar controle de acesso granular sobre os recursos no seu cluster ACK. Utilize os exemplos a seguir como referência.

Mecanismo de RBAC do Kubernetes

image

Role (escopo de namespace)

Uma Role define um conjunto de permissões restritas a um único namespace. Em seguida, uma RoleBinding vincula essa Role a sujeitos, garantindo que as permissões tenham efeito apenas naquele namespace. O exemplo YAML abaixo define uma Role chamada my-role, que concede acesso de leitura aos recursos de Pod no namespace padrão.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: my-role
rules:                               # A list of permission rules.
  - apiGroups: [""]                    # The API group of the resource. An empty string "" indicates the core API group.
    resources: ["pods"]                # The resource type that the rule applies to.
    verbs: ["get", "list"]             # The actions that are allowed on the resource.

ClusterRole (escopo de cluster)

Uma ClusterRole estabelece um conjunto de permissões válidas para todo o cluster. Posteriormente, uma ClusterRoleBinding associa a ClusterRole aos sujeitos, permitindo que as permissões se apliquem em todo o ambiente. O exemplo YAML a seguir cria uma ClusterRole denominada my-clusterrole, liberando a leitura de recursos de Pod e Service no cluster.

A ClusterRole é um recurso com escopo de cluster. Especificar um namespace no YAML não produz nenhum efeito.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default                     # A namespace is not required for a ClusterRole.
  name: my-clusterrole
rules:                                 # A list of permission rules.
  - apiGroups: [""]                    # The API group of the resource.
    resources: ["pods"]                # The resource type.
    verbs: ["get", "list"]             # The allowed actions.
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list"]

Políticas comuns de recursos

  • Permissões de leitura

    • get: Lê os detalhes de um recurso específico.

    • list: Lista uma coleção de recursos.

    • watch: Monitora alterações nos recursos e recebe atualizações em tempo real.

  • Permissões de escrita

    • create: Cria uma nova instância de recurso.

    • update: Modifica um recurso existente.

    • patch: Aplica uma modificação parcial a um recurso existente.

    • delete: Exclui um recurso especificado.

Nome do recurso

Tipo de recurso (resources)

Grupo de API (apiGroups)

Permissões (verbs)

Pod

resources: ["pods"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Service

resources: ["services"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

ConfigMap

resources: ["configmaps"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Secret

resources: ["secrets"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolume

resources: ["persistentvolumes"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolumeClaim

resources: ["persistentvolumeclaims"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Namespace

resources: ["namespaces"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Deployment

resources: ["deployments"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

DaemonSet

resources: ["daemonsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StatefulSet

resources: ["statefulsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Ingress

resources: ["ingresses"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

NetworkPolicy

resources: ["networkpolicies"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Job

resources: ["jobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

CronJob

resources: ["cronjobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StorageClass

resources: ["storageclasses"]

apiGroups: ["storage.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

HorizontalPodAutoscaler

resources: ["horizontalpodautoscalers"]

apiGroups: ["autoscaling"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Procedimento

image

Aplique permissões de RBAC personalizadas pelo console do ACK ou via kubectl.

Importante

O console do Container Service for Kubernetes (ACK) permite vincular apenas ClusterRoles personalizadas. Para vincular uma Role personalizada, utilize a ferramenta de linha de comando kubectl.

Console

Etapa 1: Criar uma ClusterRole personalizada

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Security > Role.

  3. Na página Role, clique na aba Cluster Role. Em seguida, clique em Create.

  4. No painel Create YAML, insira o manifesto YAML da sua política personalizada e clique em OK para criar a ClusterRole.

    Esta etapa utiliza o YAML de uma ClusterRole (cluster-scoped) como exemplo. Após a criação, visualize a ClusterRole personalizada my-clusterrole na aba Cluster Role.

Etapa 2: Atribuir a ClusterRole personalizada

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Authorizations.

  2. Na página Authorizations, configure as permissões de gerenciamento.

    • Para autorizar um usuário RAM: Clique na aba RAM Users, localize o usuário RAM desejado e clique em Modify Permissions na coluna Actions para acessar a página Permissions.

    • Para autorizar uma função RAM: Clique na aba RAM Role, selecione a função RAM alvo e clique em Modify Permissions para ir à página Permissions.

  3. Clique em +Add Permissions. Na caixa de diálogo, selecione o Cluster onde você criou a ClusterRole e o Namespace que deseja autorizar. Na seção Permissions, escolha Custom. Na lista suspensa exibida, selecione my-clusterrole e clique em Submit.

kubectl

Etapa 1: Criar uma ClusterRole personalizada

  1. Crie um arquivo chamado my-clusterrole.yaml contendo o seguinte manifesto YAML.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: my-clusterrole
    rules:
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["services"]
        verbs: ["get", "list", "watch"]
  2. Execute o comando abaixo para implantar a ClusterRole:

    kubectl apply -f my-clusterrole.yaml

Etapa 2: Obter o ID do sujeito

Etapa 3: Atribuir a ClusterRole personalizada

  1. Crie um arquivo denominado my-clusterrole-binding.yaml com o manifesto YAML a seguir.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: my-clusterrole-binding
    subjects:
    - kind: User
      name: "20811XXXXXXXXX2288"  # The user ID or role ID of the subject obtained in Step 2.
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: my-clusterrole
      apiGroup: rbac.authorization.k8s.io
  2. Execute o comando abaixo para implantar a ClusterRoleBinding:

    kubectl apply -f my-clusterrole-binding.yaml

Após conceder as permissões personalizadas ao usuário RAM ou função RAM desejada, obtain the kubeconfig file for the cluster and use kubectl to connect to the cluster para validar as permissões.

Perguntas frequentes

Como conceder acesso ao terminal do console?

Por padrão, um usuário RAM ou função RAM não consegue acessar o terminal de um container pelo console do ACK, mesmo possuindo permissões de somente leitura get e list para pods. Essa ação exige permissões get e create no sub-recurso de Pod pods/exec.

Portanto, conceda as permissões get e create sobre o recurso pods/exec nas rules de uma Role ou ClusterRole e vincule essa função ao usuário ou grupo de usuários alvo. Veja um exemplo abaixo.

Para acessar o terminal: Faça login no console do ACK . Na página Clusters , clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Workloads > Pods . Na coluna Actions , clique em Terminal .

Role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: ns-role 
rules:                               
- apiGroups: [""]                   
  resources: ["pods"]                
  verbs: ["get", "list"]           
# Grant permissions on pods/exec in the namespace.
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["get", "create"]

ClusterRole

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default                     
  name: my-clusterrole
rules:                                 
  - apiGroups: [""]                   
    resources: ["pods"]               
    verbs: ["get", "list"]             
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list"]
# Grant permissions on pods/exec in the cluster.
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["get", "create"]