访问控制和用户管理
为用户和命名空间配置用户身份验证和访问控制
摘要
第 1 章 配置 Argo CD RBAC 复制链接链接已复制到粘贴板!
默认情况下,除 kube:admin 用户外的任何类型的用户,登录到默认的 Argo CD 实例无法访问任何服务。但是,登录自定义 Argo CD 实例的用户默认为只读用户。
在 Red Hat OpenShift GitOps v1.9.0 或更早版本中,除 kube:admin 用户外,使用 Red Hat SSO (RH SSO)登录到 Argo CD 是只读用户。
1.1. 配置用户级别访问权限 复制链接链接已复制到粘贴板!
要管理和修改用户级别访问权限,请在 Argo CD 自定义资源(CR)中配置基于角色的访问控制(RBAC)部分。
流程
编辑
argocdCR:$ oc edit argocd [argocd-instance-name] -n [namespace]输出
metadata ... ... rbac: policy: 'g, rbacsystem:cluster-admins, role:admin' scopes: '[groups]'将策略配置添加到
rbac部分,再添加要应用到用户的名称和所需的角色:metadata ... ... rbac: policy: g, <name>, role:<admin> scopes: '[groups]'
目前,RHSSO 无法读取 Red Hat OpenShift GitOps 用户的组信息。因此,在用户级别配置 RBAC。
第 2 章 使用 Dex 为 Argo CD 配置 SSO 复制链接链接已复制到粘贴板!
安装 Red Hat OpenShift GitOps Operator 后,Argo CD 会自动创建一个具有 admin 权限的用户。要管理多个用户,集群管理员可以使用 Argo CD 来配置 Single Sign-On(SSO)。
ArgoCD CR 中的 spec.dex 参数不再支持 Red Hat OpenShift GitOps v1.10.0。考虑改用 .spec.sso 参数。
2.1. 配置以启用 Dex OpenShift OAuth Connector 复制链接链接已复制到粘贴板!
对于 Operator 创建的所有 Argo CD 实例,默认安装 Dex。您可以通过设置 .spec.sso 参数,将 Red Hat OpenShift GitOps 配置为使用 Dex 作为 SSO 身份验证供应商。
Dex 通过检查平台提供的 OAuth 服务器,使用 OpenShift Container Platform 中定义的用户和组。
流程
要启用 Dex,请在 Operator 的 YAML 资源中将
.spec.sso.provider参数设置为dex:# ... spec: sso: provider: dex dex: openShiftOAuth: true1 # ...- 1
openShiftOAuth属性触发 Operator,当值设为true时自动配置内置 OpenShift Container PlatformOAuth服务器。
2.1.1. 将用户映射到特定的角色 复制链接链接已复制到粘贴板!
如果有直接 ClusterRoleBinding 角色,Argo CD 无法将用户映射到特定角色。您可以通过 OpenShift,手动更改 SSO 上的 role:admin 角色。
流程
创建名为
cluster-admins的组。$ oc adm groups new cluster-admins将用户添加到组。
$ oc adm groups add-users cluster-admins USER将
cluster-adminClusterRole应用到组:$ oc adm policy add-cluster-role-to-group cluster-admin cluster-admins
2.2. 通过替换 .spec.sso 禁用 Dex 复制链接链接已复制到粘贴板!
-
要禁用 dex,可以从 Argo CD 自定义资源中删除
spec.sso元素,或者指定不同的 SSO 供应商。
第 3 章 使用 Keycloak 为 Argo CD 配置 SSO 复制链接链接已复制到粘贴板!
安装 Red Hat OpenShift GitOps Operator 后,Argo CD 会自动创建一个具有 admin 权限的用户。要管理多个用户,集群管理员可以使用 Argo CD 来配置 Single Sign-On(SSO)。
3.1. 先决条件 复制链接链接已复制到粘贴板!
- 在集群中安装了 Red Hat SSO。
- Red Hat OpenShift GitOps Operator 安装在 OpenShift Container Platform 集群中。
- 在集群中安装了 Argo CD。
-
在集群中提供了
DeploymentConfigAPI。如需更多信息,请参阅 "DeploymentConfig [apps.openshift.io/v1]"。
3.2. 在 Keycloak 中配置新客户端 复制链接链接已复制到粘贴板!
对于 Operator 创建的所有 Argo CD 实例,默认安装 Dex。但是,您可以删除 Dex 配置并添加 Keycloak,以使用 OpenShift 凭证登录到 Argo CD。Keycloak 作为 Argo CD 和 OpenShift 之间的身份代理。
流程
要配置 Keycloak,请按照以下步骤执行:
通过从 Argo CD 自定义资源 (CR) 中删除
.spec.sso.dex参数来删除 Dex 配置,并保存 CR:dex: openShiftOAuth: true resources: limits: cpu: memory: requests: cpu: memory:-
在 Argo CD CR 中将
provider参数的值设置为keycloak。 通过执行以下步骤配置 Keycloak:
对于安全连接,设置
rootCA参数的值,如下例所示:apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: sso: provider: keycloak keycloak: rootCA: "<PEM-encoded-root-certificate>"1 server: route: enabled: true- 1
- 用于验证 Keycloak 的 TLS 证书的自定义证书。
Operator 会协调
.spec.sso.keycloak.rootCA参数中的更改,并使用argocd-cm配置映射中 PEM 编码的 root 证书更新oidc.config参数。对于不安全连接,将
rootCA参数的值留空,并使用oidc.tls.insecure.skip.verify参数,如下所示:apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: extraConfig: oidc.tls.insecure.skip.verify: "true" sso: provider: keycloak keycloak: rootCA: ""可选:自定义
spec.sso.keycloak字段,在ArgoCDCR 中为keycloak供应商添加路由名称。使用此功能支持高级路由用例,如在多个 Ingress Controller 分片 之间平衡传入的流量负载。使用以下示例 YAML 在
ArgoCDCR 中添加host参数:ArgoCDCR 示例apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: <resource_name>1 labels: example: route spec: sso: provider: keycloak keycloak: host: <hostname>2 server: ingress: enabled: true insecure: true要创建
ArgoCD CR,请运行以下命令:$ oc create -f <argocd_filename>.yaml -n <your-namespace>要编辑
ArgoCD CR,请运行以下命令:$ oc edit -f <argocd_filename>.yaml -n <your_namespace>- 保存文件以使改变生效。
要应用
ArgoCDCR,请运行以下命令:$ oc apply -f <argocd_filename>.yaml -n <your_namespace>运行以下命令验证
host属性是否已添加:$ oc get route keycloak -n <your_namespace> -o yaml输出示例
kind: Route metadata: name: keycloak1 labels: application: keycloak spec: host: sso.test.example.com status: ingress: - host: sso.test.example.com2
Keycloak 实例需要 2-3 分钟来安装和运行。
3.3. 登录到 Keycloak 复制链接链接已复制到粘贴板!
登录到 Keycloak 控制台以管理身份或角色,并定义分配给不同角色的权限。
先决条件
- 删除 Dex 的默认配置。
- Argo CD CR 必须配置为使用 Keycloak SSO 供应商。
流程
获取用于登录的 Keycloak 路由 URL:
$ oc -n argocd get route keycloak NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD keycloak keycloak-default.apps.ci-ln-******.origin-ci-int-aws.dev.**.com keycloak <all> reencrypt None获取将用户名和密码存储为环境变量的 Keycloak pod 名称:
$ oc -n argocd get pods NAME READY STATUS RESTARTS AGE keycloak-1-2sjcl 1/1 Running 0 45m获取 Keycloak 用户名:
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME SSO_ADMIN_USERNAME=Cqid54Ih获取 Keycloak 密码:
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD SSO_ADMIN_PASSWORD=GVXxHifH
在登录页面上,点 LOG IN VIA KEYCLOAK。
注意您只能在 Keycloak 实例就绪后看到 LOGIN VIA KEYCLOAK 选项。
点 Login with OpenShift。
注意不支持使用
kubeadmin登录。- 输入要登录的 OpenShift 凭据。
可选: 默认情况下,登录到 Argo CD 的任何用户都具有只读访问权限。您可以通过更新
argocd-rbac-cm配置映射来管理用户级别访问权限:policy.csv: <name>, <email>, role:admin
3.4. 卸载 Keycloak 复制链接链接已复制到粘贴板!
您可以通过从 Argo CD 自定义资源(CR)文件中删除 SSO 字段来删除 Keycloak 资源及其相关配置。删除 SSO 字段后,文件中的值类似如下:
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: example-argocd
labels:
example: basic
spec:
server:
route:
enabled: true
使用此方法创建的 Keycloak 应用程序当前不是持久性。在服务器重启时,在 Argo CD Keycloak 域中创建的其他配置会被删除。
3.5. 修改 Keycloak 资源请求/限制 复制链接链接已复制到粘贴板!
默认情况下,Keycloak 容器使用资源请求和限值创建。您可以更改并管理资源请求。
| 资源 | Requests | Limits |
|---|---|---|
| CPU | 500m | 1000m |
| 内存 | 512 Mi | 1024 Mi |
流程
- 修改默认资源要求,修补 Argo CD 自定义资源(CR):
$ oc -n openshift-gitops patch argocd openshift-gitops --type='json' -p='[{"op": "add", "path": "/spec/sso", "value": {"provider": "keycloak", "resources": {"requests": {"cpu": "512m", "memory": "512Mi"}, "limits": {"cpu": "1024m", "memory": "1024Mi"}} }}]'
Red Hat OpenShift GitOps Operator 创建的 Keycloak 仅保留 Operator 所做的更改。如果 Keycloak 重启,则删除 Keycloak 中的管理员创建的额外配置。