跳至内容

如何配置 SSO 用户以访问我的 Amazon EKS 集群?

3 分钟阅读
0

我想配置 AWS IAM Identity Center 用户以访问 Amazon Elastic Kubernetes Service (Amazon EKS) 集群。

解决方法

先决条件

  • 必须启用并配置 IAM Identity Center
  • SSO 用户必须与包含 EKS 集群的 AWS 账户相关联
  • EKS 集群必须支持访问条目(平台版本 eks.2 或更高版本)

要配置 SSO 用户以访问您的 Amazon EKS 集群,请完成以下步骤:

为 SSO 身份验证配置 AWS CLI

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

配置 AWS CLI 以使用 SSO 身份验证,这样 SSO 用户就可以进行身份验证并代入 AWS Identity and Access Management (IAM) 角色。

有关使用 IAM Identity Center 配置 AWS CLI 的更多信息,请参阅将 AWS CLI 与 IAM Identity Center 集成

配置 kubectl 以使用 SSO 配置文件

要配置 kubectl 以使用您的 SSO 配置文件,请运行以下 AWS CLI 命令 update-kubeconfig

aws eks update-kubeconfig --name your-cluster-name --profile your-sso-profile

**注意:**将 your-cluster-name 替换为您的 EKS 集群名称。将 your-sso-profile 替换为您的 SSO 配置文件名称。

验证集群身份验证模式

要验证集群身份验证模式,请运行以下 AWS CLI 命令 describe-cluster

aws eks describe-cluster --name your-cluster-name --query "cluster.accessConfig.authenticationMode" --profile your-sso-profile

**注意:**将 your-cluster-name 替换为您的 EKS 集群名称。将 your-sso-profile 替换为您的 SSO 配置文件名称。

如果输出显示 APIAPI_AND_CONFIG_MAP,则表示访问条目已开启。如果输出显示 CONFIG_MAP,则仅可使用 aws-auth ConfigMap 方法。

使用访问条目配置访问权限

选择以下权限级别之一:

授予集群范围的管理员权限

完成以下步骤:

  1. 打开 Amazon EKS 控制台
  2. 在导航窗格中,选择 Clusters(集群)。
  3. 选择您的集群。
  4. 选择 Access(访问)选项卡。
  5. Access entries(访问条目)部分中,选择 Create access entry(创建访问条目)。
  6. 对于 IAM principal ARN(IAM 主体 ARN),请输入不含路径组件的 SSO 角色 ARN。
  7. 对于 Type(类型),选择 Standard(标准)。
  8. 选择 Next(下一步)。
  9. 对于 Policy name(策略名称),选择 AmazonEKSClusterAdminPolicy
  10. 对于 Access scope(访问范围),选择 Cluster(集群)。
  11. 选择 Next(下一步),然后选择 Create(创建)。

授予特定于命名空间的权限

完成以下步骤:

  1. 打开 Amazon EKS 控制台
  2. 在导航窗格中,选择 Clusters(集群)。
  3. 选择您的集群。
  4. 选择 Access(访问)选项卡。
  5. Access entries(访问条目)部分中,选择 Create access entry(创建访问条目)。
  6. 对于 IAM principal ARN(IAM 主体 ARN),请输入不含路径组件的 SSO 角色 ARN。
  7. 对于 Type(类型),选择 Standard(标准)。
  8. 选择 Next(下一步)。
  9. 对于 Policy name(策略名称),请根据您的需求选择 AmazonEKSAdminViewPolicyAmazonEKSEditPolicy
  10. 对于 Access scope(访问范围),选择 Namespace(命名空间)。
  11. 对于 Namespace(命名空间),输入您的命名空间名称。
  12. 选择 Next(下一步),然后选择 Create(创建)。

有关访问条目的更多信息,请参阅使用 EKS 访问条目授予 IAM 用户对 Kubernetes 的访问权限

使用 aws-auth ConfigMap 配置访问权限

**重要事项:**当您将 aws-auth 与 IAM Identity Center 一起使用时,请使用不含路径组件的 IAM 角色 ARN。例如,如果您的角色 ARN 是 arn:aws:iam::123456789012:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_AdministratorAccess_1234567890abcdef,请移除路径以使用 arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef

如果您的集群不支持访问条目,或者您偏好使用 aws-auth ConfigMap 方法,请完成以下步骤:

授予集群范围的管理员权限

创建包含以下配置的 YAML 文件:

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef
      username: sso-admin-user
      groups:
        - system:masters

**注意:**将 rolearn 值替换为不含路径组件的 SSO 角色 ARN。将 sso-admin-user 替换为您的首选用户名。

应用配置:

kubectl apply -f aws-auth-configmap.yaml

授予特定于命名空间的权限

为特定于命名空间的访问权限创建 Role 和 RoleBinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: sso-user-role
  namespace: your-namespace
rules:
- apiGroups: [""]
  resources: ["pods", "services", "configmaps"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: sso-user-rolebinding
  namespace: your-namespace
subjects:
- kind: User
  name: sso-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: sso-user-role
  apiGroup: rbac.authorization.k8s.io

**注意:**将 your-namespace 替换为您的命名空间名称。将 sso-user 替换为您在 aws-auth ConfigMap 中指定的用户名。

应用配置:

kubectl apply -f role-rolebinding.yaml

更新 aws-auth ConfigMap 以将 SSO 角色映射到用户名:

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: arn:aws:iam::123456789012:role/AWSReservedSSO_AdministratorAccess_1234567890abcdef
      username: sso-user

**注意:**将 rolearn 值替换为不含路径组件的 SSO 角色 ARN。

应用配置:

kubectl apply -f aws-auth-configmap.yaml

有关 aws-auth ConfigMap 的更多信息,请参阅使用 ConfigMap 授予 IAM 用户对 Kubernetes 的访问权限

验证访问权限

要验证 SSO 用户是否可以访问集群,请运行以下命令:

kubectl get nodes

如果该命令返回节点列表,则表示 SSO 用户已成功通过集群身份验证。

相关信息

集群访问管理

AWS 官方已更新 5 个月前