签署插件
所有 Grafana Labs 编写的后端插件,包括企业插件,都进行了签名,以便我们可以通过 签名验证 来验证其真实性。默认情况下,Grafana 要求所有插件都必须签名才能加载。
在开发过程中或首次提交插件进行审核时,无需签署插件。使用 @grafana/create-plugin
构建的带有 Docker 开发环境将加载未签名的插件。这是因为它默认配置为在 开发模式 下运行。
公共或私有插件
插件可以根据其作者、相关技术和预期用途具有不同的 签名级别。
插件可以是公开的,作为社区或商业版签发,并在Grafana插件目录中分发,以便其他人可以安装。或者,您也可以将其设置为私有的,仅可在您的组织内使用。
在签发插件之前,请查看插件策略,以确定适合您插件的签名方式。
生成访问策略令牌
为了验证您对插件的所有权,生成一个访问策略令牌,您将每次需要为您的插件签发新版本时使用它。
-
登录您的账户,然后转到我的账户 > 安全 > 访问策略。
-
点击创建访问策略。
领域:必须是您的组织名称(所有栈)
范围:plugins:write -
点击创建令牌以创建新的令牌。
过期日期是可选的,尽管您应该定期更改令牌以提高安全性。
-
点击创建,然后将令牌的副本保存在安全的地方以备将来参考。
为公开插件签名
在您可以为公开插件签名之前,必须由Grafana团队进行审查。
-
提交您的插件进行审查。
-
如果您的插件获得批准,您将获得插件签名级别。您需要此签名级别才能继续。
-
在您的插件目录中,使用您刚刚创建的访问策略令牌为插件签名。Grafana sign-plugin工具在插件的
dist
目录中创建了一个MANIFEST.txt文件export GRAFANA_ACCESS_POLICY_TOKEN=<YOUR_ACCESS_POLICY_TOKEN>
npx @grafana/sign-plugin@latest
为私有插件签名
-
在您的插件目录中,使用您刚刚创建的访问策略令牌为插件签名。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 -
在
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账户生成的。