ACK One GitOps 安全模型

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ACK One GitOps 安全模型

安全模型


场景

用户

角色

资源范围

职责

oneadmin

超级管理员

所有

  • 创建和配置本地用户
  • 创建和配置project
  • 为本地用户授予权限策略
  • 增删改查Repositories等全局资源

team01-admin

项目管理员

项目team01

  • 增删改查Repositories等Project级别资源

team02-admin

项目管理员

项目team02

  • 增删改查Repositories等Project级别资源

team01-user01

应用管理员

team01/production-app

  • 增删改查team01/production-app应用

team01-user02

应用管理员

team01/staging-app

  • 增删改查team01/staging-app应用

操作步骤

(1)编辑argocd/argocd-cm 新增本地用户    (目前需要手动编辑cm)

data:
  accounts.oneadmin: apiKey,login
  accounts.oneadmin.enabled: "true"
  accounts.team01-admin: login
  accounts.team01-admin.enabled: "true"
  accounts.team01-user01: login
  accounts.team01-user01.enabled: "true"
  accounts.team01-user02: login
  accounts.team01-user02.enabled: "true"
  accounts.team02-admin: login
  accounts.team02-admin.enabled: "true"
  admin.enabled: "false"

(2)编辑argocd/argocd-rbac-cm 为本地用户设置RBAC Rules(目前需要手动编辑cm)

