如何正确配置AWS Kubernetes环境下kops的权限?
kops在AWS上的权限配置优化指南
嘿,我来帮你梳理下当前kops权限配置的问题,以及正确的配置方式:
你的当前配置存在的问题
你给kops组附加了AmazonEC2FullAccess、AmazonRoute53FullAccess、AmazonS3FullAccess这三个全量权限,这其实权限过于宽泛,违反了IAM的最小权限原则——任何属于这个组的用户都能完全操控你的EC2、Route53、S3资源,会带来不必要的安全风险。而且你还漏掉了kops创建集群必需的IAM、AutoScaling、CloudFormation相关权限,这会导致后续kops创建集群时直接失败。
正确的kops权限配置步骤
1. 创建基础的IAM组和用户
首先创建kops组,再创建专属用户并加入该组:
# 创建kops组 aws iam create-group --group-name kops # 创建kops专用用户 aws iam create-user --user-name kops-admin # 将用户加入kops组 aws iam add-user-to-group --user-name kops-admin --group-name kops
2. 配置最小权限策略
kops需要的权限是特定的,我们可以自定义一个最小权限策略文件(比如命名为kops-minimum-policy.json),避免全量权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ // EC2相关:集群节点、网络、负载均衡等管理 "ec2:Describe*", "ec2:Create*", "ec2:Modify*", "ec2:Delete*", "ec2:RunInstances", // Route53相关:集群域名解析管理 "route53:ChangeResourceRecordSets", "route53:HostedZone*", "route53:Get*", // S3相关:仅针对kops状态存储桶的权限(替换为你的桶名) "s3:CreateBucket", "s3:DeleteBucket", "s3:PutBucketVersioning", "s3:GetBucket*", "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:DeleteObject", // IAM相关:创建集群所需的角色、实例配置文件 "iam:CreateRole", "iam:DeleteRole", "iam:GetRole", "iam:ListRoles", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:CreateInstanceProfile", "iam:DeleteInstanceProfile", "iam:GetInstanceProfile", "iam:ListInstanceProfiles", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile", "iam:PassRole", // AutoScaling和CloudFormation:集群扩缩容、资源编排 "autoscaling:*", "cloudformation:*" ], "Resource": "*" } ] }
如果想更严格,可以把S3的Resource限制为你要用来存储kops状态的特定桶ARN,比如arn:aws:s3:::your-kops-state-bucket/*和arn:aws:s3:::your-kops-state-bucket。
然后创建这个策略并附加到kops组:
# 创建自定义策略(替换YOUR_ACCOUNT_ID为你的AWS账号ID) aws iam create-policy --policy-name KopsMinimumPolicy --policy-document file://kops-minimum-policy.json # 附加策略到kops组 aws iam attach-group-policy --group-name kops --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/KopsMinimumPolicy
3. 配置用户访问凭证
给kops用户生成访问密钥,并配置到本地AWS客户端:
# 生成访问密钥(保存好返回的AccessKeyId和SecretAccessKey) aws iam create-access-key --user-name kops-admin # 配置本地AWS凭证 aws configure # 依次输入AccessKeyId、SecretAccessKey、默认区域(比如us-east-1)、默认输出格式
4. 配置kops状态存储桶
kops需要一个S3桶来存储集群的状态信息,先创建并配置这个桶:
# 创建桶(桶名必须全局唯一,替换为你的桶名) aws s3 mb s3://your-kops-state-bucket --region us-east-1 # 启用版本控制,防止状态丢失 aws s3api put-bucket-versioning --bucket your-kops-state-bucket --versioning-configuration Status=Enabled # 设置环境变量,让kops默认使用这个桶 export KOPS_STATE_STORE=s3://your-kops-state-bucket # 可以把这个命令加入你的shell配置文件(比如~/.bashrc),避免每次都设置
总结
你的初始配置不仅权限过大,还缺少了kops创建集群必需的IAM、AutoScaling等权限。按照上面的最小权限配置,既能满足kops的所有操作需求,又能降低安全风险,同时确保集群创建过程顺利。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

