Como faço para configurar um usuário de SSO para acessar o cluster do Amazon EKS?
Estou usando o Centro de Identidade do AWS IAM (sucessor do AWS Single Sign-On). No entanto, não consigo acessar o cluster do Amazon Elastic Kubernetes Service (Amazon EKS). Quero configurar o usuário de SSO para acessar o cluster.
Resolução
Certifique-se de que os seguintes pré-requisitos foram atendidos:
- Você ativou e configurou o Centro de Identidade do IAM.
- Seu usuário de SSO está associado à conta da AWS em que existe o cluster do Amazon EKS.
Observação: As etapas a seguir usam o kubectl para acessar o cluster. Depois de configurar o acesso ao kubectl, você pode ver os recursos do cluster no console do Amazon EKS fazendo login como usuário do Centro de Identidade do IAM.
Observação: Se você receber erros ao executar comandos na AWS Command Line Interface (AWS CLI), confirme se você está executando uma versão recente da AWS CLI.
Configure a AWS CLI para usar o usuário de SSO
Crie um perfil da AWS Command Line Interface (AWS CLI) que use a autenticação SSO ao executar os comandos da AWS CLI. Para obter mais informações, consulte Configurar a AWS CLI para usar o Centro de Identidade do AWS IAM (sucessor do AWS Single Sign-On).
Veja a seguir um exemplo de configuração da autenticação SSO da AWS CLI usando o procedimento automático:
aws configure sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1
A AWS CLI tentará abrir seu navegador padrão e iniciar o processo de login da conta do Centro de Identidade do IAM.
Attempting to automatically open the SSO authorization page in your default browser.
Se a AWS CLI não conseguir abrir o navegador, você receberá a seguinte mensagem com instruções sobre como iniciar manualmente o processo de login:
If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-2.amazonaws.com/ Then enter the code: XXXX-XXXX The only AWS account available to you is: 123456789999 Using the account ID 123456789999 The only role available to you is: ViewOnlyAccess Using the role name "ViewOnlyAccess" CLI default client Region [us-east-2]: CLI default output format [json]: CLI profile name [ViewOnlyAccess-123456789999]: test-profile To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile test-profile
Agora você pode executar os comandos da AWS CLI usando esse novo perfil. Essa configuração permite que o usuário de SSO faça o seguinte:
- Autenticar-se com a AWS.
- Adotar um perfil do AWS Identity and Management (IAM) criado pelo Centro de Identidade do IAM.
Exemplo:
$ aws sts get-caller-identity { "UserId": "AROAXMRV33N1234567890:test-user", "Account": "123456789999", "Arn": "arn:aws:sts::123456789999:assumed-role/AWSReservedSSO_ViewOnlyAccess_05a3861234567890/test-user" }
Configure o contexto do kubectl para usar o perfil da AWS CLI criado para autenticações SSO
O kubectl usa comandos da AWS CLI. Dessa forma, você deve especificar o novo perfil da AWS CLI no contexto atual do kubectl. Para atualizar o contexto do kubectl e usar o novo perfil, execute o seguinte comando:
aws eks update-kubeconfig --name $CLUSTER-NAME --profile test-profile
Depois de executar esse comando, o kubectl usará o perfil test-profile para a autenticação com o servidor da API do cluster.
Criar uma versão do ARN excluindo o diretório
Os perfis do IAM mapeados no aws-auth ConfigMap não incluem o caminho. Por padrão, o nome do recurso da Amazon (ARN) do perfil do IAM associado ao seu usuário de SSO inclui o caminho.
Exemplo:
arn:aws:iam::123456789999:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_ViewOnlyAccess_05a3861234567890
Se você adicionar o ARN completo ao aws-auth ConfigMap, o usuário de SSO não será autenticado. Não será possível acessar o cluster usando o usuário de SSO. Certifique-se de criar uma versão desse ARN sem incluir o caminho. Essa versão deve ser usada na próxima etapa.
Exemplo:
arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Também é possível obter o perfil do IAM sem o caminho, executando os seguintes comandos:
ssorole=$(aws sts get-caller-identity --query Arn --output text --profile test-profile | cut -d/ -f2) account=$(aws sts get-caller-identity --query Account --output text --profile test-profile) echo "arn:aws:iam::$account:role/$ssorole" arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Adicione o ARN ao aws-auth ConfigMap
Para que o usuário de SSO acesse o cluster do Amazon EKS, o perfil do IAM associado ao usuário de SSO deve ser mapeado para as permissões de RBAC do Kubernetes. Para fazer isso, inclua o ARN do perfil do IAM sem o caminho no aws-auth ConfigMap. Em seguida, mapeie-o para o usuário do Kubernetes e os grupos vinculados ao Kubernetes Role e RoleBinding (ou ClusterRole e ClusterRoleBinding). Use as instruções de qualquer uma das seções a seguir com base no seu caso de uso.
Usuário de SSO com permissões de administrador em todo o cluster
Por padrão, o grupo system:masters do Kubernetes fornece permissões de administrador para todo o cluster. Esse grupo está vinculado ao cluster-admin do ClusterRole e ao cluster-admin do ClusterRoleBinding. Dessa forma, não é necessário precisa criar os objetos ClusterRole e ClusterBindingRole. É necessário apenas mapear o perfil do IAM sem caminho para o grupo system:masters.
Para fazer isso, edite o aws-auth ConfigMap:
kubectl edit configmap aws-auth -n kube-system
Em seguida, adicione o seguinte:
- groups: - system:masters rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: cluster-admin
Usuário de SSO com permissões de leitura vinculadas ao namespace
Nesse caso, é necessário criar um objeto Role e um RoleBinding com permissões de leitura em um namespace específico. Em seguida, vincule esses objetos ao perfil do IAM usando um nome de usuário ou nome de grupo personalizado no aws-auth ConfigMap.
1. Crie um objeto Role do Kubernetes que fornece somente permissões de leitura no namespace desejado:
cat << EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: $MY-NAMESPACE name: reader-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["*"] verbs: ["get", "watch", "list"] EOF
Observação:
- Substitua $MY-NAMESPACE pelo nome do namespace.
- Substitua reader-role pelo nome do usuário personalizado.
2. Crie um objeto RoleBinding do Kubernetes que vincula as permissões do perfil do Kubernetes ao grupo read-only-group:
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: reader-binding namespace: MY-NAMESPACE subjects: - kind: Group name: read-only-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: reader-role apiGroup: rbac.authorization.k8s.io EOF
3. Mapeie o ARN do perfil do IAM sem caminho para o grupo read-only-group no aws-auth ConfigMap.
É possível mapear o perfil do IAM automaticamente, executando o seguinte comando:
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 \ --group read-only-group \ --no-duplicate-arns \ --username read-only-user1
Observação: substitua $CLUSTER-NAME e $REGION pelo nome do cluster e da região, respectivamente. Ou, mapeie o perfil do IAM manualmente. Para fazer isso, edite o aws-auth ConfigMap:
kubectl edit configmap aws-auth -n kube-system
Em seguida, adicione o seguinte na seção MapRules:
- groups: - read-only-group rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: read-only-user1
Importante: o perfil do IAM deve aparecer somente uma vez no aws-auth ConfigMap. Portanto, certifique-se de que somente uma seção inclua o perfil do IAM.
Agora é possível usar o usuário de SSO para acessar o cluster:
$ kubectl get pod NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 24h
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há 10 meses
- AWS OFICIALAtualizada há 2 meses
- AWS OFICIALAtualizada há 2 meses
- AWS OFICIALAtualizada há um ano