【问题标题】:aws eks and aws sso RBAC authentication problemaws eks 和 aws sso RBAC 身份验证问题
【发布时间】:2021-04-16 00:57:36
【问题描述】:

我创建了一个新的 AWS SSO(使用内部 IDP 作为身份源,因此不使用 Active Directory)。
我能够登录 AWS CLI、AWS GUI,但无法执行任何 kubectl 操作。

error: You must be logged in to the server (Unauthorized)

我认为这与 RBAC 有关,因为我可以通过 aws eks get-token.

➜ cat ~/.aws/config

[profile team-sso-admin]
sso_start_url=https://team.awsapps.com/start
sso_region=us-west-2
sso_account_id=1111111111
sso_role_name=AdministratorAccess
region=us-west-2
credential_process = aws-vault exec team-sso-admin --json


➜ aws-vault exec team-sso-admin --debug -- zsh --login
➜ env | grep AWS
AWS_VAULT_PROMPT=pass
AWS_VAULT_BACKEND=pass
AWS_VAULT=team-sso-admin
AWS_DEFAULT_REGION=us-west-2
AWS_REGION=us-west-2
AWS_ACCESS_KEY_ID=xxx
AWS_SECRET_ACCESS_KEY=xxx
AWS_SESSION_TOKEN=xxx
AWS_SECURITY_TOKEN=yyy
AWS_SESSION_EXPIRATION=2021-01-11T05:55:51Z
AWS_SDK_LOAD_CONFIG=1

➜ aws sts get-caller-identity --output yaml 

Account: '111111111111'
Arn: arn:aws:sts::111111111111:assumed-role/AWSReservedSSO_AdministratorAccess_6c71da2aa3076dfb/TestUser
UserId: XXX:TestUser

➜ aws eks get-token --cluster-name team-shared-eks --role arn:aws:iam::111111111111:role/aws-reserved/sso.amazonaws.com/us-west-2/AWSReservedSSO_AdministratorAccess_67d1da2aa3076dfb

{"kind": "ExecCredential", "apiVersion": "client.authentication.k8s.io/v1alpha1", "spec": {}, "status": {"expirationTimestamp": "2021-01-11T02:49:11Z", "token": "xxx"}}

kubeconfig

config

- name: arn:aws:eks:us-west-2:111111111111:cluster/team-shared-eks
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - --region
      - us-west-2
      - eks
      - get-token
      - --cluster-name
      - team-shared-eks
      - --role
      - arn:aws:iam::111111111111:role/aws-reserved/sso.amazonaws.com/us-west-2/AWSReservedSSO_AdministratorAccess_67d1da2aa3076dfb
      command: aws

aws-auth

mapRoles: |
    - "groups":
      - "system:bootstrappers"
      - "system:nodes"
      "rolearn": "arn:aws:iam::111111111111:role/team-shared-eks20210110051740674200000009"
      "username": "system:node:{{EC2PrivateDNSName}}"
    - "groups":
      - "system:master"
      "rolearn": "arn:aws:iam::111111111111:role/team-saml-devops"
      "username": "team-devops"
    - "groups":
      - "system:master"
      "rolearn": "arn:aws:iam::111111111111:role/aws-reserved/sso.amazonaws.com/us-west-2/AWSReservedSSO_AdministratorAccess_67d1da2aa3076dfb"
      "username": "team-sso-devops"

team-sso-devops 用户的集群角色绑定

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  creationTimestamp: "2021-01-11T01:37:51Z"
  name: team:sso:devops
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: team-sso-devops
  namespace: default

【问题讨论】:

  • 你当前上下文的命名空间是什么 `kubectl config current-context ?您尝试访问的上下文/命名空间是否相同?

标签: kubernetes amazon-eks aws-sso kubernetes-rbac


【解决方案1】:

选项 #1 - 尝试从 role_arn (source) 中删除 aws-reserved/sso.amazonaws.com/

选项 #2 - 使用 aws-iam-authenticatorofficial docs 提供了如何使用 SSO 和 kubectl (kubeconfig) 的完整示例

【讨论】:

  • @DmitrySemenov 很高兴您解决了问题,哪个选项适合您?
  • 我最近遇到了这个问题,“选项 #1”为我做了,但我也必须删除该区域。
  • @MeirGabay 选项 #1 已经为我解决了。谢谢
【解决方案2】:

客户投票另一个帖子作为答案,但没有发布使用的方法。对于可能遇到这种情况的其他人,我发布了我在相同场景下的工作:

以下来自 blog 的提示:

  1. 使用 AWS 控制台或类似方法来验证角色并获取它的 arn
  2. 修改提供的arn,去掉多余的路径信息。就我而言,我必须从 arn 中删除 aws-reserved/sso.amazonaws.com/us-west-2/。目标是让 arn 像传统角色 arn ex 一样“阅读”:arn:aws:iam::123456789012:role/RoleName
  3. 最后,更新 aws-auth 映射角色以使用这个新的 arn,同时修改用户名以包含会话名称,如下所示:
- "groups":
  - "system:masters"
  "rolearn": "arn:aws:iam::123456789012:role/AWSReservedSSO_AWSAdministratorAccess_randomdigits"
  "username": "AWSAdministratorAccess:{{SessionName}}"

提醒此 mapRoles 条目是添加到现有角色的,而不是删除引导程序条目。

我希望这对其他人有帮助!

【讨论】:

  • 您好...检查//观看...您的答案没有详细说明。插入带有代码和参考的有效响应很有用。得出一个切实有效的解决方案。这个平台不仅仅是任何论坛。我们是世界上其他程序员和开发人员最大的帮助和支持中心。查看社区条款并了解如何发帖;
【解决方案3】:

正如@Meir 所说,无需更新 kube 配置,

  1. 使用以下内容更新配置映射aws-auth: 地图角色:|

    • “组”:
      • “系统:大师” "rolearn": "arn:aws:iam::{{AWS_ACCOUNT}}:role/{{AWSSSO_ROLE}}" “用户名”:“管理员:{{SessionName}}”
  2. 在环境中使用临时 AWS 密钥、秘密和会话令牌

你应该准备好了。

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 2016-10-22
    • 2018-05-22
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多