Argo CD 实践教程 07

news2024/11/18 20:35:41

在本章中,我们将探讨如何设置用户访问Argo CD的权限,以及从终端或CI/CD管道连接CLI的选项,以及如何执行基于角色的访问控制。我们将查看单点登录(SSO)选项,通常这是一个需要付费的功能,但由于Argo CD完全开源且没有商业提供,因此您可以直接使用。我们将涵盖的主要主题如下:
• 声明式用户
• 服务账户
• 单点登录

技术要求

在本章中,我们假设您已经在设备上或云平台上安装了Argo CD。我们不需要高可用性的安装;它可以在本地的Kubernetes集群中,但我们需要一个可以自我管理的安装,因为我们将对其进行多个更改。对于单点登录部分,我们需要一个可以被外部提供商访问的安装,因此我们需要一个域名或公共IP地址。我们将编写一些代码(更精确地说是YAML代码),因此还需要一个代码编辑器。我使用的是Visual Studio Code(https://code.visualstudio.com)。我们将进行的所有更改都可以在https://github.com/PacktPublishing/ArgoCD-inPractice的ch04文件夹中找到。

声明式用户

开放式Web应用程序安全项目(OWASP)- https://owasp.org-是一个非营利性基金会,致力于Web应用程序安全领域的工作。他们最著名的项目是OWASP十大(https://owasp.org/www-project-top-ten/),这是一个关于Web应用程序安全的最重要风险清单。他们每隔几年更新一次这个清单。目前,在他们最新的版本中,即2021年版中,我们在第一位的是Broken Access Control(它在2017年的清单上排在第五位)。由于十大的主要目标是在社区中提高对主要Web安全风险的认识,因此我们可以理解为Broken Access Control处于首位,这是为了在我们的用户和每个人获得的访问权限方面做出适当的设置,以避免违反最小特权原则。我们的开发团队通常会获得开发环境的写访问权限,而对于我们的生产环境则只有只读权限,而SRE则具有完全的权限。接下来,我们将看到如何实现这一点。

管理员和本地用户

在集群中安装Argo CD后,我们只有管理员用户。最初,管理员用户的密码是应用程序服务器Pod的名称(如果有多个,则是第一个启动的Pod);它看起来像这样 - argocd-server-bfb77d489-wnzjk。但是,这被认为是不好的选择,因为大多数安装的第一部分(Pod以argocd-server-开头)是固定的,而第二部分是生成的,应该具有随机字符,但它们实际上并不是随机的(可以在https://argo-cd.readthedocs.io/en/stable/security_considerations/#cve-2020-8828-insecure-default-administrative-password找到更多详细信息)。此外,它对所有具有集群访问权限的人都可见(这并不一定意味着具有Argo CD管理员访问权限)。因此,自从发布版本2.0.0以来,安装应用程序时会为用户生成一个新密码,并将其保存在名为argocd-initial-admin-secret的Secret中。我们可以使用以下命令查看安装后的密码:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

命令输出是您的密码,应该类似于以下内容(应该删除%字符,因为shell插入了这个CR / LF以便提示符开始新的一行):

pOLpcl9ah90dViCD%

现在,您可以使用UI和CLI的密码检查它是否正常工作。要更新密码,您可以通过导航到“用户信息”部分使用UI,也可以使用argocd account update-password命令通过CLI进行更新(https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_account_updatepassword/)。如果您忘记了密码,有一种方法可以重置它,涉及直接对存储bcrypt哈希的Argo CD主Secret资源进行一些更改-更多细节可以在https://argo-cd.readthedocs.io/en/stable/faq/#i-forgot-theadmin-password-how-do-i-reset-it找到。

在我们启用管理员用户后,下一步是禁用它,因为它太强大了,我们要遵循最小权限原则,这意味着我们应该只使用我们需要的最小类型的访问权限来完成我们的工作(可以在这里了解更多信息:https://en.wikipedia.org/wiki/Principle_of_least_privilege)。但是为了不失去对系统的访问权限,我们需要首先创建一个权限较少的本地用户,它将允许我们执行日常任务。我们将其命名为alina,并允许它访问UI和CLI。经验法则是,对于需要访问Argo CD的每个同事,始终都要有一个专用用户,而不是将其用作组或团队用户。如果某人离开团队失去了对系统的访问权限,这将有所帮助,因为我们始终可以禁用或删除他们的帐户。要添加新用户,ConfigMap argocd-cm文件应如下所示:

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

我们应该创建提交并将此更新推送到远程,以便Argo CD应用我们的配置更改(为了在推送时自动应用此ConfigMap,您需要安装和配置Argo CD,如第3章“运行Argo CD”所述)。假设CLI已安装并指向我们的API服务器实例(使用管理员用户登录),我们可以通过运行以下代码来验证新用户是否已创建:
argocd account list

输出应该如下所示:
在这里插入图片描述

这意味着我们已经准备好了该用户,但我们仍然需要设置其密码。为此,我们可以使用此命令,使用管理员密码作为当前密码:
argocd account update-password --account alina --currentpassword pOLpcl9ah90dViCD --new-password k8pL-xzE3WMexWm3cT8tmn

输出应该如下所示:
Password updated
在运行此update-password命令时,有可能跳过传递current-password和new-password参数;这样,它们的值就不会保存在shell历史记录中。如果不传递它们,您将被要求以交互方式输入它们,这是一种更安全的选择。
要查看发生了什么,我们需要运行此命令查看argocd-secret Secret资源。我们将在那里看到我们的用户的新条目,就像管理员用户一样:
kubectl get secret argocd-secret -n argocd -o yaml
我们应该得到以下结果(我们将删除对我们无关的一些字段):
在这里插入图片描述
如果我们查看为该用户创建的令牌(在accounts.alina.tokens字段中),我们将看到它实际上是null,这意味着我们目前没有创建任何令牌。
echo "bnVsbA==" | base64 –d
输出如下:
null%

如果您想知道这个用户有什么权限,实际上它目前什么也做不了。我们可以使用它登录,但是如果我们尝试列出应用程序或集群,我们将得到空列表。为了允许它做一些事情,我们有两个选择:要么我们将为用户提供特定的权限,要么我们设置默认策略,每个用户在身份验证时都将回退到该策略,以防找不到特定的策略。我们现在将把默认策略设置为只读,并检查如何在使用访问令牌时添加特定的权限。为此,我们需要修改一个名为argocd-rbac-cm.yaml的新ConfigMap资源,其中我们将设置所有基于角色的访问控制(RBAC)规则。在与argocd-cm.yaml ConfigMap相同的位置创建一个名为argocd-rbac-cm.yaml的新文件,并添加以下内容:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
data:
  policy.default: role:readonly
  

不要忘记在 kustomization.yml 文件中添加条目。现在,在 patchesStrategicMerge 下,我们应该有两个条目,分别针对我们修改的两个 ConfigMap:

patchesStrategicMerge:
 - patches/argocd-cm.yaml
 - patches/argocd-rbac-cm.yaml

创建两个文件的提交并将其推送到远程,以便 Argo CD 可以应用 RBAC 默认策略。更改完成后,我们可以使用 CLI 来使用新用户。为此,首先我们应该登录到 API 服务器(在我的情况下,我使用端口转发从本地安装中使用服务器 https://localhost:8083):

argocd login localhost:8083 --username alina

你可能会收到一个警告消息,指出证书来自未知的机构,这是正确的,因为它是自签名的。我们现在可以忽略它,因为我们正在连接到 localhost:
WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)?

接下来,请输入 alina 账户的密码,你将会成功登录并可以开始执行命令。

我们可以尝试列出 Argo CD 已安装的应用程序,以确保我们具有读取权限:

argocd app list

输出应该如下所示(在将默认策略设置为只读之前,此列表将为空):
在这里插入图片描述
现在,我们可以继续禁用管理员用户,我们可以在 argocd-cm ConfigMap 中使用 admin.enabled 字段,并将其设置为 false。它应该像这样:
在这里插入图片描述

提交更改并将其推送到远程,以便不能再使用管理员用户。您向保护 Argo CD 实例并准备其用于生产迈出了一步。我们已经看到了如何以声明性方式处理用户,如何创建新的本地用户并禁用管理员,以及密码如何处理。接下来,我们将学习用于自动化的用户,即所谓的服务账户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bean与@Bean注解

文章目录 一、背景与IoC二、注解Bean1、Bean注解用法2、Bean注解源码3、Bean注解演示 一、背景与IoC 之前的代码书写现状—耦合度偏高。如下图,业务层需要数据层实现类对象BookDaoImpl,于是自己new了一个,此时,当数据层类名改为B…

隐藏菜单之菜单和搜索

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>菜单</title><style>/* css代码开始*/* {margin: 0;padding: 0;box-sizing: border-box;}b…

人工智能(pytorch)搭建模型15-手把手搭建MnasNet模型,并实现模型的训练与预测

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型15-手把手搭建MnasNet模型&#xff0c;并实现模型的训练与预测&#xff0c;本文将介绍MnasNet模型的原理&#xff0c;并使用PyTorch框架构建一个MnasNet模型用于图像分类任务&#xff0c;…

1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume

1、数据仓库概念 数据仓库&#xff08; Data Warehouse &#xff09;&#xff0c;是为企业制定决策&#xff0c;提供数据支持的。可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数…

Linux——使用第三方库链接的方式——动态式

回顾上文&#xff1a; (122条消息) Linux使用第三方库链接的使用方式——静态式_橙予清的zzz~的博客-CSDN博客https://blog.csdn.net/weixin_69283129/article/details/131414804?spm1001.2014.3001.5502 上篇文章中&#xff0c;我讲到了关于链接第三方库作为静态库的使…

股票技术分析方法综述

文章目录 K线均线MACDKDJ和RSIBOLL线趋势理论、支撑位和压力位形态理论量价关系理论道氏理论波浪理论江恩理论缠论自定义指标 K线 K线的组合形态是K线技术分析中的重要部分&#xff0c;包括早晨之星、黄昏之星、红三兵、黑三兵等。 早晨之星&#xff1a;由三根K线组成&#x…

OpenGL 抗锯齿

1.简介 你可以看到&#xff0c;我们只是绘制了一个简单的立方体&#xff0c;你就能注意到它存在锯齿边缘。 可能不是非常明显&#xff0c;但如果你离近仔细观察立方体的边缘&#xff0c;你就应该能够看到锯齿状的图案。如果放大的话&#xff0c;你会看到下面的图案&#xff1a…

家校互动、班级管理系统

最近做了一款使用若依开源框架搭建的一款家校互动、班级管理的平台&#xff0c;采用uniapp作为APP端&#xff0c;原生小程序作为小程序的家长端。

软件测试的概念与过程(软件测试的历史、概念、结构、过程)

软件测试的概念与过程----软件测试的历史 软件测试的历史软件的概念软件的结构软件测试的过程 软件测试的历史 1、早期的的软件开发过程中&#xff0c;将测试“调试”&#xff0c;目的是纠正软件已经知道的故障&#xff0c;常常有开发人员自己去完成这部分工作。 2、1957年&…

使用数据集工具

一.数据集工具介绍 HuggingFace通过API提供了统一的数据集处理工具&#xff0c;它提供的数据集如下所示&#xff1a; 该界面左侧可以根据不同的任务类型、类库、语言、License等来筛选数据集&#xff0c;右侧为具体的数据集列表&#xff0c;其中有经典的glue、super_glue数据集…

Unity | HDRP高清渲染管线学习笔记:材质系统Lit着色器

目录 一、Lit着色器 1. Surface Options 2. Surface Inputs&#xff08;表面输入&#xff09; 3. Transparency Inputs 二、HDRP渲染优先级 我们可以把现实世界中的物体分成不透明物体和透明物体&#xff08;其中包括透明或者半透明&#xff09;。在实时渲染时&#xff0c…

Debian二次开发网关支持Docker+RS485+网口

随着物联网技术的不断发展&#xff0c;瑞芯微边缘计算网关作为一种集成多种接口和功能的智能网关&#xff0c;逐渐成为了物联网领域中的热门产品。本文将详细介绍瑞芯微边缘计算网关的特点和优势&#xff0c;并探讨其在实际应用中的广泛应用。 瑞芯微Linux系统边缘计算网关是一…

【Java】 Java 私有接口方法的使用

本文仅供学习参考&#xff01; 相关教程地址&#xff1a; https://www.baeldung.com/java-interface-private-methods https://www.geeksforgeeks.org/private-methods-java-9-interfaces/ https://www.runoob.com/java/java9-private-interface-methods.html 接口是定义一组方…

java之路—— SpringMVC的常用注解解析以及作用、应用

创作不易&#xff0c;真的希望能给个免费的小 文章目录 1、Controller2、RequestMapping3.GetMapping、PostMapping、PutMapping、DeleteMapping4. RequestParam5.PathVariable6.RequestHeader7.CookieValue8.RequestBody9.ResponseBody10.SessionAttribute11.ControllerAdvice…

二层、三层交换机是什么?有什么区别?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 前言 本文将讲解二层交换机和三层交换机是什么&#xff0c;以及他们的区别。 目录 一、二层交换机是什么&#xff1f; 二、二层交换机的主…

本地生活多城市合伙人系统开发

本地生活多城市合伙人项目是一种基于本地生活服务的创业项目&#xff0c;旨在为各个城市的居民提供方便、实惠、高品质的生活服务。该项目通过招募多个城市的合伙人&#xff0c;建立完整的本地生活服务平台和供应链体系&#xff0c;覆盖不同类型的本地生活服务&#xff0c;如餐…

Nginx的Rewrite(地址重定向)

目录 前言 一、Rewrite 跳转场景 二、Rewrite 跳转实现 三、Rewrite实际场景 3.1Nginx跳转需求的实现方式 3.2rewrite放在 server{}&#xff0c;if{}&#xff0c;location{}段中 3.3对域名或参数字符串 四、Rewrite正则表达式 五、Rewrite语法格式 5.1rewrite语法格式…

互联网常见架构接口压测性能分析及调优手段建议

目录 互联网常见架构接口压测性能分析及调优手段建议 1 接口名称: 获取列表 1.1 压测现象:单台tps700多&#xff0c;应用cpu高负载 1.1.1 问题分析: 1.1.2 改进措施: 1.1.3 改进效果: 1.2 压测现象&#xff1a;数据库资源利用率高 1.2.1 问题分析: 1.2.2 改进措施: 1.2.3 改…

SciencePub学术 | 计算机科学类重点SCIEEI征稿中

SciencePub学术 刊源推荐:计算机科学类重点SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机科学类重点SCIE&EI 【期刊简介】IF&#xff1a;3.0-3.5&#xff0c;JCR 2区&#xff0c;中科院4区&#xff1b; 【检…

使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图

大家好&#xff0c;我是带我去滑雪&#xff01; 一幅精美的科研绘图会有诸多益处&#xff0c;精美的图像可以更好地传达研究结果和数据分析的重要信息。通过使用清晰、直观和易于理解的图像&#xff0c;可以更好地向读者展示研究的发现&#xff0c;有助于读者理解和解释数据。还…