作者:SRE运维博客

博客地址: https://www.cnsre.cn/

文章地址:https://www.cnsre.cn/posts/211203931498/

相关话题:https://www.cnsre.cn/tags/aws/


因为创建 Amazon EKS 集群时,IAM 用户或角色会自动在集群的 RBAC 配置中被授予 system:masters 权限。例如,IAM 用户或角色可以是创建集群的联合身份用户。如果使用不属于 aws-auth ConfigMapIAM 用户或角色访问 Amazon EKS 控制台,则无法看到 Kubernetes 工作负载。也不会看到集群的概览详细信息。所以要向其他 AWS 用户或角色授予与集群交互的能力,您必须在 Kubernetes 中编辑 aws-auth ConfigMap

因为部门有不通的角色,所以想基于不通的角色分配不同的权限,下面是记录添加一个对 EKS 只有只读权限的 AIM 用户。

{{< notice info "注意:" >}}

如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您使用的是最新版的 AWS CLI

{{< /notice >}}

为 IAM 用户或角色配置权限

  • 要查找具有主要集群配置权限的集群创建者或管理员角色,请在 AWS CloudTrail 中搜索 CreateCluster API 调用。然后,检查此 API 调用的 UserIdentity 部分。
  • 识别需要权限的 IAM 用户或角色。
  • 确认已识别的 IAM 用户或角色有权在 AWS 管理控制台中查看所有集群的节点和工作负载。

使用 aws-auth ConfigMap 将 IAM 用户或角色映射到 RBAC 角色和组

{{< notice info "重要提示:" >}}

在连接 Amazon EKS API 服务器之前,安装配置最新版本的 AWS CLI。

{{< /notice >}}

获取 AWS CLI 用户或角色的配置:

 aws sts get-caller-identity

输出将返回 IAM 用户或角色的 Amazon 资源名称 (ARN)。例如:

{
"UserId": "XXXXXXXXXXXXXXXXXXXXX",
"Account": "XXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

确认 ARN 与具有主要集群配置访问权限的集群创建者或管理员相匹配。如果 ARN 与集群创建者或管理员不匹配,请联系集群创建者 aws-auth ConfigMap。

添加对 EKS 集群具有只读访问权限的 IAM 用户

{{< notice info "注意:" >}}

要允许超级用户访问权限以对任何资源执行任何操作,请添加 system:masters 而非 system:bootstrapperssystem:nodes。有关更多信息,请参阅 Kubernetes 网站上的默认角色和角色绑定

{{< /notice >}}

创建 rbac.yaml

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: reader
rules:
- apiGroups: ["*"]
resources: ["deployments", "configmaps", "pods", "secrets", "services"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: reader
subjects:
- kind: Group
name: reader
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: reader
apiGroup: rbac.authorization.k8s.io

要添加 IAM 用户或角色,请完成以下步骤之一。

添加 IAM 用户到 mapUsers

...
mapUsers: |
- userarn: arn:aws:iam::424432388155:user/developer
username: developer
groups:
- reader
...

创建 RBAC

kubectl apply -f rbac.yaml

在AWS 中创建 AmazonEKSDeveloperPolicy 策略以让用户在 AWS 管理控制台中查看所有集群的节点和工作负载

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DescribeNodegroup",
"eks:ListNodegroups",
"eks:DescribeCluster",
"eks:ListClusters",
"eks:AccessKubernetesApi",
"ssm:GetParameter",
"eks:ListUpdates",
"eks:ListFargateProfiles"
],
"Resource": "*"
}
]
}
  • 创建eks-developerIAM 组并附加AmazonEKSDeveloperPolicy策略
  • 创建developer用户
  • 添加developer个人资料aws configure --profile developer
  • 添加到aws-authconfigmapdeveloper用户 ARN。
kubectl edit -n kube-system configmap/aws-auth
...
mapUsers: |
- userarn: arn:aws:iam::424432388155:user/developer
username: developer
groups:
- reader
...
  • developer用户配置 kubectl 上下文
aws eks --region us-east-1 update-kubeconfig --name eks --profile developer
  • 检查 kubeconfig
kubectl config view --minify
  • 检查权限
kubectl auth can-i get pods
kubectl auth can-i create pods
kubectl run nginx --image=nginx

创建具有管理员访问权限的 IAM 角色并由 IAM 用户代入此角色。

  • 创建AmazonEKSAdminPolicy策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "eks.amazonaws.com"
}
}
}
]
}
  • 创建eks-admin角色并附加AmazonEKSAdminPolicy策略
  • 描述eks-admin角色
aws iam get-role --profile terraform --role-name eks-admin
  • 创建AmazonEKSAssumePolicy允许承担角色的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": "arn:aws:iam::424432388155:role/eks-admin"
}
]
}
  • 创建manager用户以使用eks-admin角色
  • 添加manager个人资料aws configure --profile manager
  • 检查manager用户是否可以承担eks-admin角色
aws sts assume-role --role-arn arn:aws:iam::424432388155:role/eks-admin --role-session-name manager-session --profile manager
  • 为创建 EKS 集群的用户更新 kubeconfig
aws eks --region us-east-1 update-kubeconfig --name eks --profile terraform
  • 添加到aws-authconfigmapeks-admin角色 ARN。
 kubectl edit -n kube-system configmap/aws-auth
