AWS-IAM身份验证器和EKS

时间:2020-04-03 03:09:39

标签: kubernetes amazon-eks aws-iam-authenticator

我已经使用适当的configMap部署了一个测试EKS群集,并且SSO所在的用户可以通过导出会话凭据(AWS_ACCESS_KEY_ID,SECRET_ACCESS_KEY_ID,AWS_SESSION_TOKEN等)来访问群集,并拥有在其终端中安装了aws-iam-authenticator客户端。当用户尝试使用aws-iam-authenticator使用aws sso中存储的~/.aws/config配置文件时,就会出现问题。运行任何kubectl命令时收到以下错误:

 $ kubectl get all
    could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

我已经在本地计算机(AWS CLI v2)上对此进行了测试,但没有获得任何成功。我已通过~/.aws/config导出了在export AWS_PROFILE=User1文件中找到的AWS概要文件,并且运行aws sts get-caller-identity正确显示了正在导出的概要文件。我已经在多个命名的配置文件之间切换,并且每个配置文件都具有正确的标识和权限,但是,在运行任何kubectl命令时,都会出现上述错误。我也尝试过符号链接config-> credentials,但是没有运气。它的唯一工作方式是将access_key,secret_key和session_token导出到环境变量。

我想我可以忍受粘贴来自AWS SSO的动态凭据,但是我对解决方案的需求不会让我放弃:(。我一直在关注这个github {{3 }}但没有运气,我设置的kube配置文件已根据AWS文档确定。

我怀疑aws-iam-authenticator服务器部署可能有些问题,但是pod日志中没有任何显示。这是github issue工具的一个片段,我think正确地遵循了该片段,但是由于忘记了原因,我确实跳过了步骤3:

Kubernetes API与AWS IAM Authenticator集成为 Kubernetes使用令牌身份验证Webhook当你跑步 aws-iam-authenticator服务器,它将生成一个webhook配置 文件并将其保存到主机文件系统中。您需要添加一个 您的API服务器配置的其他标志:

Kube配置文件

apiVersion: v1
clusters:
- cluster:
    server: <endpoint-url>
    certificate-authority-data: <base64-encoded-ca-cert>
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "eks-cluster-name"
        - "-r"
        - "EKS-ADMIN-ROLE:ARN:::::::"
      env:
        - name: AWS_PROFILE
          value: "USER"

1 个答案:

答案 0 :(得分:2)

AWS CLI v2现在是supports AWS SSO,因此我决定更新Kube配置文件以使用aws命令而不是aws-iam-authenticator命令。现在,通过SSO进行认证变得轻而易举!看来AWS希望摆脱必须拥有其他二进制文件才能对EKS集群进行身份验证的感觉,这对我来说很好!希望这可以帮助。