Como gerencio permissões em namespaces para usuários do IAM em um cluster do Amazon EKS?

5 minuto de leitura
0

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:

  1. Crie um perfil do IAM para os membros da sua organização assumirem.
  2. 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.
  3. 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:

  1. Crie um perfil para delegar permissões a um usuário do IAM.

  2. 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.

  3. 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).

  1. 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
  2. Execute o comando a seguir para ver as permissões associadas ao perfil de administrador do cluster:

    $ kubectl describe clusterrole admin
  3. 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
  4. 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.

  5. Execute o comando a seguir para criar o perfil de RBAC:

    $ kubectl apply -f role.yaml
  6. 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.

  7. 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

  1. Execute o comando a seguir para testar o acesso ao namespace test:
    $ kubectl create job hello -n test --image=busybox -- echo "Hello World"
    Observação: o comando anterior cria um trabalho que usa o perfil de RBAC k8s-test-role que você criou.
  2. 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
AWS OFICIAL
AWS OFICIALAtualizada há 10 meses