🐡

thirdwebのSDKを使い、秘密鍵をAWSのKMSで管理しよう!

2022/12/07に公開

こんにちは、CryptoGamesのユウキです。

本日は、AWSのKMSを使った秘密鍵の管理についてみていきます。

KMSのマスターキーは出力することができず、AWS内で安全に保管されるので、セキュリティが上がります。

では、見ていきましょう。

1.KMSでキーを作成する

AWSのKMSのページに行きます。

「カスタマー管理のキー」から「キーの作成」

下のように、「非対称」、「署名および検証」、「ECC_SECG_P256K1」を選択して「次へ」

任意のエイリアスを設定して、「次へ」

任意のキー管理者を選んで、「次へ」

任意の使用アカウントを選んで、「次へ」

内容を確認の上、問題がなさそうなら、「完了」

こちらの「ARN」を後から設定していくことになります。

2.KMSからウォレットアドレスを取得する

では、先ほど作成したキーからウォレットアドレスを取得していきましょう。

任意のフォルダでpackage.jsonを作成

yarn init

次の4点をインストール
・ @thirdweb-dev/sdk
・ @aws-sdk/client-secrets-manager
・ ethers-aws-kms-signer
・ dotenv

yarn add @thirdweb-dev/sdk @aws-sdk/client-secrets-manager ethers-aws-kms-signer dotenv

では、実際にKMSからウォレットアドレスを抽出してみましょう。

「index.mjs」に、下のように参考のコードを載せます。

import { ThirdwebSDK } from "@thirdweb-dev/sdk";
import { AwsKmsWallet } from "@thirdweb-dev/sdk/evm/wallets";
import { config } from "dotenv";

config();

async function main() {
  const wallet = new AwsKmsWallet({
    region: "ap-northeast-1",
    keyId:
      "arn:aws:kms:ap-northeast-1:○○○○○:key/XXXX-XXXX-XXXX-XXXX-XXXX",
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  });

  const sdk = await ThirdwebSDK.fromWallet(wallet, "goerli");
  const address = await sdk.getSigner().getAddress();
  console.log(address);
  sdk.console.log(await sdk.getSigner().getBalance());
}

main();

次のようになりました。

「.env」にアクセスキーとシークレットアクセスキーを入れます。

「.gitignore」に、「.env」を設定します。

これで、準備ができたので、「node index.mjs」で実行を行います。

下のように、ウォレットアドレスが取得できれば成功です。

以上です。

ぜひやってみてください。

Discussion