このチュートリアルでは、安全で堅牢なシークレット管理ソリューションである Pulumi ESC(Environments, Secrets, and Configuration)の使い方を手順ごとに説明します。
セキュリティのベストプラクティスに沿って Wrangler で開発する方法を進めます。
具体的には、Cloudflare アカウントへのログイン用 CLOUDFLARE_API_TOKEN の管理、ESC に保存したシークレットの Workers への受け渡し、.dev.vars ファイルのプログラムによる読み込みを学びます。
次を用意してください。
- Cloudflare アカウント。Cloudflare アカウントに登録 ↗ します。
- Pulumi Cloud アカウント。Pulumi Cloud に登録 ↗ します。
- Pulumi ESC CLI ↗ をインストールします。
- Wrangler プロジェクト。作成する場合は 新しい Worker プロジェクトを作成する手順 に従います。
Pulumi ESC Environment ↗(Environment)は、アプリケーションとインフラの設定とシークレットを含む YAML ファイルです。シェルコマンドなど、いくつかの方法でアクセスできます。ESC Environment はすべて Pulumi Cloud アカウントに置きます。
Pulumi ESC CLI で Pulumi Cloud アカウントにログインします。
esc loginLogged in to pulumi.com as ....ESC_ENV=wrangler/my-dev-environment
esc env init $ESC_ENVEnvironment created.Pulumi ESC Environment を作成したら、さまざまな方法で利用できます。たとえば、シェルにあらかじめ認証情報を定義せずに Cloudflare アカウントへログインできます。
CLOUDFLARE_API_TOKEN を外部の安全な場所に保存すると、アクセスを制御し、トークン値をローテーションできます。wrangler は非対話モードで実行します。次が必要です。
プレースホルダー 123abc を、対応する値に置き換えます。
esc env set $ESC_ENV environmentVariables.CLOUDFLARE_ACCOUNT_ID 123abc
esc env set $ESC_ENV environmentVariables.CLOUDFLARE_API_TOKEN 123abc --secretCloudflare アカウントに現在ログインしていないことを確認します。
npx wrangler logoutNot logged in, exiting...ESC に保存した Cloudflare 認証情報を Wrangler へ渡します。
esc run ${ESC_ENV} npx wrangler whoamiGetting User settings...
👋 You are logged in with an API Token.esc run コマンドを使うと、Environment を開き、指定した環境変数を一時的な環境に設定します。その後、wrangler コマンドのコンテキストでそれらの変数を使います。CI/CD 環境で wrangler コマンドを実行するときに、認証情報をパイプラインへ直接保存したくない場合に特に役立ちます。
Pulumi ESC はシークレットを一元管理し、Wrangler で Workers やほかの Cloudflare リソースへ渡せます。この用途では wrangler secret put コマンドを使います。
esc env set ${ESC_ENV} environmentVariables.TOP_SECRET "aliens are real" --secretesc run -i ${ESC_ENV} -- sh -c 'echo "$TOP_SECRET" | npx wrangler secret put TOP_SECRET'外部のシークレット管理ソリューションを使うと、よく使う Worker シークレットを 1 つの共有 Environment に保存し、関連する Workers からアクセスできます。esc とシェルコマンドを組み合わせてスクリプト化し、デプロイパイプラインや make コマンドに組み込めます。CLI の各コマンドの詳細は esc [command] --help を参照してください。
このステップでは、.dev.vars ファイルをプログラムで読み込む Environment を設定します。
.dev.vars のシークレットをすべて保存する専用の ESC Environment があれば、dotenv エクスポートフラグを使えます。
E=wrangler/my-devvars
esc env init $EEnvironment created.esc env set $E environmentVariables.TOP_SECRET "the moon is made of cheese" --secretesc env open ${E} --format dotenv > .dev.vars.dev.vars ファイルにはシークレットが含まれることが多いため、ソース管理へコミットしないでください。シークレットを外部に置くと、新しい開発環境へ損失なく読み込めます。
Wrangler コマンド用のシークレットを読み込む Pulumi ESC Environment を設定し、Wrangler での開発時のセキュリティを高めました。外部化したシークレットは、Workers 間で再利用できます。Pulumi ESC の機能と統合 ↗ を確認するか、Pulumi で Worker をデプロイする チュートリアルへ進んでください。