🐡
thirdwebのSDKを使い、秘密鍵をAWSのKMSで管理しよう!
こんにちは、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