Não é possível conceder a funções adicionais da AWS a capacidade de interagir com meu cluster

Não é possível conceder a funções adicionais da AWS a capacidade de interagir com meu cluster

Estou tentando aprender AWS EKS e seguindoConceitos básicos do Amazon EKS – AWS Management Console e AWS CLIguia passo a passo, exceto para a região que mudei para us-east-1.

Consigo criar meu cluster - my-clustermas quando tento configurar meu computador, que é uma instância EC2 (T2.Micro) para se comunicar com o cluster, recebo error: You must be logged in to the server (Unauthorized)um erro. Em um mergulho profundo, descobri que a função EC2 (ARN - arn:aws:iam::123456789012:role/ec2-admin) precisa assumir a função que criou o cluster (ARN - arn:aws:iam::123456789012:role /myAmazonEKSClusterRole). Também fiz essas modificações na definição da função, modificando o relacionamento de confiança para myAmazonEKSClusterRoleobter. arn:aws:sts::123456789012:assumed-role/myAmazonEKSClusterRole/test-sessionDepois disso, sou capaz de executar aws ekscomandos, mas kubectlos comandos ainda estão me escapando.

Para executar kubectlcomandos, estou tentando seguir as etapas emGerenciando usuários ou funções do IAM para seu cluster. No entanto, eles estão me pedindo para fazer alterações no aws-auth-cm.yamlarquivo configMap, o que não posso fazer porque não consigo executar kubectl applyo comando.

Meu kubeconfigarquivo -

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <cert>
  name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
contexts:
- context:
    cluster: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
    user: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
  name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
current-context: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
kind: Config
preferences: {}
users:
- name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - --region
      - us-east-1
      - eks
      - get-token
      - --cluster-name
      - my-cluster
      command: aws

O conteúdo do arquivo aws-auth-cm.yaml depois que fiz as alterações é

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
          #    - rolearn: <ARN of instance role (not instance profile)>
          #      username: system:node:{{EC2PrivateDNSName}}
          #      groups:
          #        - system:bootstrappers
          #        - system:nodes
    - rolearn: arn:aws:iam::375712918983:role/myAmazonEKSClusterRole
      username: myAmazonEKSClusterRole
      groups:
        - system:masters

Você pode ajudar com isso ou dar algumas dicas?

Por favor, deixe-me saber se você tem alguma dúvida.

Responder1

Você vai querer uma das três coisas; qualquer:

  • assuma o arn:aws:iam::123456789012:role/myAmazonEKSClusterRoleem uma sessão de terminal de forma que o aws eks get-tokenrun by kubectlse comporte corretamente
  • crie um perfil awscli que assuma a arn:aws:iam::123456789012:role/myAmazonEKSClusterRolefunção e atualize args:para incluir[..., "--profile", "whatever-you-call-that-profile",...]
  • ou assuma a função em um terminal, execute aws eks get-tokene coloque essa credencial estática em seu kubeconfig, pois parece que você não precisa da credencial por muito tempo apenas para atualizar o ConfigMap

Para o primeiro, quero dizer aws sts assume-role --role-arn arn:aws:iam::123456789012:role/myAmazonEKSClusterRole ... | tee sts-creds.jsone então export AWS_ACCESS_KEY_ID= AWS_SECRET_KEY= AWS_SESSION_TOKEN=com base no conteúdo desse json

Para o segundo, quero dizer:

$ cat >> $HOME/.aws/config <<FOO
[profile my-cluster]
assume_role = arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
source_profile = whatever
; or credential_source = whatever
FOO

de acordo comesta documentação

informação relacionada