11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

将 AWS IAM Authenticator 部署到 kops

  • 2019-10-07
  • 本文字数:3107 字

    阅读完需:约 10 分钟

将 AWS IAM Authenticator 部署到 kops

管理身份验证协议通常是一项繁重的任务,需要管理员去维护可接受用户的列表、持续验证每个用户的权限、删除不需要访问权限的用户,甚至定期对令牌和基于证书的访问权限进行回收再利用。需要管理的系统越多,这些任务就越复杂。正因如此,Amazon 合作伙伴网络中的 AWS 合作伙伴 Heptio 与 AWS 联手开发了 AWS IAM Authenticator,它支持您使用 AWS Identity and Access Management (IAM) 进行联合身份验证。


开始使用

要开始使用,您需要一个 Kubernetes 集群,使之启动并运行的最简单方法是使用 kops。首先,安装 kops 二进制文件(kops 文档对各种安装选项进行了解释说明)。如果您使用的是 macOS,可以运行以下命令:


brew update && brew install kops
复制代码


安装完毕后,请运行以下命令进行验证:


$ kops versionVersion 1.11.1 (git-0f2aa8d30)
复制代码


此外,您还需要 Kubernetes 命令行工具 kubectl;您同样可以使用 Homebrew 进行安装:


brew install kubernetes-cli
复制代码


接下来,您需要一个具有以下权限的 IAM 用户:


AmazonEC2FullAccessAmazonRoute53FullAccessAmazonS3FullAccessIAMFullAccessAmazonVPCFullAccess
复制代码


或者,您可以创建一个新的 IAM 用户,并按照设置 [kops] 环境中的说明附加策略。


您需要安装的最后一个依赖项是 aws-iam-authenticator。目前,最简单的安装方法是使用 go get,前提是已在您的计算机上安装 Golang。如果尚未安装,请按照适用于您的操作系统的 Go 安装说明执行操作。安装 Golang 后,便可安装 Authenticator:


go get -u -v sigs.k8s.io/aws-iam-authenticator
复制代码


请通过尝试运行二进制文件确保 aws-iam-authenticator 位于您的 $PATH 中:


aws-iam-authenticator help
复制代码


如果此操作失败,并显示 -bash: aws-iam-authenticator: command not found,则需要 export 包含 $GOPATH/bin 目录的 PATH(否则,继续执行下面的创建集群操作):


export PATH=${PATH}:$GOPATH/bin
复制代码


创建集群

现在,您已经安装所有依赖项,让我们为您的 kops 集群创建一个支架。只需运行一个命令即可:


export ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)export NAME=authenticator.$(cat /dev/random | LC_ALL=C tr -dc "[:alpha:]" | tr '[:upper:]' '[:lower:]' | head -c 10).k8s.localexport KOPS_STATE_STORE=s3://${NAME}aws s3 mb $KOPS_STATE_STOREkops create cluster \    --zones us-west-1a \    --name ${NAME} 
复制代码


如果您想将集群部署其他区域中(而非 us-west-1),请确保将 --zones 密钥更改为您所在区域的可用区。


这些命令将创建可用于存储桶和集群的随机 $NAME,创建用于存储集群状态的 Amazon S3 存储桶,并将集群清单写入存储桶。


现在,您已拥有集群清单,可以对其进行修改以自动部署 aws-iam-authenticator。为此,您需要运行 kops edit cluster:


kops edit cluster --name ${NAME}
复制代码


此命令将打开 $EDITOR 会话,显示存储在 Amazon S3 中的集群清单。在此,我们可以在 spec, authorization.rbac 和 authentication.aws 下添加两个密钥。应用后,这将配置控制平面以自动配置 Kubernetes RBAC 并部署 AWS IAM Authenticator。


# ...spec:  # ...  authentication:    aws: {}  authorization:    rbac: {}
复制代码


现在,保存并关闭此文件。保存后,您需要使用 kops update cluster 创建 kops 集群:


kops update cluster ${NAME} --yes
复制代码


完成后,您可以通过运行 validate 命令来验证集群的状态:


kops validate cluster
复制代码


此过程可能需要五到十分钟。您最终会收到一条如下所示的错误消息:



使用 kubectl describe pod 进行检查:


kubectl describe po -n kube-system -l k8s-app=aws-iam-authenticator
复制代码


这将显示您有一个集群运行,但无法启动 aws-iam-authenticator pod:该 pod 正在等待创建 ConfigMap 以便启动。现在,我们将创建 AWS IAM 策略、角色和 ConfigMap。


创建策略

在向任何人授予对集群的访问权限之前,您首先需要为其他 admin 用户创建 AWS IAM 角色和信任策略。您可以通过 AWS 控制台或使用 AWS CLI 执行此操作:


export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')export POLICY=$(echo -n '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::'; echo -n "$ACCOUNT_ID"; echo -n ':root"},"Action":"sts:AssumeRole","Condition":{}}]}')aws iam create-role \  --role-name KubernetesAdmin \  --description "Kubernetes administrator role (for AWS IAM Authenticator for AWS)." \  --assume-role-policy-document "$POLICY" \  --output text \  --query 'Role.Arn'
复制代码


现在,您可以创建一个 ConfigMap,用于定义拥有集群访问权限的 AWS IAM 角色:


cat >aws-auth.yaml <<EOF---apiVersion: v1kind: ConfigMapmetadata:  namespace: kube-system  name: aws-iam-authenticator  labels:    k8s-app: aws-iam-authenticatordata:  config.yaml: |        clusterID: ${NAME}    server:      mapRoles:      - roleARN: arn:aws:iam::${ACCOUNT_ID}:role/KubernetesAdmin        username: kubernetes-admin        groups:        - system:mastersEOF
复制代码


