
Uma ferramenta para usar credenciais AWS IAM para autenticar em um cluster Kubernetes
Uma ferramenta para usar credenciais do AWS IAM para autenticar em um cluster Kubernetes. O trabalho inicial nesta ferramenta foi conduzido pela Heptio. O projeto recebe contribuições de vários engenheiros da comunidade e atualmente é mantido pela Heptio e pelos Engenheiros de OSS da Amazon EKS.
Se você é um administrador executando um cluster Kubernetes na AWS, você já precisa gerenciar credenciais do AWS IAM para provisionar e atualizar o cluster. Ao usar o AWS IAM Authenticator para Kubernetes, você evita ter que gerenciar uma credencial separada para acesso ao Kubernetes. O AWS IAM também fornece uma série de propriedades interessantes, como uma trilha de auditoria fora de banda (via CloudTrail) e a aplicação de 2FA/MFA.
Se você está construindo um instalador de Kubernetes na AWS, o AWS IAM Authenticator para Kubernetes pode simplificar seu processo de bootstrap.
Você não precisará de alguma forma contrabandear sua credencial de administrador inicial de forma segura para fora do seu cluster recém-instalado.
Em vez disso, você pode criar uma role dedicada KubernetesAdmin no momento do provisionamento do cluster e configurar o Authenticator para permitir logins de administrador do cluster.
Assumindo que você tem um cluster em execução na AWS e deseja adicionar suporte ao AWS IAM Authenticator para Kubernetes, você precisa:
Primeiro, você deve criar uma ou mais roles IAM que serão mapeadas para usuários/grupos dentro do seu cluster Kubernetes. A maneira mais fácil de fazer isso é fazer login no Console da AWS:
Isso criará uma role IAM sem permissões que pode ser assumida por usuários/roles autorizados em sua conta. Anote o Amazon Resource Name (ARN) da sua role, que você precisará abaixo.
Você também pode fazer isso em uma única etapa usando a AWS CLI em vez do Console da AWS:
# get your account ID
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
# define a role trust policy that opens the role to users in your account (limited by IAM policy)
POLICY=$(echo -n '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::'; echo -n "$ACCOUNT_ID"; echo -n ':root"},"Action":"sts:AssumeRole","Condition":{}}]}')
# create a role named KubernetesAdmin (will print the new role's ARN)
aws iam create-role \
--role-name KubernetesAdmin \
--description "Kubernetes administrator role (for AWS IAM Authenticator for Kubernetes)." \
--assume-role-policy-document "$POLICY" \
--output text \
--query 'Role.Arn'
Também pode ignorar este passo e usar:
mapUsers abaixo).mapRoles abaixo).O servidor destina-se a ser executado em cada um dos seus nós master como um DaemonSet com host networking, para que possa expor uma porta localhost.
Para um exemplo de configuração de ConfigMap e DaemonSet, ver deploy/example.yaml.
Antes de o aplicar, atualize estes valores para o seu cluster:
arn:aws:iam::000000000000:...) em config.yaml.clusterID com um valor único para o seu cluster.Depois, implemente-o:
kubectl apply -f deploy/example.yaml
kubectl -n kube-system rollout status daemonset/aws-iam-authenticator
kubectl -n kube-system get pods -l k8s-app=aws-iam-authenticator
Quando o pod estiver em execução num nó de control-plane, o aws-iam-authenticator server criará o kubeconfig do webhook no host em /etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml (ou no caminho configurado através de --generate-kubeconfig).
Se estiver a construir um instalador automatizado, também pode pré-gerar facilmente os ficheiros de certificado, chave e kubeconfig do webhook usando aws-iam-authenticator init.
Este comando irá gerar ficheiros e colocá-los nos diretórios de saída configurados.
Pode executá-lo em cada nó master antes de iniciar o API server. Também pode gerá-los antes de provisionar os nós master e instalá-los nos caminhos de host apropriados.
Se não pré-gerar os ficheiros, o aws-iam-authenticator server irá gerá-los a pedido.
Isto funciona, mas requer que reinicie o seu Kubernetes API server após a instalação.
A API do Kubernetes integra-se com o AWS IAM Authenticator for Kubernetes usando um webhook de autenticação por token.
Quando executa aws-iam-authenticator server, este irá gerar um ficheiro de configuração de webhook e guardá-lo no sistema de ficheiros do host.
Terá de adicionar um único flag adicional à configuração do seu API server:
--authentication-token-webhook-config-file=/etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml
Em muitos clusters, o servidor de API é executado como um pod estático.
Você pode adicionar a flag a /etc/kubernetes/manifests/kube-apiserver.yaml.
Certifique-se de que o diretório do host /etc/kubernetes/aws-iam-authenticator/ esteja montado no seu pod do servidor de API.
Você também pode precisar reiniciar o daemon kubelet no seu nó master para que ele carregue a definição atualizada do pod estático:
systemctl restart kubelet.service
O comportamento padrão do servidor é obter mapeamentos exclusivamente dos
campos mapUsers e mapRoles do seu arquivo de configuração. Consulte Formato
Completo de Configuração abaixo para obter detalhes.
Usando a flag --backend-mode, você pode configurar o servidor para obter
mapeamentos de dois backends adicionais: um ConfigMap no estilo EKS
(--backend-mode=EKSConfigMap) ou recursos personalizados IAMIdentityMapping
(--backend-mode=CRD). O backend padrão, o arquivo de configuração do servidor
que é montado pelo pod do servidor, corresponde a --backend-mode=MountedFile.