#signer #gcp #kms #ethers #key #ethers-rs #ethereum

ethers-gcp-kms-signer

使用 GCP KMS 的 ethers-rs 签署者

6 个版本

0.1.5 2023 年 12 月 20 日
0.1.4 2023 年 7 月 25 日
0.1.3 2023 年 6 月 5 日
0.1.2 2023 年 4 月 19 日

#2396 in 魔法豆

Download history 13/week @ 2024-04-15 30/week @ 2024-04-22 37/week @ 2024-04-29 43/week @ 2024-05-06 45/week @ 2024-05-20 37/week @ 2024-05-27 105/week @ 2024-06-03 81/week @ 2024-06-10 111/week @ 2024-06-17 80/week @ 2024-06-24 62/week @ 2024-07-01 88/week @ 2024-07-08 158/week @ 2024-07-15 88/week @ 2024-07-22

398 每月下载量

MIT/Apache

17KB
303

ethers-gcp-kms-signer

Crates.io Docs.rs CI

安装

Cargo

cargo add ethers-gcp-kms-signer

用法

签署者

use ethers::prelude::*;
use ethers_gcp_kms_signer::{GcpKeyRingRef, GcpKmsProvider, GcpKmsSigner};

let project_id = std::env::var("GOOGLE_PROJECT_ID").expect("GOOGLE_PROJECT_ID");
let location = std::env::var("GOOGLE_LOCATION").expect("GOOGLE_LOCATION");
let keyring = std::env::var("GOOGLE_KEYRING").expect("GOOGLE_KEYRING");
let key_name = std::env::var("GOOGLE_KEY_NAME").expect("GOOGLE_KEY_NAME");

let keyring = GcpKeyRingRef::new(&project_id, &location, &keyring);
let provider = GcpKmsProvider::new(keyring)
    .await
    .expect("Failed to create GCP KMS provider");
let signer = GcpKmsSigner::new(provider, key_name.to_string(), 1, 1)
    .await
    .expect("get key");

您可以用它作为常规的 ethers 签署者

let provider = Provider::<Http>::try_from(RPC_URL).unwrap().with_signer(signer);

凭证

该库将尝试按照 GCP 的典型方式加载凭证-

  • 如果应用程序在 k8s 集群中运行,它应该会自动获取凭证
  • 如果设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量,尝试从该路径加载服务帐户 JSON

演示

仓库中包含一个示例应用程序,其中包含 terraform 清单来配置一个基于 HSM 的密钥,创建一个具有使用该密钥签名权限的服务帐户,并导出一个包含此服务帐户凭证的 json 密钥。

首先,初始化并应用 terraform

$ cd example/terraform
$ terraform init
$ terraform apply

输出服务帐户凭证

$ terraform output service_account_key > service_account_key.json

以导出可用的服务帐户密钥格式

$ cat service_account_key.json | jq -r | base64 -d > ../demo-app/service_account_key.json

运行示例

 export GOOGLE_PROJECT_ID=<project_id>
 export GOOGLE_LOCATION=<location>
 export GOOGLE_KEYRING=<keyring-name>
 export GOOGLE_KEY_NAME=<key-name>
 export GOOGLE_APPLICATION_CREDENTIALS=service_account_key.json
 cargo run
   Compiling demo-app v0.1.0 (/home/grw/src/ethers-gcp-kms-signer/example/demo-app)
    Finished dev [unoptimized + debuginfo] target(s) in 6.14s
     Running `target/debug/demo-app`
Created signer: GcpKmsSigner { ... }
Signer address: 0xa2e83c0ecc9ffeddb34e027bf3c44971c45fca12
Anvil running at `https://127.0.0.1:40023`
Sent 1 ETH to the signer
Sent 1 Wei from the signer
Signer balance: 999960621324999999

许可

根据您的选择,许可协议为以下之一

贡献

除非您明确说明,否则根据 Apache-2.0 许可证定义,您提交的任何有意包含在作品中的贡献,都将根据上述条款进行双重许可,不附加任何其他条款或条件。

请参阅 CONTRIBUTING.md

依赖关系

~130MB
~2M SLoC