#aws-kms #signer #sign #transaction #ethereum #key #set

ethers_aws

使用 AWS KMS 签署以太坊交易的库

1 个不稳定版本

0.1.0 2023 年 12 月 24 日

#18 in #aws-kms

每月 37 次下载

MIT/Apache

21KB
371

AWSSigner

ether_aws 是围绕 aws sdk 的包装器,允许使用 AWS KMS 作为签名者,AWSSigner AWSSigner 完全实现了来自 ether-rs 的 Signer 特性。

快速入门

将以下内容添加到您的 Cargo.toml 中

[dependencies]
ethers_aws = "0.1"

用法

//Set up all credentials
let access_key = std::env::var("ACCESS_KEY").expect("ACCESS_KEY must be in environment");
let secret_access_key = std::env::var("SECRET_ACCESS_KEY").expect("SECRET_ACCESS_KEY must be in environment");
let key_id: String = std::env::var("KEY_ID").expect("KEY_ID must be in environment");
let region = std::env::var("REGION").expect("REGION must be in environment");
//Create the signer
let aws_signer = AWSSigner::new(
        ethers::types::Chain::Mainnet as u64,
        access_key,
        secret_access_key,
        key_id,
        region,
    )
    .await
    .expect("Cannot create AWS signer");
let provider = Provider::<Http>::try_from(anvil.endpoint()).unwrap();
let signer_middleware = SignerMiddleware::new(provider, aws_signer);

//Create transaction as usual
let one_ether: U256 = parse_units(1, 18 as i32).unwrap().into();
let tx_request = Eip1559TransactionRequest::new().to(Address::zero())
        .value(one_ether);
let response = signer_middleware.send_transaction(tx_request, None)

AWS 设置(可选)

创建 IAM 用户

必须创建具有适当权限的 AWS IAM 用户。在创建过程中,为要创建的 IAM 用户添加以下策略。

AWSKeyManagementServicePowerUser
ROSAKMSProviderPolicy

创建后,转到新创建的用户并为其添加访问密钥。选择 在 AWS 外部运行的应用程序。保存 access_keysecret_access_key

创建新的公钥私钥对

转到 AWKS KMS 页面并按照以下步骤操作

  1. 选择 创建密钥
  2. 密钥类型 设置为 Asymmetric
  3. 密钥用途 设置为 Sign and Verify
  4. 密钥规范 设置为 ECC_SECG_P256K1
  5. 点击下一步并添加标签
  6. 点击下一步,在 密钥管理员 中选择在 创建 IAM 用户 部分创建的用户
  7. 点击下一步,在 密钥用户 中选择在 创建 IAM 用户 部分创建的用户
  8. 密钥创建后,获取 key_id

将此库安装到您的 rust 项目中

cargo add ethers_aws

示例

您可以运行项目中提供的简单示例。确保在您的环境中设置了适当的 AWS KMS 凭据。查看 测试 部分,了解如何设置凭据的示例。

cargo run -p simple_example

测试

单元测试需要设置 KMS 凭据。请在您的环境中设置这些值。

export ACCESS_KEY=<ACCESS_KEY>
eexport SECRET_ACCESS_KEY=<SECRET_ACCESS_KEY>
export KEY_ID=<KEY_ID>
export REGION=<REGION<

依赖项

~45–62MB
~1M SLoC