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"] |
|
|
|
Service |
resources: ["services"] |
apiGroups: [""] |
|
|
ConfigMap |
resources: ["configmaps"] |
apiGroups: [""] |
|
|
Secret |
resources: ["secrets"] |
apiGroups: [""] |
|
|
PersistentVolume |
resources: ["persistentvolumes"] |
apiGroups: [""] |
|
|
PersistentVolumeClaim |
resources: ["persistentvolumeclaims"] |
apiGroups: [""] |
|
|
Namespace |
resources: ["namespaces"] |
apiGroups: [""] |
|
|
Deployment |
resources: ["deployments"] |
apiGroups: ["apps"] |
|
|
DaemonSet |
resources: ["daemonsets"] |
apiGroups: ["apps"] |
|
|
StatefulSet |
resources: ["statefulsets"] |
apiGroups: ["apps"] |
|
|
Ingress |
resources: ["ingresses"] |
apiGroups: ["networking.k8s.io"] |
|
|
NetworkPolicy |
resources: ["networkpolicies"] |
apiGroups: ["networking.k8s.io"] |
|
|
Job |
resources: ["jobs"] |
apiGroups: ["batch"] |
|
|
CronJob |
resources: ["cronjobs"] |
apiGroups: ["batch"] |
|
|
StorageClass |
resources: ["storageclasses"] |
apiGroups: ["storage.k8s.io"] |
|
|
HorizontalPodAutoscaler |
resources: ["horizontalpodautoscalers"] |
apiGroups: ["autoscaling"] |
|
Procedimento
Aplique permissões de RBAC personalizadas pelo console do ACK ou via kubectl.
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
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Role, clique na aba Cluster Role. Em seguida, clique em Create.
-
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
Faça login no console do ACK. No painel de navegação à esquerda, clique em Authorizations.
-
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.
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
-
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"] -
Execute o comando a seguir para implantar a ClusterRole:
kubectl apply -f my-clusterrole.yaml
Etapa 2: Obter o ID do sujeito
Para conceder permissões a um usuário RAM, obtenha o ID desse usuário. Para mais informações, consulte Visualizar os detalhes de um usuário RAM.
Para conceder permissões a uma função RAM, obtenha o ID dessa função. Para mais informações, consulte Visualizar informações sobre uma função RAM.
Etapa 3: Atribuir a ClusterRole personalizada
-
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 -
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 . 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"]