Como gerencio permissões em namespaces para usuários do IAM em um cluster do Amazon EKS?
Quero gerenciar as permissões de usuário para meus usuários do AWS Identity and Access Management (IAM) em todos os namespaces no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrição
Para gerenciar as permissões do usuário em namespaces em um cluster do Amazon EKS, conclua as seguintes etapas:
- Crie um perfil do IAM para os membros da sua organização assumirem.
- Crie um perfil de controle de acesso baseado em perfil (RBAC) (Role) do Kubernetes e uma vinculação de perfil (RoleBinding) para seu cluster. Para obter mais informações, consulte Uso da autorização do RBAC no site do Kubernetes.
- Use o ConfigMap aws-auth para mapear os perfis do IAM para os perfis e grupos de RBAC.
Observação: quando um usuário ou perfil do IAM cria um cluster, somente o ARN dessa identidade do IAM é adicionado ao ConfigMap aws-auth e tem permissões system:masters. Isso significa que somente o criador do cluster pode adicionar mais usuários ou perfis ao ConfigMap aws-auth.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Crie um perfil do IAM que os membros da sua organização possam assumir
Crie um perfil do IAM para dar aos membros da sua organização acesso a um namespace:
-
Para verificar se um usuário tem permissão para assumir o perfil do IAM, configure a AWS CLI. Em seguida, execute o seguinte comando na estação de trabalho desse usuário:
$ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde{ "Credentials": { "AccessKeyId": "yourAccessKeyId", "SecretAccessKey": "yourSecretAccessKey", "SessionToken": "yourSessionToken", "Expiration": "2020-01-30T01:57:17Z" }, "AssumedRoleUser": { "AssumedRoleId": "yourAssumedRoleId", "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName" } }
Observação: substitua yourAccessKeyId, yourSecretAccessKey, yourSessionToken, yourAssumedRoleId, yourAccountID e yourIAMRoleName por seus valores.
-
Atualize o arquivo kubeconfig para configurar o kubectl do usuário do IAM para sempre usar o perfil ao acessar a API Kubernetes:
$ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName
Observação: substitua yourClusterName, yourAccountID e yourIAMRoleName por seus valores.
Crie um perfil de RBAC do Kubernetes e uma vinculação de perfil para seu cluster
Importante: você deve concluir as etapas a seguir em uma estação de trabalho configurada para acessar o Kubernetes. Você deve ser um criador de cluster ou uma identidade do IAM que já tenha acesso por meio do ConfigMap aws-auth. O perfil do IAM ainda não tem acesso ao cluster.
Vincule um perfil de cluster (ClusterRole) a uma vinculação de perfil. Um perfil de RBAC e uma vinculação de perfil são recursos com namespaces do Kubernetes. No entanto, você não pode vincular um perfil a uma vinculação de perfil de cluster (ClusterRoleBinding).
-
Execute o comando a seguir para listar todos os perfis de cluster integrados e vincular o administrador do perfil de cluster a uma vinculação de perfil para o namespace:
$ kubectl get clusterrole
-
Execute o comando a seguir para ver as permissões associadas ao perfil de administrador do cluster:
$ kubectl describe clusterrole admin
-
Crie um namespace chamado test para conceder acesso aos usuários do IAM como parte do grupo do IAM:
Observação: se você escolher um nome diferente, substitua os valores do parâmetro namespace. Para usar um namespace existente, vá para a etapa 4.$ kubectl create namespace test
-
Para criar um perfil de RBAC do Kubernetes, copie o código a seguir em um novo arquivo YAML (por exemplo, role.yaml):
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: k8s-test-role namespace: test rules: - apiGroups: - "" - "apps" - "batch" - "extensions" resources: - "configmaps" - "cronjobs" - "deployments" - "events" - "ingresses" - "jobs" - "pods" - "pods/attach" - "pods/exec" - "pods/log" - "pods/portforward" - "secrets" - "services" verbs: - "create" - "delete" - "describe" - "get" - "list" - "patch" - "update"
Observação: o perfil de RBAC do Kubernetes permite que os usuários realizem todas as ações na seção verbs.
-
Execute o comando a seguir para criar o perfil de RBAC:
$ kubectl apply -f role.yaml
-
Crie uma vinculação de perfil do Kubernetes. Copie o código a seguir em um novo arquivo YAML (por exemplo, rolebinding.yaml):
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: k8s-test-rolebinding namespace: test subjects: - kind: User name: k8s-test-user roleRef: kind: Role name: k8s-test-role apiGroup: rbac.authorization.k8s.io
Observação: a vinculação de perfil é um recurso com namespace que vincula o perfil de RBAC na seção RoleRef ao usuário na seção subjects. Você não precisa criar o usuário k8s-test-user porque o Kubernetes não tem um tipo de recurso user.
-
Execute o comando a seguir para criar a vinculação de perfil de RBAC:
$ kubectl apply -f rolebinding.yaml
Use o ConfigMap aws-auth para mapear o perfil do IAM para o perfil e o grupo de RBAC
Execute o comando a seguir para associar o perfil do IAM yourIAMRoleName ao usuário Kubernetes k8s-test-user:
$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user
Observação: substitua yourClusterName, yourAccountID e yourIAMRoleName por seus valores.
Teste o acesso ao namespace
- Execute o comando a seguir para testar o acesso ao namespace test:
Observação: o comando anterior cria um trabalho que usa o perfil de RBAC k8s-test-role que você criou.$ kubectl create job hello -n test --image=busybox -- echo "Hello World"
- Execute os seguintes comandos para verificar o pod e o trabalho no namespace test:
$ kubectl get job -n testNAME COMPLETIONS DURATION AGE hello 1/1 4s 15s $ kubectl get pods -n test NAME READY STATUS RESTARTS AGE hello-tpjmf 0/1 Completed 0 2m34s
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um mês
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos