亚马逊AWS官方博客

使用亚马逊云科技 IAM Identity Center 实现 Argo CD 的用户管理

Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具,已在 DevOps 中流行起来。它在安装过程中嵌入并捆绑了 Dex,以便将身份验证委派给外部身份提供者,并支持多种类型的身份提供者,包括 OIDC、SAML、LDAP、GitHub 等。

IAM Identity Center 可帮助您安全地创建或连接工作人员身份并跨 AWS 账户和应用程序集中管理其访问权限。您可以使用 IAM Identity Center 在 AWS 中创建和管理用户身份,或轻松连接至您现有的身份来源,例如 Okta。也可以直接在 IAM Identity Center 中创建用户。

在本文中,我们将一步步地演示使用 IAM Identity Center 作为其 IdP 为 ArgoCD 实施 SAML 身份验证的过程,也包括了Argo CD 的用户和权限设置。

解决方案概览

首先,让我们来看一下解决方案的总体流程:

  1. 我们要使用 IAM Identity Center 作为 IdP,需要选择 IAM Identity Center 作为身份源,并配置用户和用户组。
  2. 在 IAM Identity Center 中,我们基于自定义 SAML 2.0 配置第三方应用程序。在这一步中,我们将利用 ArgoCD 的配置信息,具体细节将在配置步骤中详细说明。
  3. Argo CD 的配置非常重要,其中包括 Argo CD 自己的用户配置,和如何使用 IAM Identity Center 进行设置,因为 Argo CD 集成了 DEX 以实现身份验证和授权功能,配置起来略有不同。

先决条件

您需要满足以下先决条件:

  • 拥有一个 ArgoCD 环境。如果没有,请按照此 Workshop 的步骤准备您的环境。
  • IAM Identity Center 启用,并且您应该具备创建应用程序、用户和用户组的相关 IAM 权限。

配置

在 IAM Identity Center 中创建并配置应用程序

设置您的身份源

在 IAM Identity Center 中,Identity Source 定义了您的用户和用户组是如何管理的。在本文中,我们将使用 Identity Center Directory

使用以下步骤通过 IAM Identity Center 控制台将用户添加到您的 Identity Center Directory。

添加组

  1. 创建一个新用户组:点击选项创建一个新的用户组。您可能需要提供用户组的名称或标识符。
  2. 配置用户组设置:用户组描述为可选项,并保存该用户组。

添加用户

  1. 选择 Users
  2. 选择 Add user,并提供以下必要信息:
    • Username– 在 1 到 100 个字符之间。
    • Password– 您可以选择发送一封带有密码设置说明的电子邮件(这是默认选项),或生成一次性密码。在我的情况下,我使用了“Send an email to this user with password setup instructions”选项。该选项会自动发送一封电子邮件,邮件地址来自亚马逊云科技,主题是“邀请加入 AWS 单一登录”。
  1. 添加这个用户到我们创建的 Argo CD 组

    收到邀请邮件后,请点击 Accept Invitation 并更改您的密码

添加和配置一个自定义 SAML 应用

  1. 选择 Applications 然后选择 Add application
  2. Select an application 页面,选择 Add custom SAML 2.0 application,然后点击下一步
  3. Configure application 页面, 输入应用的 Display name,例如 ArgoCD,以及在 Description 中填入对这个应用的描述信息
  4. IAM Identity Center metadata 页面中
    • IAM Identity Center SAML metadata file 下方,点击下载去下载身份提供者的元数据
    • IAM Identity Center sign-in URL 下方,拷贝完整地址,一会儿我们会用它配置 ArgoCD
    • IAM Identity Center certificate 下方,点击下载证书去下载身份提供者的证书
  1. Application properties 保留默认值Application metadata 下方选择 Manually type your metadata values,然后提供 Application ACS URL 和 Application SAML audience 的值
    https://<argo-cd-url>/api/dex/callback 
  2. Argo CD 需要自定义的 SAML 断言来传递有关用户登录的其他数据。我们使用以下步骤指定如何映射您的应用程序用户属性与 IAM Identity Center 中相应属性的关联
    • 在应用的 Details 页面,选择 Edit Attribute mappings
    • 选择 Add new attribute mapping 并输入应用程序属性。要查看 IAM Identity Center 中允许的用户属性列表,请参阅属性映射表格。这一步非常重要,请确保您已添加所需的信息
  1. 在应用的 Details 页面,在 Assigned users 部分,选择 Assign users。在 Assign users 对话框中输入我们之前创建的用户 iamidentitycenterdemo

创建 Argo CD SAML 配置

准备证书

在验证 SAML 响应的签名时,IAM Identity Center 证书起到关键作用。设置 CA 支持两种方法。

  • 指定证书的路径
     ca: /path/to/ca.pem
    caData: |
    "Your base64 encoded certificate"
    
  • 直接使用 base64 编码的证书。您需要将下载的证书使用 base64 编码。例如:
    base64 aws_iamidentitycenter_certificate.pem.pem

