在Grafana配置SAML验证
SAML验证集成允许Grafana用户登录使用外部SAML 2.0身份提供者(IdP)。启用,Grafana成为一个服务提供商(SP)的认证流程,与国内流离失所者交换用户交互信息。
SAML单点登录(SSO)标准多种多样和灵活。我们的实现包含提供所需的功能的一个子集到Grafana顺利认证经验。
注意:可以在Grafana企业和Grafana云Pro和先进。
支持SAML
Grafana支持SAML 2.0绑定:
从服务提供商(SP)身份提供者(IdP):
http - post
绑定http重定向
绑定
从身份提供者(IdP)服务提供商(SP):
http - post
绑定
在安全方面:
- Grafana支持签署和加密的断言。
- Grafana不支持签名或加密请求。
的起始,Grafana支持:
- SP-initiated请求
- IdP-initiated请求
默认情况下,启用SP-initiated请求。说明如何启用IdP-initiated登录,请参阅IdP-initiated单点登录(SSO)。
编辑SAML Grafana配置文件中的选项
- 在
(auth.saml)
部分Grafana配置文件,设置启用
来真正的
。 - 配置证书和私钥。
- Okta应用程序页面上你已经重定向应用程序创建后,导航到上签字选项卡,找到身份提供商元数据链接设置部分。
- 设置
idp_metadata_url
从上一步获得的URL。URL应该是什么样的https:// < your-org-id >.okta.com/app/ <应用程序id > / sso saml /元数据
。 - 设置以下选项的配置属性名称第十步SAML一体化的设置。你能找到这个属性一般应用程序的选项卡页面(属性声明和组属性声明在SAML设置部分)。
- 保存配置文件,然后重新启动Grafana服务器。
当你完成的时候,Grafana配置看起来像这个例子:
(服务器)root_url = https://grafana.example.com(身份验证。saml)启用= true private_key_path = " /路径/ / private_key。pem " certificate_path = " /道路/ /证书。cert”idp_metadata_url = " https://my-org.okta.com/app/my-application/sso/saml/metadata " assertion_attribute_name = DisplayName assertion_attribute_login =登录assertion_attribute_email =邮件assertion_attribute_groups =组
使在Grafana SAML验证
在使用SAML集成auth.saml
部分Grafana自定义配置文件,设置启用
来真正的
。
指配置关于Grafana配置的更多信息。
证书和私钥
SAML SSO标准使用非对称加密SP (Grafana)之间交换信息和国内流离失所者。要执行这样的加密,您需要一个公共部分和一个私人部分。在这种情况下,证书提供了公共部分,而私钥则提供了私人部分。私钥需要发行的PKCS # 8格式。
Grafana支持两种方式指定的证书
和private_key
。
- 没有一个后缀
证书
或private_key
),配置假设您已经提供了base64编码文件的内容。 - 与
_path
后缀(certificate_path
或private_key_path
),然后Grafana对待所输入的值作为一个文件路径和试图从文件系统读取该文件。
注意:你只能使用一种形式的每个配置选项。使用多种形式,例如
证书
和certificate_path
,会导致错误。
例子如何生成SAML凭证:
的一个例子如何生成一个自签名证书和私钥的有效期为一年:
美元openssl点播x509 newkey rsa: 4096 -keyout关键。pem治疗cert.pem天365节点
对cert.pem和关键执行base64编码。pem文件:(w0开关不需要在Mac上,只对Linux)
美元base64 w0关键。pem > key.pem。base64美元base64 w0 cert.pem > cert.pem.base64
base64编码的值(key.pem。base64, cert.pem.base64
文件)和private_key然后用于证书。
您提供的键应该看起来像:
- - - - -开始私钥- - - - - -……- - - - - - - - - - -端私钥
建立与Okta SAML
通过Okta Grafana支持用户身份验证,这是有用的,当你想让你的用户访问Grafana使用单点登录。本指南将跟随你Grafana配置SAML验证的步骤Okta。你在Okta组织需要管理员访问管理控制台并创建SAML集成。你还需要权限来编辑Grafana配置文件并重新启动Grafana服务器。
在你开始之前:
建立与Okta SAML:
登录到Okta门户。
去Okta组织通过单击管理控制台管理在右上角。如果你在开发人员控制台,然后单击开发人员控制台在左上角,然后单击经典的UI切换到管理控制台。
在管理控制台中,导航到应用程序>应用程序。
点击添加应用程序。
点击创建新应用启动应用程序集成向导。
选择网络作为一个平台。
选择SAML 2.0在登录方法部分。
点击创建。
在一般设置Grafana集成选项卡中,输入一个名称。您还可以上传一个标志。
在配置SAML选项卡上,输入SAML信息相关Grafana实例:
在单点登录网址字段中,使用
saml / acs
例如,端点URL的Grafana实例https://grafana.example.com/saml/acs
。在观众URI (SP实体ID)字段中,使用
saml /元数据
端点URL,例如,https://grafana.example.com/saml/metadata
。保留默认值名称标识格式和应用程序的用户名。
在属性声明(可选)部分,输入SAML属性与Grafana共享,例如:
属性名称(Grafana) 值(在Okta概要文件) 登录 user.login
电子邮件 user.email
DisplayName 用户。firstName + " " + user.lastName
在组属性声明(可选)部分,输入一组属性名称(例如,
集团
)并设置过滤器匹配正则表达式。
返回所有用户组。
点击下一个。
在最后的反馈选项卡上,填写表格,然后点击完成。
在Grafana配置SAML验证
下表描述了所有SAML配置选项。继续阅读下面有关特定选项。像任何其他Grafana配置,您可以应用这些选项环境变量。
设置 | 要求 | 描述 | 默认的 |
---|---|---|---|
启用 |
没有 | SAML验证是否允许 | 假 |
single_logout |
没有 | SAML单注销是否启用 | 假 |
allow_sign_up |
没有 | 是否允许通过SAML创造新的Grafana用户登录。如果设置为假 ,那么只有现有与SAML Grafana用户可以登录。 |
真正的 |
allow_idp_initiated |
没有 | SAML IdP-initiated是否允许登录 | 假 |
证书 或certificate_path |
是的 | base64编码字符串或SP证书路径 | |
private_key 或private_key_path |
是的 | base64编码的字符串或路径SP私钥 | |
signature_algorithm |
没有 | 签名算法用于签名的国内流离失所者的请求。支持值rsa-sha1, rsa-sha256 rsa-sha512。 | |
idp_metadata ,idp_metadata_path ,或idp_metadata_url |
是的 | base64编码的字符串,路径或URL IdP SAML XML元数据 | |
max_issue_delay |
没有 | 时间,因为国内流离失所者发出响应和SP可以处理它 | 90年代 |
metadata_valid_duration |
没有 | 持续时间,多久SP的元数据是有效的 | 48小时 |
relay_state |
没有 | 继电器状态IdP-initiated登录。应与继电器状态配置在国内流离失所者 | |
assertion_attribute_name |
没有 | 友好的名称或名称的属性在SAML断言作为用户名。或者,这是一个模板变量匹配在SAML断言属性的名称。 | displayName |
assertion_attribute_login |
没有 | 友好的名称或名称的属性在SAML断言作为用户登录处理 | 邮件 |
assertion_attribute_email |
没有 | 友好的名称或名称的属性在SAML断言作为用户的电子邮件 | 邮件 |
assertion_attribute_groups |
没有 | 友好的名称或名称的属性在SAML断言使用用户组 | |
assertion_attribute_role |
没有 | 友好的名称或名称的属性在SAML断言使用用户角色 | |
assertion_attribute_org |
没有 | 友好的名称或名称的属性在SAML断言作为用户组织 | |
allowed_organizations |
没有 | 逗号或空格分隔的列表组织。用户应该至少有一个组织的成员登录。 | |
org_mapping |
没有 | 逗号或空格分隔的列表组织:OrgId:角色映射。组织可以* 意思是“所有用户”。角色是可选的,可以有下列值:查看器 ,编辑器 或管理 。 |
|
role_values_editor |
没有 | 逗号或空格分隔的列表将映射到角色编辑器的作用 | |
role_values_admin |
没有 | 逗号或空格分隔的角色列表将被映射到Admin角色 | |
role_values_grafana_admin |
没有 | 逗号或空格分隔的列表将映射到角色Grafana管理员(超级管理员)的作用 |
签名算法
注意:Grafana 7.3和更高版本中可用。
使用数字签名SAML标准建议对于某些类型的消息,如身份验证或注销请求。如果signature_algorithm
选项配置,Grafana将数字签名SAML请求。支持签名类型是rsa-sha1
,rsa-sha256
,rsa-sha512
。这个选项应该匹配您的国内流离失所者配置,否则,签名验证失败。配置了Grafana使用密钥和证书private_key
和证书
选择签名SAML请求。
国内流离失所者的元数据
您还需要为消息定义的公共部分国内流离失所者验证。SAML IdP元数据XML定义在哪里以及如何Grafana交流的用户信息。
Grafana支持三种方式指定的国内流离失所者的元数据。
- 没有后缀
idp_metadata
,Grafana假定base64编码的XML文件的内容。 - 与
_path
后缀,Grafana假定一个文件路径,试图从文件系统读取该文件。 - 与
_url
后缀,Grafana假定一个URL和尝试加载元数据从给定的位置。
最大问题延迟
防止SAML响应重播攻击和内部时钟之间的倾斜SP (Grafana)和国内流离失所者。你可以设置一个最大的时间之间的国内流离失所者发出响应和SP (Grafana)处理。
配置选项指定持续时间,等max_issue_delay = 90年代
或max_issue_delay = 1 h
。
元数据的有效时间
SP元数据可能会在某些时候到期,或许是由于证书旋转或改变位置的绑定。Grafana允许您指定元数据应该多久有效。利用validUntil
字段,你可以告诉消费者,直到当你的元数据是有效的。持续时间计算通过添加当前时间的时间。
配置选项指定持续时间,等metadata_valid_duration = 48小时
。
身份提供商(IdP)登记
SAML集成正确工作,您需要使国内流离失所者意识到SP。
集成提供了两个关键的端点作为Grafana的一部分:
- 的
saml /元数据
端点,它包含SP元数据。你可以手动下载和上传它,或者你让国内流离失所者请求直接从端点。一些供应商的名字标识符或实体的ID。 - 的
saml / acs
端点,是为了接收ACS(断言客户服务)的回调。一些供应商的名字SSO URL或回复URL。
IdP-initiated单点登录(SSO)
注意:Grafana 7.3和更高版本中可用。
默认情况下,Grafana只允许服务提供商(SP)发起登录(用户登录时通过Grafana与SAML的登录页面)。如果你想要用户登录到Grafana直接从你的身份提供者(IdP),设置allow_idp_initiated
配置选项真正的
和配置relay_state
国内流离失所者配置中指定的值相同。
IdP-initiated SSO有安全风险,所以确保你理解风险之前启用这个特性。当使用IdP-initiated SSO, Grafana收到不请自来的SAML请求和无法验证用户登录流程开始。这使得很难检测SAML消息是否被偷了或更换。正因为如此,IdP-initiated SSO是容易登录跨站点请求伪造(CSRF)和中间人MITM攻击。我们不推荐使用IdP-initiated SSO和尽可能的保持它禁用。
单注销
注意:Grafana 7.3和更高版本中可用。
SAML的单注销功能允许用户退出所有应用程序与当前国内流离失所者会话建立通过SAML SSO。如果single_logout
选项设置为真正的
和用户日志,Grafana IdP结束用户会话的请求进而触发从所有其他应用程序用户注销登录会话使用相同的国内流离失所者(应用程序应该支持单注销)。相反,如果另一个应用程序连接到相同的国内流离失所者使用单注销,注销Grafana收到注销请求从国内流离失所者和用户会话结束。
http重定向
和http - post
绑定是支持单注销。当使用http重定向
绑定请求查询应该包括签名。
断言映射
在SAML SSO身份验证流程,Grafana接收ACS的回调。回调包含所有用户的相关信息在SAML验证嵌入式下反应。Grafana解析响应创建(或更新)用户在其内部数据库。
Grafana地图用户信息,它看起来在个体中的属性断言。你可以把这些属性的键/值对(虽然,它们包含更多的信息)。
Grafana提供配置选项,让你看看哪个键进行修改这些值。数据我们需要创建用户在Grafana名称、登录处理,和电子邮件。
的assertion_attribute_name
选项
assertion_attribute_name
是一个特殊的断言映射,它可以是一个简单的键,指示一个映射到一个SAML断言属性反应,或一个复杂的模板变量使用吗美元__saml{<属性>}
语法。如果此属性配置错误,Grafana将记录一个错误消息在启动时和禁止SAML登录。Grafana之后还将日志错误登录尝试,如果一个变量在模板中没有SAML的回应。
例子
#普通字符串映射assertion_attribute_name = displayName
#模板映射assertion_attribute_name = $ __saml {firstName} $ __saml {lastName}
允许新用户注册
默认情况下,新Grafana用户使用SAML验证将会自动创建了一个帐户。解耦验证和帐户创建和确保只与SAML与现有的账户可以登录用户,设置allow_sign_up
选择错误的。
配置团队同步
注意:团队同步支持SAML 7.0及以后版本可在Grafana。
使用SAML团队同步设置assertion_attribute_groups
你在哪里存储用户组属性名称。然后Grafana将使用属性值从SAML断言将用户添加到组具有相同名称的配置在外部组同步选项卡。
配置角色同步
注意:Grafana 7.0和更高版本中可用。
角色同步允许您从身份提供者Grafana地图用户角色。同步,使角色配置角色属性和可能的值的编辑,管理,Grafana Admin角色。关于用户角色的更多信息,请参考角色和权限。
- 在配置文件中设置
assertion_attribute_role
选择角色信息的属性名称将被提取。 - 设置
role_values_editor
选择映射到的值编辑器
的角色。 - 设置
role_values_admin
选项的值映射到组织管理
的角色。 - 设置
role_values_grafana_admin
选择映射到的值Grafana管理
的角色。
如果一个用户角色不匹配的配置值,然后查看器
角色分配。
关于Grafana角色和权限的更多信息,请参考角色和权限。
示例配置:
(auth.saml)assertion_attribute_role= role role_values_editor = editor, developer role_values_admin = admin, operator role_values_grafana_admin = superadmin
重要的:当角色配置同步,任何更改的用户角色和组织成员在Grafana手动将覆盖下一个用户登录。分配用户组织和角色的国内流离失所者。
注意:Grafana 9.2和更高版本中可用。
如果你不希望用户组织和角色与国内流离失所者同步,您可以使用skip_org_role_sync
配置选项。
示例配置:
(auth.saml)skip_org_role_sync= true
配置组织映射
注意:Grafana 7.0和更高版本中可用。
组织映射允许您将用户分配给特定组织Grafana根据属性值从身份提供商获得。
- 在配置文件中,集
assertion_attribute_org
你商店组织信息的属性名称。这个属性是一个数组,如果你想要一个用户在多个组织。 - 集
org_mapping
选项的逗号分隔列表组织:OrgId
对映射组织从IdP Grafana组织指定的id。如果你想要用户拥有不同的角色在多个组织中,您可以设置这个选项的逗号分隔列表组织:OrgId:角色
映射。
例如,使用以下配置来分配用户工程
组织与id Grafana组织2
编辑和用户销售
——组织的id3
管理,基于Org
断言属性值:
(auth.saml)assertion_attribute_org= Org org_mapping = Engineering:2:Editor, Sales:3:Admin
您可以指定多个组织的国内流离失所者和Grafana:
org_mapping =工程:2,销售:2
将用户映射工程
和销售
来2
在Grafana。org_mapping =工程:2,工程:3
分配工程
两个2
和3
在Grafana。
您可以使用*
作为SAML组织如果你想要你所有的用户在某些Grafana组织有一个默认角色:
org_mapping = *: 2:编辑器
所有的用户映射到2
在Grafana编辑。
注意:Grafana 9.2和更高版本中可用。
您可以使用*
作为映射Grafana组织如果你想从一个给定的SAML组织所有用户添加到所有现有Grafana组织。
org_mapping =工程:*
将用户映射工程
所有现有Grafana组织。org_mapping =管理:*:Admin
将用户映射政府
所有现有的Grafana组织管理员。
配置允许组织
注意:Grafana 7.0和更高版本中可用。
与allowed_organizations
选项可以指定组织的列表,用户必须至少其中之一的一员能够登录Grafana。
SAML示例配置
(auth.saml)启用= true certificate_path = "/path/to/certificate.cert" private_key_path = "/path/to/private_key.pem" idp_metadata_path = "/my/metadata.xml" max_issue_delay = 90s metadata_valid_duration = 48h assertion_attribute_name = displayName assertion_attribute_login = mail assertion_attribute_email = mail assertion_attribute_groups = Group assertion_attribute_role = Role assertion_attribute_org = Org role_values_editor = editor, developer role_values_admin = admin, operator role_values_grafana_admin = superadmin org_mapping = Engineering:2:Editor, Engineering:3:Viewer, Sales:3:Editor, *:1:Editor allowed_organizations = Engineering, Sales
排除在Grafana SAML验证
解决和得到更多的日志信息,使SAML调试日志记录在配置文件中。指配置为更多的信息。
(日志)过滤器= saml.auth:调试
故障排除
以下是Grafana配置SAML验证中发现的常见问题,如何解决这些问题。
SAML验证失败与错误:
asn1:结构错误:标签不匹配
我们只支持一个私有密钥格式:PKCS # 8。
钥匙可能在不同的格式(PKCS # 1或pkcs# 12);在这种情况下,可能需要转换格式的私钥。
下面的命令创建一个pkcs8密钥文件。
美元openssl点播x509 newkey rsa: 4096 -keyout关键。pem治疗cert.pem天365节点
转换私钥base64格式
下面的命令将钥匙base64格式。
对cert.pem和关键执行base64编码。pem文件:(w0开关不需要在Mac上,只对Linux)
美元base64 w0关键。pem > key.pem。base64美元base64 w0 cert.pem > cert.pem.base64
base64编码的值(key.pem。base64, cert.pem.base64
文件)和private_key然后用于证书。
您提供的键应该看起来像:
- - - - -开始私钥- - - - - -……- - - - - - - - - - -端私钥
SAML登录尝试失败请求响应“起源”不允许
使用SAML当用户登录,并获得了“起源不允许”,发出登录的用户可能会从一个国内流离失所者(身份提供者)服务或反向代理背后的用户。这可能发生的Grafana CSRF检查认为无效的请求。的更多信息CSRF。
为了解决这个问题,您可以配置csrf_trusted_origins
或csrf_additional_headers
SAML配置选项。
一个配置文件的例子:
#配置。ini……[安全]csrf_trusted_origins = https://grafana.example.com csrf_additional_headers = X-Forwarded-Host……
SAML登录尝试失败,请求响应“登录会话已经过期”
访问Grafana登录页面的URL不根URL Grafana服务器可以导致实例返回下列错误:“登录会话已过期”。
如果你是通过代理服务器访问grafana,确保正确饼干grafana的根URL重写。饼干必须设置相同的urlroot_url
Grafana。这通常是反向代理的域/地址。
审查cookie设置代理服务器配置确保饼干不被丢弃
检查以下设置在你grafana配置:
[安全]cookie_samesite =没有
这个设置应该设置为不允许grafana会话cookie和重定向正常工作。
[安全]cookie_secure = true
确保cookie_secure设置为true,以确保饼干只送到HTTPS。