服务账户

服务账户是我们用于身份验证自动化操作的帐户,例如CI/CD流水线。它们不应该与用户绑定,因为如果我们禁用该用户或限制其权限,我们不希望我们的流水线开始失败。服务账户应具有严格的访问控制,并且不应允许执行比管道所需更多的操作,而实际用户可能需要访问更多的资源。
在Argo CD中创建服务账户有两种方法:一种是使用本地用户(只使用apiKey并删除登录部分),另一种是使用项目角色并为这些角色分配令牌。

本地服务账户

现在,我们将创建一个单独的本地帐户,只具有指定的apiKey功能。这样,用户没有UI或CLI的密码,只有在我们为其生成API密钥后才可以访问(从而获得CLI或直接API访问)。我们还将为其设置特定权限;例如,我们将允许其同步特定应用程序。
我们将修改argocd cm ConfigMap以添加新的服务帐户用户,我们将
名称gitops-ci:

apiVersion: v1
kind: ConfigMap
metadata:name: argocd-cm
data:accounts.alina: apiKey, loginaccounts.gitops-ci: apiKeyadmin.enabled: "false"

提交并将其推送到远程,以便我们启动并运行新帐户。在我们有了新帐户创建后,我们需要运行一个命令来生成访问令牌。这里的问题是alina用户没有这样做的权限,并且管理员帐户被禁用。我们可以

重新启用管理,但这不是一个好的做法,因为我们可能总是忘记再次禁用它,或者只要长时间保持启用即可。通常,只有在我们完成设置后,我们才应该禁用管理在所有本地用户中。然而,我们可能需要在任何时候创建新的,因为加入我们团队的新人,或通过管道实现自动化的新场景。
所以,让我们看看如何将更新帐户的权限分配给用户alina。为此,我们将修改argocd-rbac-cm.yaml文件,为用户更新创建一个名为role:userupdate的新角色,然后我们将该角色分配给用户(用于定义策略的行以p、 而将用户或组链接到角色的行以g)开头:

apiVersion: v1
kind: ConfigMap
metadata:name: argocd-rbac-cm
data:policy.default: role:readonlypolicy.csv: |p, role:user-update, accounts, update, *, allowp, role:user-update, accounts, get, *, allowg, alina, role:user-update

提交,将更改推送到远程,并确保 Argo CD 应用它们。 现在,我们可以运行
命令以创建令牌(我们假设您使用 CLI 登录 用户 alina):

argocd account generate-token -a gitops-ci

输出应该类似于此(它是帐户令牌):

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzZTc2NWI5Ny04MG
YyLTRkODUtYTkzYi1mNGIzMjRkYTc0ODciLCJpYXQiOjE2MzQxNDkyODksImlzc
yI6ImFyZ29jZCIsIm5iZiI6MTYzNDE0OTI4OSwic3ViIjoiZ2l0b3BzLWNpOmFw
aUtleSJ9.azbvrvckSDevFOG6Tun9nJV0fEMcMpI9Eca9Q5F2QR4

检查新生成的令牌是否工作的一种简单方法是运行argocd
account获取用户信息命令。我们可以使用登录的用户运行一次,然后使用
验证令牌。在这里,我只为令牌(对于登录的用户
不要传递–auth令牌参数)。–auth令牌标志是一个通用标志,意思是
可以用于任何命令(当然,您会有另一个令牌,所以不要忘记替换它):

argocd account get-user-info --authtoken eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzZTc2NWI5
Ny04MGYyLTRkODUtYTkzYi1mNGIzMjRkYTc0ODciLCJpYXQiOjE2MzQxNDkyODk
sImlzcyI6ImFyZ29jZCIsIm5iZiI6MTYzNDE0OTI4OSwic3ViIjoiZ2l0b3BzLW
NpOmFwaUtleSJ9.azbvrvckSDevFOG6Tun9nJV0fEMcMpI9Eca9Q5F2QR4

输出应类似于此:

Logged In: true
Username: gitops-ci
Issuer: argocd
Groups:

