Grafana通过IDaaS实现用户SSO、角色SSO

本文介绍了如何通过阿里云IDaaS实现Grafana用户与角色的单点登录(SSO)。内容包括GrafanaDocker环境部署、IDaaSOIDC应用的创建与配置、GrafanaOAuth集成步骤,以及角色映射和SSO功能验证。通过本指南,您可快速完成GrafanaIDaaS的对接,实现安全便捷的统一身份认证与权限管理。

一、安装Grafana

步骤一:环境准备

# 检查Docker版本并验证是否安装成功
docker --version

步骤二:获取镜像

# 拉取Grafana 9.3.2版本镜像
docker pull grafana/grafana:9.3.2

步骤三:配置Grafana数据目录与初始化文件

  1. 创建Grafana目录并设置权限

    # 创建Grafana所需的目录结构并设置权限
    mkdir -p /opt/grafana/{data,plugins,config} && \
    chmod -R 777 /opt/grafana/{data,plugins,config}
  2. 准备配置文件

    # 创建临时容器拷贝配置文件后自动清理
    docker run --rm --name grafana-tmp -d -p 3000:3000 grafana/grafana:9.3.2 && \
    docker cp grafana-tmp:/etc/grafana/grafana.ini /opt/grafana/config/grafana.ini && \
    docker stop grafana-tmp
    
    # 按需编辑配置文件
    # vim /opt/grafana/config/grafana.ini

步骤四:启动容器

docker run -d \                                                     # 启动容器
    --name grafana \                                                # 容器命名为grafana
    --restart unless-stopped \                                      # 自动重启策略(除非手动停止)
    -p 3000:3000 \                                                  # 映射容器3000端口到主机3000端口
    --user "$(id -u):$(id -g)" \                                    # 使用当前用户权限运行,增强安全性
    -v /etc/localtime:/etc/localtime:ro \                           # 同步主机时间配置(只读)
    -v /opt/grafana/data:/var/lib/grafana \                         # 持久化存储grafana数据
    -v /opt/grafana/plugins:/var/lib/grafana/plugins \              # 持久化存储插件
    -v /opt/grafana/config/grafana.ini:/etc/grafana/grafana.ini \   # 使用自定义配置文件
    -e GF_SECURITY_ADMIN_PASSWORD=<your password> \                 # 设置密码
    -e GF_PATHS_CONFIG=/etc/grafana/grafana.ini \                   # 明确指定配置文件路径
    -e GF_PATHS_DATA=/var/lib/grafana \                             # 明确指定数据目录
    -e GF_PATHS_PLUGINS=/var/lib/grafana/plugins \                  # 明确指定插件目录
    grafana/grafana:9.3.2                                           # 使用特定版本镜像

步骤五:服务验证

访问Grafana登录页面。在浏览器地址栏输入http://服务器IP地址:端口号(例如http://192.168.1.100:3000),进入Grafana登录界面。输入注册的邮箱或用户名和密码,点击Log in完成登录。

image

二、在IDaaS中创建OIDC应用

在阿里云IDaaS中创建标准协议的OIDC应用,您需要按照以下步骤操作:

  1. 登录到阿里云IDaaS EIAM控制台,进入实例页面。

  2. 在左侧导航栏,选择应用 > 添加应用

  3. 单击标准协议标签页,并在OIDC卡片中点击添加应用

  4. 在弹出的添加应用- OIDC协议对话框中,输入应用名称并点击立即添加以创建应用。

  5. 创建完成后,在OIDC应用详情页面,选择登录访问 > 单点登录 > 登录 Redirect URI

    登录 Redirect URI中,请将 Redirect URI 设置为http://${***********}/login/generic_oauth。请确保将${}替换为您的实际服务地址(如域名或 IP)。

  6. 展开显示高级配置,选择需要获取的用户信息范围,然后保存配置。

  7. 登录访问 > 应用授权部分,点击添加授权,为之前创建的用户授权,然后保存授权

完成上述步骤后,您需要记录当前应用的client_id、client_secret、授权端点、令牌端点、用户信息端点等配置信息,这些信息将在后续配置单点登录时使用。确保妥善保存这些信息,因为它们是Grafana应用与IDaaS之间建立信任关系的关键。

三、Grafana 配置 OAuth 与阿里云 IDaaS 集成

IDaas EIAM

您需要从IDaaS获取两部分关键信息,将其提供给Grafana进行配置。

  1. 获取client_idclient_secret。在通用配置标签页面中查看并记录您的client_idclient_secret认证凭证信息。image

  2. 获取请求端点。切换到登录访问 > 单点登录标签页,在页面下方获取三个字段:

    • 授权端点

    • 令牌端点

    • 用户信息端点

    image

  3. 登录访问 > 单点登录标签页中,填写登录 Redirect URI(此处重定向URIGrafana的访问地址)。image

  4. 登录访问 > 单点登录标签页中,填写扩展 id_token,使用表达式:ArrayMap(user.groups, __item.groupName)。image

