Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Restringir operações de recursos em um cluster usando RBAC personalizado

Última atualização: Jun 27, 2026

Se as ClusterRoles predefinidas no console do Container Service for Kubernetes (ACK) não atenderem às suas necessidades, crie Roles e ClusterRoles personalizadas. Essa abordagem permite implementar um controle de acesso baseado em função (RBAC) granular e ajustar as permissões conforme necessário. Este tópico descreve como configurar essas permissões personalizadas.

Políticas de RBAC personalizadas

Para implementar um controle de acesso refinado sobre os recursos do seu cluster ACK, crie manifestos YAML personalizados para Roles e ClusterRoles. Utilize as informações de política dos recursos a seguir como referência.

Role (escopo de namespace)

O exemplo yaml a seguir define uma Role chamada my-role. Esta Role concede permissões de somente leitura para Pods 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)

O exemplo yaml abaixo define uma ClusterRole chamada my-clusterrole. Esta ClusterRole concede permissões de somente leitura para Pods e Services em todo o cluster.

Uma ClusterRole é um recurso com escopo de cluster. Se você especificar um namespace no yaml, ele será ignorado.
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"]

Assim, você pode conceder controle de acesso granular sobre os recursos do cluster para usuários RAM ou funções RAM.

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", "exec", "proxy"]

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) suporta apenas a vinculação de 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 (escopo de cluster) 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.

    • Para conceder permissões a 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 conceder permissões a uma função RAM: Clique na aba RAM Role, localize a função RAM desejada e clique em Modify Permissions para acessar a página Gerenciamento de Permissões.

  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, selecione Custom. Na lista suspensa exibida, escolha my-clusterrole e clique em Submit.

kubectl

Etapa 1: Criar uma ClusterRole personalizada

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

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: my-clusterrole
    # namespace: default        # A namespace is not required for a ClusterRole and is ignored if specified.
    rules:
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["services"]
        verbs: ["get", "list", "watch"]
  2. Execute o comando a seguir 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 chamado my-clusterrole-binding.yaml com o seguinte manifesto yaml.

    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.
    roleRef:
      kind: ClusterRole
      name: my-clusterrole
      apiGroup: rbac.authorization.k8s.io
  2. Execute o comando a seguir para implantar o ClusterRoleBinding:

    kubectl apply -f my-clusterrole-binding.yaml

Após conceder as permissões personalizadas ao usuário RAM ou função RAM desejados, obtenha o arquivo kubeconfig do cluster e use o kubectl para conectar-se ao cluster para verificar 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 no 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 o 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"]