对于新创建的服务帐户,由于我们没有指定任何权限,它将使用默认权限
一个,即只读访问。当然,创建这样一个只具有读取访问权限的令牌并不能
很有道理。通常,它应该做一些事情,比如注册一个新集群或注销它
(这通常是以命令式的方式完成的——通过运行命令),创建或删除用户,创建
应用程序,同步它,等等。我们无法将本地帐户设置为
RBAC组,我们只能有角色并将本地用户分配给角色。我们将看看小组是如何工作的
当我们在本章后面讨论SSO用户时。要获得资源和操作的完整列表,请
可以在RBAC ConfigMap中用于您的本地帐户,您可以查看官方文档:
https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/#rbacresources-以及行动。

项目角色和令牌

项目角色是我们可以用于服务帐户的第二个选项。应用程序项目是一种方式以便我们对应用程序定义应用一些约束。我们可以从以下位置设置存储库我们获取状态、目标集群以及可以部署甚至筛选的名称空间我们可以安装的资源类型(例如,我们可以声明使用项目无法部署机密)。除此之外,还可以创建项目角色并指定允许执行的操作类型,然后可以为角色分配令牌。

当安装Argo CD时,它还附带了一个默认项目,实际上称为默认项目,即没有对其应用程序设置任何限制(一切都设置为允许:‘*’)。为了展示如何项目与其令牌一起使用,我们将创建一个新项目并将其用于现有的argocd应用一旦我们有了它,我们将需要为项目创建一个角色,为角色,并创建一个令牌。

