跳到主要内容

签名插件

所有由 Grafana Labs 编写的后端插件(包括企业插件)都会经过签名,以便我们通过签名验证来验证其真实性。默认情况下,Grafana 要求所有插件都经过签名才能加载。

信息

在开发期间或首次提交插件进行审核时,无需对插件进行签名。使用 @grafana/create-plugin 构建的Docker 开发环境将加载未签名的插件。这是因为它默认配置为在开发模式下运行。

公共或私有插件

根据作者、相关技术和预期用途,插件可以具有不同的签名级别

插件可以是公共的,签名类型为社区或商业,并在Grafana 插件目录中分发,以便其他人安装。或者您可以将其设置为私有,仅供您组织内部使用。

在为插件签名之前,请查阅插件政策以确定适合您插件的签名类型。

生成访问策略令牌

为了验证您对插件的所有权,请生成一个访问策略令牌,每次需要为新版本插件签名时都会用到它。

  1. 创建 Grafana Cloud 账户.

  2. 登录您的账户,然后前往 **我的账户 > 安全 > 访问策略**。

  3. 点击**创建访问策略**。

    领域 (Realm):必须是 **您的组织名称** (your-org-name)(all-stacks)
    范围 (Scope):**plugins:write**

    Create access policy.
    创建访问策略。
  4. 点击**创建令牌**以生成新令牌。

    **过期日期**是可选的,但您应定期更换令牌以提高安全性。

    Create access policy token.
    创建访问策略令牌。
  5. 点击**创建**,然后将令牌副本保存在安全的地方以备将来参考。

  6. 继续为您的公共插件私有插件签名。

签名公共插件

公共插件需要先经过 Grafana 团队的审核才能进行签名。

  1. 提交您的插件进行审核

  2. 如果您的插件获得批准,您将被授予一个插件签名级别。您需要此签名级别才能继续操作。

  3. 在您的插件目录中,使用刚刚创建的访问策略令牌为插件签名。Grafana sign-plugin 工具将在插件的 dist 目录中创建一个 MANIFEST.txt 文件。

    export GRAFANA_ACCESS_POLICY_TOKEN=<YOUR_ACCESS_POLICY_TOKEN>
    npx @grafana/sign-plugin@latest

签名私有插件

  1. 在您的插件目录中,使用刚刚创建的访问策略令牌为插件签名。Grafana sign-plugin 工具将在插件的 dist 目录中创建一个 MANIFEST.txt 文件。

    export GRAFANA_ACCESS_POLICY_TOKEN=<YOUR_ACCESS_POLICY_TOKEN>
    npx @grafana/sign-plugin@latest --rootUrls https://example.com/grafana
  2. rootUrls 标志之后,输入您打算安装插件的 Grafana 实例的 URL 列表,用逗号分隔。

插件清单

为了让 Grafana 验证插件的数字签名,插件必须包含一个已签名的清单文件,即 MANIFEST.txt。已签名的清单文件包含两部分:

  • 签名消息 - 包含插件元数据和带有相应校验和 (SHA256) 的插件文件。
  • 数字签名 - 使用私钥加密签名消息创建。Grafana 内置了一个公钥,可用于验证数字签名是否是使用预期的私钥加密的。

示例

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

{
"manifestVersion": "2.0.0",
"signatureType": "community",
"signedByOrg": "myorgid",
"signedByOrgName": "My Org",
"plugin": "myorgid-simple-panel",
"version": "1.0.0",
"time": 1602753404133,
"keyId": "7e4d0c6a708866e7",
"files": {
"LICENSE": "12ab7a0961275f5ce7a428e662279cf49bab887d12b2ff7bfde738346178c28c",
"module.js.LICENSE.txt": "0d8f66cd4afb566cb5b7e1540c68f43b939d3eba12ace290f18abc4f4cb53ed0",
"module.js.map": "8a4ede5b5847dec1c6c30008d07bef8a049408d2b1e862841e30357f82e0fa19",
"plugin.json": "13be5f2fd55bee787c5413b5ba6a1fae2dfe8d2df6c867dadc4657b98f821f90",
"README.md": "2d90145b28f22348d4f50a81695e888c68ebd4f8baec731fdf2d79c8b187a27f",
"module.js": "b4b6945bbf3332b08e5e1cb214a5b85c82557b292577eb58c8eb1703bc8e4577"
}
}
-----BEGIN PGP SIGNATURE-----
Version: OpenPGP.js v4.10.1
Comment: https://openpgpjs.org

wqEEARMKAAYFAl+IE3wACgkQfk0ManCIZudpdwIHTCqjVzfm7DechTa7BTbd
+dNIQtwh8Tv2Q9HksgN6c6M9nbQTP0xNHwxSxHOI8EL3euz/OagzWoiIWulG
7AQo7FYCCQGucaLPPK3tsWaeFqVKy+JtQhrJJui23DAZLSYQYZlKQ+nFqc9x
T6scfmuhWC/TOcm83EVoCzIV3R5dOTKHqkjIUg==
=GdNq
-----END PGP SIGNATURE-----

故障排除

为什么我会收到“签名已修改”错误?

在某些情况下,由于在 Windows 上签名插件时出现问题,会生成无效的 MANIFEST.txt 文件。您可以通过将 MANIFEST.txt 文件中的所有双反斜杠 \\ 替换为正斜杠 / 来解决此问题。每次签名插件时都需要执行此操作。

为什么我的公共插件会收到“字段是必需的:rootUrls”错误?

对于公共插件,您的插件尚未分配插件签名级别。一旦插件经过审核并获得批准,Grafana 团队成员将为其分配一个签名级别。有关更多信息,请参阅签名公共插件

为什么我的私有插件会收到“字段是必需的:rootUrls”错误?

对于私有插件,您需要向 plugin:sign 命令添加 rootUrls 标志。rootUrls 必须与root_url 配置匹配。有关更多信息,请参阅签名私有插件

如果您仍然收到此错误,请确保访问策略令牌是由与插件 ID 的第一部分匹配的 Grafana Cloud 账户生成的。