作者: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
ConfigMap
的 IAM
用户或角色访问 Amazon EKS
控制台,则无法看到 Kubernetes
工作负载。也不会看到集群的概览详细信息。所以要向其他 AWS
用户或角色授予与集群交互的能力,您必须在 Kubernetes
中编辑 aws-auth
ConfigMap
。
因为部门有不通的角色,所以想基于不通的角色分配不同的权限,下面是记录添加一个对 EKS
只有只读权限的 AIM
用户。
{{< notice info “注意:” >}}
如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您使用的是最新版的 AWS CLI。
{{< /notice >}}
{{< 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。
{{< notice info “注意:” >}}
要允许超级用户访问权限以对任何资源执行任何操作,请添加 system:masters 而非 system:bootstrappers 和 system: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-developer
IAM 组并附加AmazonEKSDeveloperPolicy
策略developer
用户developer
个人资料aws configure --profile developer
aws-auth
configmapdeveloper
用户 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
kubectl config view --minify
kubectl auth can-i get pods kubectl auth can-i create pods kubectl run nginx --image=nginx
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
aws eks --region us-east-1 update-kubeconfig --name eks --profile terraform
aws-auth
configmapeks-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
kubectl config view --minify
kubectl auth can-i "*" "*"
作者:SRE运维博客
博客地址: https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/211203931498/
相关话题:https://www.cnsre.cn/tags/aws/