...
- rolearn: arn:aws:iam::424432388155:role/eks-admin
username: eks-admin
groups:
- system:masters
...
  • 创建eks-admin配置文件以承担角色vim ~/.aws/config
[profile eks-admin]
role_arn = arn:aws:iam::424432388155:role/eks-admin
source_profile = manager
  • manager用户配置 kubectl 上下文以自动承担eks-admin角色
aws eks --region us-east-1 update-kubeconfig --name eks --profile eks-admin
  • 检查 kubeconfig
kubectl config view --minify
  • 检查经理是否具有 EKS 集群的管理员访问权限
kubectl auth can-i "*" "*"

作者:SRE运维博客

博客地址: https://www.cnsre.cn/

文章地址:https://www.cnsre.cn/posts/211203931498/

相关话题:https://www.cnsre.cn/tags/aws/


AWS EKS 添加IAM用户角色的更多相关文章

  1. Maven-007-Nexus 用户添加,用户角色分配,用户修改密码,管理员重置用户密码

    配置好 maven nexus 私服后,默认的用户可通过查看[Users]查看当前私服中所存在的用户,如下图所示:

  2. AWS系列-创建 IAM 用户

    创建 IAM 用户(控制台) 官方文档 https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/introduction.html 通过 AWS ...

  3. Vcenter server 5.5添加用户角色及分配权限

    角色:各种角色定义了对此角色可操作细节的权限组合. 用户权限:用户权限是对ESXi 5.0中的对象实例(如ESXi 5.0主机,虚拟机,存储,网络等)进行权限的分配.通过在这些对象上绑定“用户+角色” ...

  4. jenkins在aws eks中的CI/CD及slave

    本文档不讲解jenkins的基础用法,主要讲解配合k8s的插件,和pipeline的用途和k8s ci/cd的流程. 以及部署在k8s集群内和集群外的注意事项. 1.准备工作 以下在整个CI/CD流程 ...

  5. 【k8s】在AWS EKS部署并通过ALB访问k8s Dashboard保姆级教程

    本教程适用范围 在AWS上使用EKS服务部署k8s Dashboard,并通过ALB访问 EKS集群计算节点采用托管EC2,并使用启动模板. 使用AWS海外账号,us-west-2区域 使用账号默认v ...

  6. aws EKS

    登陆aws账号 1)找到eks 相关的项目,并进入 2)填写集群的名称,然后下一步 3)集群设置页面,添加集群服务角色 (aws eks cluster role) 4)继续集群配置 5)集群创建完成 ...

  7. AWS EKS 创建k8s生产环境实例

    #AWS EKS 创建k8s生产环境实例 在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具创建e ...

  8. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  9. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

随机推荐

  1. Java:并发笔记-03

    Java:并发笔记-03 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 3. 共享模型之管程-2 本章内容-2 Monitor wait/notify 3.6 ...

  2. 机器学习:KNN

    KNN:K-nearst neighbors 简介: k-近邻算法采用测量不同特征值之间的距离来进行分类,简而言之为:人以类聚,物以群分 KNN既可以应用于分类中,也可用于回归中:在分类的预测是,一般 ...

  3. [对对子队]Alpha阶段项目展示博客

    Alpha阶段项目展示博客 1 团队成员的简介和个人博客地址 成员 头像 岗位 博客 个人介绍 黄贤昊 PM 17373253 喜欢玩游戏和做游戏,项目经验基本都和游戏相关,擅长摸鱼,偶尔敬业. 刘子 ...

  4. oo第二次博客-三次电梯调度的总结与反思

    本单元从电梯调度相关问题层层深入,带领我们学习并运用了了多线程相关的知识. 三次电梯调度依次为单电梯单容量.单电梯可携带.多电梯可携带. 一.我的设计 在第一次作业中,使用了最简单的FIFO调度方法. ...

  5. BUAA_2020_软件工程_软件案例分析作业

    项目 内容 这个作业属于那个课程 班级博客 这个作业的要求在哪里 作业要求 我在这个课程的目标是 学习掌握软件工程的相关知识 这个作业在哪个具体方面帮我实现目标 通过对具体软件案例的分析学习软件工程 ...

  6. AlertManager集群搭建

    AlertManager集群搭建 一.AlertManager集群搭建 1.背景 2.机器 3.集群可用配置 4.alertmanager启动脚本 1.127.0.0.1:9083 机器启动脚本 2. ...

  7. Noip模拟84 2021.10.27

    以后估计都是用\(markdown\)来写了,可能风格会有变化 T1 宝藏 这两天老是会的题打不对,还是要细心... 考场上打的是维护\(set\)的做法,但是是最后才想出来的,没有维护对于是没有交. ...

  8. 网络摄像机中的IR-CUT详解

    自然界存在着各种波长的光线,通过折射人眼能看到不同颜色的光线,这就是光线的波长不同所导致的.其实还有许多光线是人眼看不到的,人眼识别光线的波长范围在320nm-760nm之间,超过760nm的光线人眼 ...

  9. STM32入门-STM32时钟系统,时钟初始化配置函数

    在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main.那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使 ...

  10. ubuntu 编译C++ error: ‘syscall’ was not declared in this scope

    明明已经加了头文件 #include <sys/syscall.h> #include <sched.h> #include <sys/resource.h> 编译 ...