【问题标题】:AWS SSO authorization for EKS fails to call sts:AssumeRoleEKS 的 AWS SSO 授权无法调用 sts:AssumeRole
【发布时间】:2022-01-11 23:22:40
【问题描述】:

我正在迁移到 AWS SSO 以进行 cli 访问,到目前为止,它对除了 kubectl 之外的所有内容都有效。 在进行故障排除时,我遵循了一些指南,这意味着我最终出现了一些货物崇拜行为,而且我显然在我的心智模型中遗漏了一些东西。

aws sts get-caller-identity
{
    "UserId": "<redacted>",
    "Account": "<redacted>",
    "Arn": "arn:aws:sts::<redacted>:assumed-role/AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87/<my username>"
}

kubectl 获取 pod

调用 AssumeRole 操作时发生错误 (AccessDenied):用户:arn:aws:sts:::assumed-role/AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87/ 无权执行:sts:AssumeRole on resource:arn:aws:iam:: :role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87

有趣的是,它似乎试图承担它已经使用的相同角色,但我不知道如何解决它。

~/.aws/config(子集 - 我还有其他配置文件,但它们在这里不相关)

[default]
region = us-east-2
output = json

[profile default]
sso_start_url = https://<redacted>.awsapps.com/start
sso_account_id = <redacted>
sso_role_name = DeveloperReadonly
region = us-east-2
sso_region = us-east-2
output = json

~/.kube/config(移除集群)

apiVersion: v1
contexts:
- context:
    cluster: arn:aws:eks:us-east-2:<redacted>:cluster/foo
    user: ro
  name: ro
current-context: ro
kind: Config
preferences: {}
users:
- name: ro
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - --region
      - us-east-2
      - eks
      - get-token
      - --cluster-name
      - foo
      - --role
      - arn:aws:iam::<redacted>:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87
      command: aws
      env: null

aws-auth mapRoles sn-p

- rolearn: arn:aws:iam::<redacted>:role/AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87
  username: "devread:{{SessionName}}"
  groups:
    - view

我错过了什么明显的东西?我查看了其他有类似问题的 stackoverflow 帖子,但没有一个有 arn:aws:sts:::assumed-role -> arn:aws:iam:::role强> 路径。

【问题讨论】:

标签: amazon-web-services kubectl amazon-eks aws-sso


【解决方案1】:

.aws/config 有一个细微的错误 - [profile default] 没有意义,因此这两个块应该已合并到 [default]。只有非默认配置文件的名称中应包含配置文件。

[default]
sso_start_url = https://<redacted>.awsapps.com/start
sso_account_id = <redacted>
sso_role_name = DeveloperReadonly
region = us-east-2
sso_region = us-east-2
output = json

[profile rw]
sso_start_url = https://<redacted>.awsapps.com/start
sso_account_id = <redacted>
sso_role_name = DeveloperReadWrite
region = us-east-2
sso_region = us-east-2
output = json

我还更改了 .kube/config 以根据配置文件获取令牌,而不是明确命名角色。这修复了 AssumeRole 失败的问题,因为它使用了现有角色。

apiVersion: v1
contexts:
- context:
    cluster: arn:aws:eks:us-east-2:<redacted>:cluster/foo
    user: ro
  name: ro
current-context: ro
kind: Config
preferences: {}
users:
- name: ro
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - --region
      - us-east-2
      - eks
      - get-token
      - --cluster-name
      - foo
      - --profile
      - default
      command: aws
      env: null

我现在可以运行 kubectl config use-context ro 或我定义的其他配置文件(为简洁起见,省略)。

在相关说明中,由于 s3 后端无法处理 sso,因此我在使用较旧的 terraform 版本时遇到了一些麻烦。 aws-vault 为我解决了这个问题

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 2020-06-05
    • 2014-03-24
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多