我们将创建一个名为argocd-proj.yaml的新文件,并将其存储在与argo-app.yaml文件(这些文件也可以在我们的官方回购中找到,网址为https://github.com/PacktPublishing/ArgoCD在ch04/kustomize安装中的实践文件夹)。在我们创建它之后,我们将需要手动应用它(我们将在第5章Argo CD引导中看到K8s集群,应用程序模式如何帮助我们创建所有这些应用程序和应用程序项目自动)。这是目前文件的内容。您可以查看目的地的限制命名空间和集群,并且我们只能从固定的repo加载状态。我们还添加了名为读取和同步的新角色,为此我们允许所有应用程序执行获取和同步操作根据AppProject:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:name: argocd
spec:roles:- name: read-syncdescription: read and sync privilegespolicies:- p, proj:argocd:read-sync, applications, get, argocd/*, allow- p, proj:argocd:read-sync, applications, sync, argocd/*, allowclusterResourceWhitelist:- group: '*'kind: '*'description: Project to configure argocd self-manage applicationdestinations:- namespace: argocdserver: https://kubernetes.default.svcsourceRepos:- https://github.com/PacktPublishing/ArgoCD-in-Practice.git

我们将使用kubectl apply将AppProject应用于集群:
kubectl apply -n argocd –f argocd-proj.yaml
命令输出应类似于以下内容:
appproject.argoproj.io/argocd created
然后,我们将修改argocd应用程序以开始使用这个新的AppProject,从project:默认为定义中的project:argocd。现在,将更新后的文件应用于集群使用kubectl apply(完整的argocd-app.yaml文件可以在https://github.com/PacktPublishing/ArgoCD-in-Practice in ch04/kustomize安装):
kubectl apply -n argocd -f argocd-app.yaml

现在,我们应该准备好为我们创建的读取和同步角色生成令牌。这需要可以通过CLI或UI以同步方式完成,因此我们可以检索生成的代币我们可以使用用户alina运行CLI命令,但我们会收到一个错误,因为它没有具有所需的权限:
FATA[0000] rpc error: code = PermissionDenied desc = permission denied: projects, update, argocd, sub: alina, iat: 2021-10-16T10:16:33Z

让我们通过修改RBAC ConfigMap来添加所需的权限。我只是在粘贴政策。
csv部分,这一次,我将仅限于我们的确切项目,名为argocd:

policy.csv: |p, role:user-update, accounts, update, *, allowp, role:user-update, accounts, get, *, allowp, role:user-update, projects, update, argocd, allowg, alina, role:user-update

别忘了提交并将其推送到远程,这样我们的更改就会被Argo CD和应用于群集。之后,我们可以使用以下命令生成令牌
argocd proj role create-token argocd read-sync

回复如下:

Create token succeeded for proj:argocd:read-sync.
ID: ccdc5906-11fc-483b-8e8d-0511c6f28978
Issued At: 2021-10-16T13:44:19+03:00
Expires At: Never
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjY2RjN
TkwNi0xMWZjLTQ4M2ItOGU4ZC0wNTExYzZmMjg5NzgiLCJpYXQiOjE2MzQzODEw
NTksImlzcyI6ImFyZ29jZCIsIm5iZiI6MTYzNDM4MTA1OSwic3ViIjoicHJvajp
hcmdvY2Q6cmVhZC1zeW5jIn0.R02VHylpb4aPjtpd5qLOXHpELGOVgnelCJr3q8
bGU5Y

我现在可以使用此令牌为argocdAppProject下的所有应用程序启动手动同步。
我们只有一个应用程序,它的名称与AppProject相同,argocd。我们可以看到如果我们试图使用登录的用户alina调用sync,我们将得到一个拒绝权限的错误,如下所示 可以在以下命令的输出中看到:
argocd app sync argocd

错误如下:

FATA[0000] rpc error: code = PermissionDenied desc = permission
denied: applications, sync, argocd/argocd, sub: alina, iat:
2021-10-16T10:16:33Z

使用生成的令牌,命令变为:

argocd app sync argocd --auth-token eyJhbGciOiJIUzI1NiIsInR5cCI
6IkpXVCJ9.eyJqdGkiOiJjY2RjNTkwNi0xMWZjLTQ4M2ItOGU4ZC0wNTExYzZmM
jg5NzgiLCJpYXQiOjE2MzQzODEwNTksImlzcyI6ImFyZ29jZCIsIm5iZiI6MTYz
NDM4MTA1OSwic3ViIjoicHJvajphcmdvY2Q6cmVhZC1zeW5jIn0.R02VHylpb4a
Pjtpd5qLOXHpELGOVgnelCJr3q8bGU5Y

输出非常长,因为它开始枚举我们的Argo CD应用程序所拥有的所有资源连同它们的状态一起安装,这意味着同步正在工作。也可以从UI中的同步状态(转到argocd应用程序,在其页面上,您应该有一个同步状态按钮,显示有关上次启动的同步的详细信息):

我们生成的每个令牌都保存到项目角色中。我们可以检查使用的时间,它的有效期以及是否该轮换它了。如果我们计划的话,我们也可以为它设定一个到期日期在有限的时间内使用它。否则,给我们需要更新的时间设定一个硬性的截止日期会要求管理Argo CD的工程师严格遵守纪律。就我而言,我通常有一种倾向将访问控制的季度审查推迟一到两周,以确定到期日期可能导致管道故障。

注意–仅具有同步操作的令牌让令牌(来自本地帐户或项目角色)只有在我们可以允许应用程序自动同步的情况下才执行同步操作?我认为因此,一个有效的方案是仍然允许应用程序自动同步,但设置
更大的超时,例如10-15分钟(这可以减少系统负载并增加其性能)。然而,在我们向GitOps回购做出承诺后,我们可以调用sync也来自管道。

项目角色只能用于对应用程序的资源和那些应用程序执行操作需要在为其创建角色的项目下,因此其范围非常有限。然而实际上,正是这些限制将它们转化为在我们的管道中使用的良好候选者,因为如果他们因为任何原因受到损害,那么攻击面就会缩小。

Argo CD 实践教程 08相关推荐

  1. 指定的网络文件夹目前是以其他用户名和密码进行映射的_使用 GitLab CI 与 Argo CD 进行 GitOps 实践

    在现在的云原生世界里面 GitOps 不断的被提及,这种持续交付的模式越来越受到了大家的青睐,我们前面也有文章详细讲解了 GitOps 的相关概念,在网上也可以找到很多关于它的资源,但是关于 GitO ...

  2. Playmaker全面实践教程之简单的使用Playmaker示例

    Playmaker全面实践教程之简单的使用Playmaker示例 简单的使用Playmaker示例 通过本章前面部分的学习,相信读者已经对Playmaker有了一个整体的认识和印象了.在本章的最后,我 ...

  3. [JAVA]全新java初学者实践教程(全)

    [JAVA]全新java初学者实践教程(全) 本教程适合初学者,高手飘过. 1.全新java初学者实践教程1(Java SE5.0版)--配置环境变量 2.全新java初学者实践教程2(Java SE ...

  4. java6程序设计实践教程_Java 6 程序设计实践教程

    本书当前实时库存为: 本 书名:Java程序设计与实践教程 ISBN:9787115360458 出版社:人民邮电出版社 作者:张勇 页数:218 出版日期:2014年09月 参考重量:0.330Kg ...

  5. 操作系统形式化验证实践教程(10) - 一阶直觉逻辑

    操作系统形式化验证实践教程(10) - 一阶直觉逻辑 前面我们用了九讲的篇幅把seL4验证操作系统的地图给大家迅速过了一遍,基础好的同学已经可以基于前面的知识开始自己的工作了. 对于只学过离散数学,而 ...

  6. 做中学之Vim实践教程

    做中学之学用学用Vim Vim VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人的编辑利器--Vim这 ...

  7. c语言程序设计实践教程谢丽霞答案,C语言程序设计实用实践教程

    直观易懂.采用直观的方式描述概念,以结构清晰的图形文字表述抽象算法.综合全面.每章内容讲解完后,都有一个贯穿全书的实例,把学到的内容用到实际开发中,达到理论与实践的紧密结合.全书有语法.有案例.还有实 ...

  8. 体验 Argo CD

    体验 Argo CD Argo CD 是什么 Argo CD 核心概念 Application Project Argo CD 架构 安装 Argo CD CLI 部署应用 使用用户界面检查应用程序 ...

  9. 零知识证明实践教程,第三部分

    本文是零知识证明简单实践教程的第三部分, 第一部分见:零知识证明第一部分, 第二部分见:零知识证明第二部分. 下面这个图片是我们在第二部分所使用的merkle树来构造prover的承诺.同时我们也提出 ...

最新文章

  1. AWS Artifact如何处理企业的法规遵从?
  2. Android系统的架构
  3. linux下如何安装配置redis及主从配置
  4. UVA - 12096:The SetStack Computer
  5. 安卓系统双屏异显_Android实现双屏异显
  6. c++ n次方函数_高一数学必修一函数知识点总结
  7. C++语言运算符重载
  8. c#获取电脑硬件信息参数说明(CPU篇 Win32_Processor)
  9. Python学习之路28-符合Python风格的对象
  10. 【2022】安装神通数据库及DataGrip连接
  11. [RK3399][Android7.1] 调试笔记 --- CPU的serial number读取
  12. 【裴礼文数学分析】例1.1.5
  13. 拼多多快捷回复怎么设置
  14. spring boot 请求转发和重定向
  15. SUPL overview
  16. android 当手柄打游戏,玩手游需不需要配手柄?谈移动游戏外设的三个机会
  17. 灰度发布--Spring Cloud Gray
  18. element table实现前端分页
  19. 海思vo 分屏显示总结
  20. 小孩拉肚子不能吃什么?

热门文章

  1. 互联网教程基础之HTML 一
  2. 驾驶人违反交通运输管理法规发生重大事故后,因逃逸致人死亡的,处3年以上7年以下有期徒刑。...
  3. 生产环境出现重大事故时如何定位问题?
  4. php 面试题 - 持续更新
  5. Fetch 之 response
  6. 微商怎么做如何快速找客源做好微信朋友圈营销
  7. 新人向:简洁介绍学习HTTP协议
  8. 常见网络端口 和 常见网络协议
  9. DDP报错::RuntimeError: Expected all tensors to be on the same device, but found at least two devic
  10. UCloud:云计算的四个真相,BAT之外仍有空间