Grafana应用侧

  1. 修改Grafana配置

    重要

    请提前确认令牌端点(token_url)和用户信息端点(api_url)与应用服务器的网络互通性。

    1. 进入Grafana配置文件目录

      cd /opt/grafana/config
    2. 修改grafana.ini配置文件。找到generic_oauth配置,修改以下配置,其他字段无需变更。详情请参见:配置通用 OAuth 身份验证

      # generic_oauth配置
      [auth.generic_oauth]
      # 是否启用通用OAuth认证,必须为 true
      enabled = true  
      # 显示名称(会出现在登录按钮上)
      name = AliCloud IDaaS 
      # 是否允许新用户通过 OAuth 注册
      allow_sign_up = true          
      # 在IDaaS获取的客户端标识(必填)
      client_id =app_******
      # 在IDaaS获取的客户端密钥(敏感信息,需妥善保管)
      client_secret =CS4gno67**********h3V5uNYp3W1CQW767WZ7ewjZKehe
      # IDaaS 的授权端点,用户认证和授权请求地址
      auth_url =https://of5mhrcn.aliyunidaas.com/login/app/app_******/oauth2/authorize
      # IDaaS 的令牌端点,用于获取access_tokenid_token
      token_url =https://eiam-api-cn-hangzhou.aliyuncs.com/v2/idaas_******/app_******/oauth2/token
      # IDaaS 的用户信息端点, 用于获取用户基本信息
      api_url =https://eiam-api-cn-hangzhou.aliyuncs.com/v2/idaas_******/app_******/oauth2/userinfo
      # 获取邮箱节点JMEpath
      email_attribute_path=data.email
      # 必要的权限范围
      scopes = openid,profile,email,phone
      
      #如果需要将 IDaaS 中的用户角色映射到 Grafana 角色,可以添加:
      role_attribute_path = contains(roles[*], 'admin') && 'GrafanaAdmin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer'
      #允许将IDaaS管理员映射为Grafana超级用户
      allow_assign_grafana_admin = true
      
      [server]
      # 这里的root_url需要修改为真实的地址,因为授权回调的redirect_uri是这个 grafana地址
      root_url =http://60.***.***.144:3000
      重要
      • role_attribute_path可根据实际需求具体配置,详情请参见:配置角色映射

      • 所有包含 ****** 的配置值都需要替换为从阿里云IDaaS获取的实际值。

    3. 角色映射(role_attribute_path)规则说明:

      • roles[*]:表示从用户的属性中提取一个名为 roles 的数组(通常是 OAuth 或 LDAP 返回的用户角色列表)。

      • contains(roles[*], 'admin'):检查 roles 数组中是否包含值为 'admin' 的元素。

      • 如果 roles 数组中包含 'admin',则将用户角色设置为 'GrafanaAdmin'(即 Grafana 超级管理员)。

      • 如果 roles 数组中不包含 'admin',但包含 'editor',则将用户角色设置为 'Editor'(即编辑者权限)。

      • 如果 roles 数组中既不包含 'admin' 也不包含 'editor',则将用户角色设置为 'Viewer'(即查看者权限)。

  2. 重启grafana服务。请在修改配置后保存,并执行重启Grafana服务的操作以确保新配置生效。

    docker restart grafana

四、验证Grafana SSO

  1. 用户SSO

    Grafana登录页面单击Sign in with AllCloud IDaaS按钮。若当前未登录IDaaS账户,系统会自动跳转至IDaaS登录页面。完成身份验证后,您将自动登录Grafana系统。

    重要

    若未显示SSO登录选项,需确认Grafana配置文件中已正确启用 IDaaS作为认证提供商。

    image

  2. 角色SSO

    IDaaS创建不同角色组,将需要授权的用户添加到组即可。

    1. IDaaS中为用户分配不同角色组(如 admineditorviewer)。image

    2. 将组授权给在IDaaS中创建OIDC应用。

    3. 使用不同角色的用户通过SSO登录Grafana。

    4. 检查用户权限是否符合预期:

      • Admin用户:应拥有Grafana超级管理员权限(可管理数据源、用户等)。

      • Editor用户:可创建和编辑仪表盘,但无法管理用户。

      • Viewer用户:仅可查看仪表盘。

    5. 若角色映射异常,检查grafana.ini中的role_attribute_path配置,确保表达式与IDaaS返回的角色属性匹配。

重要

Grafana采用OAuth 2.0协议实现单点登录(SSO),但仅支持由Grafana服务提供商(SP)发起的SSO流程,不支持由身份提供商(IdP)发起的SSO。在使用SSO功能前,请确保您的IDaaS账户名与Grafana用户名保持一致。若账户名不一致,您需要在IDaaS中配置账户关联关系,或在Grafana中创建对应的新用户。