跳到主要内容

签署插件

所有 Grafana Labs 编写的后端插件,包括企业版插件,都经过签名,以便我们可以使用签名验证来验证其真实性。默认情况下,Grafana 要求所有插件都必须签名才能加载。默认,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 账户生成的。