こんにちは!クラウドインフラの世界へようこそ。
日々、膨大な環境変数やシークレット(APIキーやパスワード)の管理に頭を悩ませていませんか?「ステージングと本番で設定が微妙に違う」「誰がどの権限を持っているのか分からない」「`.env`ファイルがローカルに散乱している……」——SREやインフラエンジニアなら誰もが一度は通る地獄ですよね。
今回は、そんなシークレットと設定地獄から私たちを救い出してくれる、Pulumiの最新機能「Pulumi ESC(Environments, Secrets, and Configurations)」について徹底解説します。
これをマスターすれば、マルチクラウド環境の設定管理や動的なシークレット取得が驚くほどエレガントになり、毎日のインフラ作業が劇的に楽になりますよ。さあ、一緒に次世代の構成管理の世界へ足を踏み入れましょう!
—
1. Pulumi ESCとは何か?(ツールの役割)
一言で言うと、「あらゆる環境変数、設定ファイル、そして動的シークレットを階層的に管理し、安全に配布するための次世代オーケストレーター」です。
従来のツール(AWS Secrets Manager、HashiCorp Vault、あるいは単なるdotenvファイルなど)には、「設定の継承が難しい」「静的なシークレットのローテーションが面倒」「複数のクラウドプロバイダー(AWS, GCP, Azure)をまたいだ認証情報の動的生成が複雑」という課題がありました。
ESCは、これらを「YAMLによる宣言的な環境定義」として統合します。さらに、AWSのIAM一時クレデンシャルやOIDC(OpenID Connect)と動的に連携し、「持続的な静的シークレットを一切持たない(セートレス・シークレット)」世界を実現します。
—
2. 導入と基礎セットアップ
それでは、手元の環境でESCを使えるようにセットアップしていきましょう。非常にシンプルです。
前提条件
- Pulumi CLI がインストールされていること(`v3.100.0` 以降推奨)
- Pulumi Cloud のアカウントを持っていること(無料枠で試せます)
ステップ1: Pulumi CLIのログインと最新化
まずはCLIが最新であることを確認し、Pulumi Cloudにログインします。
Pulumi CLIのアップデート
pulumi login
ログイン状態の確認
pulumi whoami
ステップ2: ESC CLIの基本操作
Pulumi ESCは、Pulumi CLIに統合されています。特別なプラグインを入れなくても、`pulumi env` コマンドを通じて操作可能です。
ESC環境の操作ヘルプを確認
pulumi env –help
準備はこれだけです!拍子抜けするほど簡単ですね。
—
3. HelloWorld:はじめてのESC環境構築
百聞は一見に如かず。実際にESCの環境(Environment)を作成し、設定とシークレットを定義してみましょう。
環境定義ファイル(YAML)の作成
Pulumi ESCでは、環境をYAMLファイルで定義します。今回は `development.yaml` というファイルを作成してみましょう。
開発環境用の基本設定とシークレットを定義するESC環境
values:
# 静的な環境変数や設定値
environment: “development”
project: “saas-app”
# 通常の設定値の階層構造
aws:
region: “ap-northeast-1”
vpc_cidr: “10.0.0.0/16”
# 暗号化されたシークレット(Pulumi ESCが安全に暗号化)
secret:
api_key: “sk-live-super-secret-12345”
ESCへの環境のインポート(登録)
作成したYAMLファイルを、Pulumi Cloud上のESCに登録(オープン)します。組織名(または個人のユーザー名)を適宜読み替えてください。
my-org 組織内に “dev-env” という名前で環境を作成・登録
pulumi env init my-org/dev-env
pulumi env set my-org/dev-env –file development.yaml
これだけで、クラウド上に安全な設定ストアが構築されました!
動作確認:設定のプレビューと取得
登録した環境から、設定やシークレットを安全に取り出してみましょう。
環境の値を確認(シークレットは自動的にマスクされます)
pulumi env open my-org/dev-env
特定の値だけを抽出して標準出力に出力(シークレットを復号)
pulumi env open my-org/dev-env –show-secrets
見事に設定とシークレットが統合されて取得できましたね。これがESCの基本の形です。
—
4. 応用編:継承(Inheritance)と外部IDP連携の威力
ESCの真骨頂はここからです。「ベースとなる共通設定」を作り、そこから「環境ごとの差分(オーバーライド)」を美しく継承させることができます。
設定の継承(Base & Override)
例えば、全環境共通の `base-env` を作り、それを `development` や `production` で継承させてみましょう。
my-org/production-env.yaml
values:
# 共通のベース環境をインポート(継承)
- fn::import: my-org/base-env
# 本番環境用に値をオーバーライド
environment: “production”
aws:
region: “us-east-1” # 本番だけリージョンを変える
vpc_cidr: “10.100.0.0/16”
# 本番用の強固なシークレットに差し替え
secret:
api_key: “sk-production-ultra-secure-99999”
このように、DRY(Don’t Repeat Yourself)な思想で設定を管理できるため、環境間の設定ドリフト(意図しない差異)を完全に防ぐことができます。
動的プロバイダー連携(AWS OIDCの例)
「AWSの長期的なアクセスキー(`AWS_ACCESS_KEY_ID` など)をコードやリポジトリに保存したくない」——SREの永遠の願いです。ESCを使えば、AWS IAMとOIDC連携し、実行時(Just-in-Time)に一時的なAWSクレデンシャルを動的に生成できます。
values:
# AWSプロバイダーを通じた動的なIAMロールの引き受け
aws:
fn::open::aws-login:
with:
oidc:
aud: “https://pulumi.com/organizations/my-org”
roleArn: “arn:aws:iam::123456789012:role/PulumiEscDeploymentRole”
sessionName: “pulumi-esc-session”
# これにより、以降のステップで自動的に一時クレデンシャルが利用可能になる
environment: “secure-production”
静的なシークレットを一切持たない、完全なゼロ・スタンド・シークレット(Zero-standing-privilege)のアーキテクチャが、わず数行のYAMLで実現できてしまうのです。
—
まとめ
今回は、Pulumi ESCの基本概念から、インストール、環境の作成、そして設定の継承や動的シークレットの思想までを駆け足で解説しました。
- Pulumi ESCとは:設定、環境変数、シークレットを階層的に管理し、動的に配布する次世代オーケストレーター。
- 最大のメリット:YAMLによる美しい継承・オーバーライドと、長期シークレットを排除するセキュアな動的プロバイダー連携。
これをマスターすれば、環境ごとの設定ミスの恐怖から解放され、より本質的なインフラ設計に集中できるようになります。毎日の開発・運用作業が、確実に一段階スマートになりますよ。
次回の記事では、このESCを実際のPulumi IaCプログラム(TypeScriptやGoなど)と組み合わせて、CI/CDパイプライン(GitHub Actionsなど)からシームレスに呼び出す実践的なワークフローを解説します。
お楽しみに!