data:
  policy.csv: |2
    ...
    p, role:team01-admin, projects, get, team01, allow
    p, role:team01-admin, repositories, *, team01/*, allow
    p, role:team01-admin, applications, *, team01/*, allow
    p, role:team01-admin, repositories, get, *, allow
    p, role:team01-admin, clusters, get, *, allow
    p, role:team02-admin, projects, get, team02, allow
    p, role:team02-admin, repositories, *, team02/*, allow
    p, role:team02-admin, applications, *, team02/*, allow
    p, role:team02-admin, repositories, get, *, allow
    p, role:team02-admin, clusters, get, *, allow
    p, role:team01-user01, projects, get, team01, allow
    p, role:team01-user01, repositories, get, team01/*, allow
    p, role:team01-user01, repositories, get, *, allow
    p, role:team01-user01, clusters, get, *, allow
    p, role:team01-user01, applications, *, team01/production-app, allow
    p, role:team01-user02, projects, get, team01, allow
    p, role:team01-user02, repositories, get, team01/*, allow
    p, role:team01-user02, repositories, get, *, allow
    p, role:team01-user02, clusters, get, *, allow
    p, role:team01-user02, applications, *, team01/staging-app, allow
    ...
    g, team01-admin, role:team01-admin
    g, team02-admin, role:team02-admin
    g, team01-user01, role:team01-user01
    g, team01-user02, role:team01-user02

(3) 查看本地用户并为其设置密码(oneadmin操作)

export ARGOCD_OPTS='--port-forward-namespace argocd --port-forward'
argocd account list
NAME           ENABLED  CAPABILITIES
admin          false    login
oneadmin       true     apiKey, login
team01-admin   true     login
team01-user01  true     login
team01-user02  true     login
team02-admin   true     login

设置密码:

argoargocd account update-password --account <username> --current-password <current password> --new-password <new password>

(4) 添加全局repository(oneadmin操作)

argocd repo add https://code.aliyun.com/bigteam/echo-server01.git
argocd repo add https://code.aliyun.com/bigteam/echo-server02.git
argocd repo list
TYPE  NAME  REPO                                               INSECURE  OCI    LFS    CREDS  STATUS      MESSAGE  PROJECT
git         https://code.aliyun.com/bigteam/echo-server01.git  false     false  false  false  Successful
git         https://code.aliyun.com/bigteam/echo-server02.git  false     false  false  false  Successful


(5) 创建和设置project(oneadmin操作)

创建project team01 和team02

允许project team01中使用git repository https://code.aliyun.com/bigteam/echo-server01.git 和cluster https://47.111.181.57:6443

允许project team01中使用git repository https://code.aliyun.com/bigteam/echo-server02.git 和cluster https://47.97.216.237:6443

argocd proj create team01
argocd proj add-source team01 https://code.aliyun.com/bigteam/echo-server01.git
argocd proj add-destination team01 https://47.111.181.57:6443 "*"
argocd proj create team02
argocd proj add-source team02 https://code.aliyun.com/bigteam/echo-server02.git
argocd proj add-destination team02 https://47.97.216.237:6443 "*"


ps:这里要求oneadmin有update cluster的权限,需要更新当前的oneadmin role policy

(6)project内创建repositories (team01-admin和team02-admin分别操作)

首先使用team01-admin用户登录

argocd login 
Username: team01-admin
Password:
'team01-admin:login' logged in successfully
Context 'port-forward' updated

在team01内创建repositories

argocd repo add https://code.aliyun.com/team01/echo-server.git --project team01
Repository 'https://code.aliyun.com/team01/echo-server.git' added

使用team02-admin用户登录

argocd login 
Username: team02-admin
Password:
'team01-admin:login' logged in successfully
Context 'port-forward' updated

在team02内创建repositories

argocd repo add https://code.aliyun.com/team02/echo-server.git --project team02
Repository 'https://code.aliyun.com/team02/echo-server.git' added


测试和验证

首先使用team01-admin用户登录

argocd login 
Username: team01-admin
Password:
'team01-admin:login' logged in successfully
Context 'port-forward' updated

项目管理员权限

projects资源

测试team01-admin对projects资源的操作权限:

argocd account can-i create projects "*"
no
argocd account can-i update projects "team01"
no
argocd account can-i delete projects "team01"
no
argocd account can-i get projects "team01"
yes
argocd account can-i get projects "team02"
no


即项目管理员只能看到project team01,无其他操作权限。

repositories资源

测试team01-admin对repositories资源的操作权限:

argocd account can-i create repositories "*"
no
argocd account can-i update repositories "*"
no
argocd account can-i delete repositories "*"
no
argocd account can-i get repositories "*"
yes
argocd account can-i create repositories "team01/*"
yes
argocd account can-i update repositories "team01/*"
yes
argocd account can-i delete repositories "team01/*"
yes
argocd account can-i get repositories "team01/*"
yes

即项目管理员只能查看全局repositories,可以增删改查team01下的repositories

clusters资源

测试team01-admin对clusters资源的操作权限:

argocd account can-i create clusters "*"
no
argocd account can-i update clusters "*"
no
argocd account can-i delete clusters "*"
no
argocd account can-i get clusters "*"
yes
argocd account can-i create clusters "team01/*"
no
argocd account can-i update clusters "team01/*"
no
argocd account can-i delete clusters "team01/*"
no

即项目管理员只能查看全局clusters,无其他操作权限

applications资源

测试team01-admin对applications资源的操作权限:

argocd account can-i create applications "*"
no
argocd account can-i update applications "*"
no
argocd account can-i delete applications "*"
no
argocd account can-i get applications "*"
no
argocd account can-i create applications "team01/*"
yes
argocd account can-i update applications "team01/*"
yes
argocd account can-i delete applications "team01/*"
yes
argocd account can-i get applications "team01/*"
yes

即项目管理员只有team01下的增删改查权限,无其他操作权限

application创建测试

查看项目管理员team01-admin对project team01的资源权限信息,可以引用的repositories是 全局repo https://code.aliyun.com/bigteam/echo-server01.git  和项目内repo https://code.aliyun.com/team01/echo-server.git, 可以引用的clusters为 https://47.111.181.57:6443

argocd proj get team01
Name:                        team01
Description:
Destinations:                https://47.111.181.57:6443,*
Repositories:                https://code.aliyun.com/bigteam/echo-server01.git
Scoped Repositories:         https://code.aliyun.com/team01/echo-server.git
Allowed Cluster Resources:   <none>
Scoped Clusters:             <none>
Denied Namespaced Resources: <none>
Signature keys:              <none>
Orphaned Resources:          disabled

测试使用不同的repositories和clustrers创建应用:

尝试在在team01之外创建application失败(符合预期)

argocd app create team01-admin-echo-server --repo https://code.aliyun.com/bigteam/echo-server02.gitargocd app create team01-admin-echo-s--repo erver https://47.97.216.237:6443
FATA[0001] rpc error: code = PermissionDenied desc = permission denied: applications, create, default/team01-admin-echo-server, sub: team01-admin, iat: 2022-10-20T03:20:47Z

使用没有被授权的repositories或clusters:

argocd app create team01-admin-echo-server --project team01 --repo https://code.aliyun.com/bigteam/echo-server02.git --path  manifests/directory/production --dest-namespace team01-admin-echo-server --dest-server https://47.97.216.237:6443
FATA[0002] rpc error: code = InvalidArgument desc = application spec for team01-admin-echo-server is invalid: InvalidSpecError: application repo https://code.aliyun.com/bigteam/echo-server02.git is not permitted in project 'team01';InvalidSpecError: application destination {https://xx.xx.xx.xx:6443 team01-admin-echo-server} is not permitted in project 'team01


使用team01允许的repositories和clusters:

argocd app create team01-admin-echo-server --project team01 --repo https://code.aliyun.com/bigteam/echo-server01.git --path  manifests/directory/production --dest-namespace team01-admin-echo-server --dest-server https://xx.xx.xx.xx:6443
application 'team01-admin-echo-server' created


应用管理员权限

只有project内application资源的操作权限

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
23天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
3月前
|
Kubernetes 负载均衡 网络安全
Kubernetes 网络模型与实践
【8月更文第29天】Kubernetes(K8s)是当今容器编排领域的佼佼者,它提供了一种高效的方式来管理容器化应用的部署、扩展和运行。Kubernetes 的网络模型是其成功的关键因素之一,它支持服务发现、负载均衡和集群内外通信等功能。本文将深入探讨 Kubernetes 的网络模型,并通过实际代码示例来展示服务发现和服务网格的基本概念及其实现。
123 1
|
30天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
1月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
1月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
159 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
3月前
|
Kubernetes 负载均衡 安全
在k8S中,网络模型概念是什么?
在k8S中,网络模型概念是什么?
|
3月前
|
Kubernetes 监控 容灾
ACK One舰队管理:企业级多集群管理解决方案
ACK One舰队管理是阿里云为您提供的强大的多集群管理方案,功能众多:GitOps应用分发、多集群网关、多集群Service、全局可观测、服务网格、统一权限管理等,方便您轻松应对混合云、多集群、容灾等场景的问题,简化多集群管理。
|
3月前
|
Kubernetes 网络虚拟化 容器
在K8S中,cailico的ipip模型和ciliume的vxlan模型除了在具体的实现不同,在原理上有何区别?
在K8S中,cailico的ipip模型和ciliume的vxlan模型除了在具体的实现不同,在原理上有何区别?
|
3月前
|
Kubernetes 安全 Linux
在K8S中,calico和cilium这两种cni有什么区别?cailico的ipip模型和ciliume的vxlan模型,两种不通模型性能也不同,它们怎么处理数据的?
在K8S中,calico和cilium这两种cni有什么区别?cailico的ipip模型和ciliume的vxlan模型,两种不通模型性能也不同,它们怎么处理数据的?

相关产品

  • 容器服务Kubernetes版
  • 下一篇
    无影云桌面