设置 Argo CD 用户身份验证

在配置之前,建议阅读 Argo CD 用户管理概述 和 DEX SAML 2.0 配置。如果您已经熟悉了使用 SAML 配置 Argo CD 的原则,可以继续下一步。用户配置位于 argocd-cm Configmap 中。您可以使用以下命令获取 argocd-cm 的最小配置。

kubectl get configmap argocd-cm -n argocd -o yaml > argocd-cm.yml

然后,请添加以下新部分:

  • 将 Argo CD 的 URL 复制到 argocd-cm 的 data.url 中
  • 替换以下值
    • ssoURL 替换为您复制的 IAM Identity Center sign-in URL
    • redirectURIentityIssuer 替换为您的 ArgoCD 地址
  • usernameAttremailAttr 中指定您在属性映射中添加的属性
  • 指定 caData
    data:
      dex.config: |
        logger:
          level: debug
          format: text
        connectors:
        - type: saml
          id: saml
          name: AWS IAM Identity Center
          config:
            ssoURL: https://portal.sso.us-east-1.amazonaws.com/saml/assertion/<YOUR_OWN_SSO_URL>
            caData: |
              <Your certificate >
            redirectURI: https://<your_argo-cd-url>/api/dex/callback
            entityIssuer: https://<your_argo-cd-url>/api/dex/callback
            usernameAttr: name
            emailAttr: email
      url: https://<argo-cd-url>
    

设置 Argo CD 用户访问策略

Argo CD RBAC 功能使得用户可以限制对 Argo CD 资源的访问。角色和用户组可以在 argocd-rbac-cm ConfigMap 中进行配置。请参考如下示例,详细信息请参考如何定义 Argo CD 中的访问策略

data:
policy.csv: |
g, ***@email.com, role:admin
scopes: '[email,name]'

访问 Argo CD 页面

  1. 使用 https://<argo-cd-url> 打开 Argo CD 页面,点击 LOG IN VIA AWS IAM IDENTITY CENTER

     

  1. 随后,您将看到基于 IAM Identity Center 的登录页面。一旦您输入用户名和密码,您将能够登录到 Argo CD 页面,并查看与您的 IAM Identity Center 帐户相关的用户信息。这可能包括您的用户名、电子邮件地址、角色以及与您的 IAM Identity Center 帐户关联的发行者信息

清理

在您测试完解决方案之后,请记得删除所有创建的资源,以避免未来产生费用:

  1. 删除您的 Argo CD 环境。
  2. 在 IAM Identity Center 中删除 SAML 应用程序、用户和用户组。

总结

在本文中,我们介绍了如何使用 SAML 通过 IAM Identity Center 管理 Argo CD 用户的解决方案。包括如何配置用户、用户组,并使用自定义 SAML 2.0 方法将 Argo CD 集成到 IAM Identity Center 中。同时,还包括了如何在 Argo CD 中配置用户和权限。根据您的需求,可以按照相同的流程设置您的环境。

参考链接

IAM Identity Center user, group and applications configuration 

Argo CD User management Overview

Authentication through SAML 2.0

Argo CD RBAC Configuration

附录 – Troubleshooting

问题 1:当通过“LOG IN VIA AWS IAM IDENTITY CENTER”登入的时候,遇到如下错误:

解决方案:

在跟踪 SAML 请求后,我们发现 name-id 格式是 persistent

通过修改 unspecified 为 persistent,问题解决。

问题 2:如果您已成功验证了您的身份但仍无法访问主 Argo CD 界面并查看仪表板,您可能需要检查日志以获取进一步的信息。以下是查看日志的步骤:

kubectl logs argocd-server-67f667d48c-dmz62 -n argocd
kubectl logs argocd-dex-server-858cfd495f-8mf68 -n argocd

解决方案:重启 argocd-server

问题 3:Argo CD 的 RBAC 配置

解决方案:IAM Identity Center 不支持组级别 的 map 属性,访问权限是通过 emails 或 users 配置的。在 argocd-cm 中,需要删除 groupsAttr,否则会报错。

问题 4:如果您遇到一个错误消息,其中包含“Failed to query provider”并且无法重定向到 IAM Identity Center 的身份验证界面,这表明 Argo CD 和 IAM Identity Center 之间的集成存在问题。

解决方案:argocd-cm 中,将 URL’s link 从 http 修改为 https。

本篇作者

冯秋爽

亚马逊云科技解决方案架构师,负责跨国企业级客户基于亚马逊云科技的技术架构设计、咨询和设计优化工作。在加入亚马逊云科技之前曾就职于 IBM、甲骨文等 IT 企业,积累了丰富的程序开发和数据库的实践经验。

郭松

亚马逊云科技解决方案架构师,负责企业级客户的架构咨询及设计优化,同时致力于 AWS IoT 和存储服务在国内和全球企业客户的应用和推广。加入亚马逊云科技之前在 EMC 研发中心担任系统工程师,对企业级存储应用的高可用架构,方案及性能调优有深入研究。