创建此文件后,您现在可以 apply 此配置:


kubectl apply -f aws-auth.yaml
复制代码


部署完成后,您需要在 kubeconfig 中创建一个新用户。为此,您可以使用自己常用的编辑器打开 ~/. kube/config。创建一个用户,将 {ACCOUNT_ID} 替换为您的账户 ID。


# ...users:- name: ${NAME}.exec  user:    exec:      apiVersion: client.authentication.k8s.io/v1alpha1      command: aws-iam-authenticator      args:        - "token"        - "-i"        - "${NAME}"        - "-r"        - "arn:aws:iam::${ACCOUNT_ID}:role/KubernetesAdmin"
复制代码


然后,您需要修改 context 以引用此新用户:


kubectl config set-context NAME.exec


完成所有这些操作后,您可以测试针对您的集群的身份验证:


$ kubectl get nodesNAME                                         STATUS   ROLES    AGE   VERSIONip-172-20-53-49.us-west-1.compute.internal   Ready    node     1h    v1.11.7ip-172-20-54-14.us-west-1.compute.internal   Ready    node     1h    v1.11.7ip-172-20-62-94.us-west-1.compute.internal   Ready    master   1h    v1.11.7
复制代码


如果您看到集群节点已列出,则说明 Authenticator 已正确部署,并且正在使用 STS 来验证用户的身份:



清除

如果您想继续使用此集群,可以让它一直运行。如果您想关闭实例,可以通过调用 kops delete cluster 命令来完成:


kops delete cluster --name ${NAME} --yes
复制代码


小结

借助 AWS IAM Authenticator,您能将 Kubernetes apiserver 身份验证与 AWS IAM 联合,从而使您能设置基于 IAM 角色的精细组,这些组会允许精细的 Kubernetes RBAC 规则。您无需发出复杂的命令来管理密钥和证书即可授予 kubectl 访问权限。


感谢 Peter Rifel 最初撰写的关于 AWS IAM Authenticator 的文章。


作者介绍:


Chris Hein


Chris Hein 是一位资深的开发者,倡导 Amazon Web Services 的 Kubernetes/EKS。加入 Amazon 之前,Chris 曾就职于众多规模不等的公司,如 GoPro、Sproutling 和 Mattel。有关 Chris 的更多信息,请访问 https://aws.amazon.com/blogs/opensource/author/heichris/,并通过 @christopherhein 关注他


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/deploying-aws-iam-authenticator-kubernetes-kops/


2019-10-07 16:16419
用户头像

发布了 1530 篇内容, 共 61.6 次阅读, 收获喜欢 66 次。

关注

评论

发布
暂无评论
发现更多内容

架构训练营第四期 作业3

supermenG

架构师训练营 4 期

瞰源 | 别逗了,同学!开源不是点赞送礼

OpenTEKr

狄安瞰源

直击前沿技术:云原生应用低代码开发平台实践

博文视点Broadview

如何用 Python 自动发送微博?

老表

Python selenium 跟老表学云服务器 自动化实战

Kafka 消息存储与索引设计

编程江湖

kafka

【2021废钢铁大会】拾起卖旗下天津城矿再生资源回收有限公司三获“全国优质废钢加工配送企业”称号

InfoQ 天津

平凯星辰获评 《金融电子化》2021 金融业新技术应用创新突出贡献奖

PingCAP

正转与反转(30/28)

赵新龙

28天写作

大型集团企业云管平台建设参考架构

华为云开发者联盟

架构 运维 IT治理 分布式部署 ManageOne

梦想起航

向往

盘点2021

QCon-oCPX多目标多场景联合建模在OPPO的实践

OPPO数智技术

算法

学生管理系统架构文档

皓月

架构实战营 #架构实战营 「架构实战营」

拾起卖数字化平台亮相2021全国废钢铁大会引热烈反响 数字化建设助推废钢产业高质量发展

InfoQ 天津

为什么 MongoDB 使用 B 树

编程江湖

mongodb

给弟弟的信第28封|那些在大学赚到第一桶金的大神

大菠萝

28天写作

前端React 开发中必须知道的5个技巧

@零度

前端开发 React

Linux之atime,ctime,mtime的区别

入门小站

Linux

比格云CEO 诸葛辉:本土开源力量的崛起,正为底层技术基础设施掀起一股中国风 I OpenTEKr 大话开源 Vol.4

OpenTEKr

大话开源

Thinking Agile 2021,Being Agile 2022

Bruce Talk

敏捷 随笔 Agile

【转】java开发之MyBatis 原理与核心组件

@零度

mybatis JAVA开发

关于Kafka分区leader迁移的感想

Kafka中文社区

28天写作感想

Tiger

28天写作

网络安全好学吗?手把手教你学主动信息收集,网络安全基础教程

学神来啦

网络安全 信息安全 渗透测试· kali kali Linux

固定资产管理平台系统解决方案

低代码小观

企业管理 资产管理 CRM 企业管理系统 CRM系统

兄弟要盘吗?

为自己带盐

爬虫 dotnet 28天写作 12月日更

填问卷抽大奖,中奖绝缘体的跨年福利快来领取!

InfoQ写作社区官方

热门活动

瞰源 | 假领子的流行经济学看开源

OpenTEKr

狄安瞰源

Mybatis使用的9种设计模式,你知道几种

编程江湖

设计模式 JAVA开发

热更新技术在游戏 SDK 中的实践

bilibili游戏技术

发现新视界——视觉计算将如何改变生产方式

阿里云弹性计算

阿里云 云栖大会 视觉计算

实践解析可视化开发平台FlinkSever优势

华为云开发者联盟

flink kafka 流计算 华为FusionInsight MRS FlinkSever

将 AWS IAM Authenticator 部署到 kops_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章