メインコンテンツまでスキップ

setup-secret コマンドリファレンス

infra setup-secret コマンドは、GitHub Actions ワークフローから secrets のリストを CLI で自動抽出し、config.toml や.env ファイル、Terraform output から取得した環境変数とマッチングして、GitHub repository の secrets として登録するコマンドです。

使い方

infra setup-secret <tenant-name> <environment> [options]

引数

  • <tenant-name>: テナント名(例: pj-japan
  • <environment>: 環境名(dev または prd

オプション

  • --component <component>: コンポーネントを指定(frontend または backend
    • 指定しない場合は対話式で選択
  • -y, --yes: 確認プロンプトをスキップ
  • --skip-existing: 既に設定されている secrets をスキップ(上書きしない)
  • --exclude-generated: config.toml から自動生成される環境変数(APP_URL_*, AZURE_RESOURCE_GROUP_*, CONTAINER_APP_NAME_*)を除外
  • -h, --help: ヘルプを表示

動作フロー

Step 1: GitHub Actions ワークフローを解析

指定された repository の .github/workflows/ ディレクトリ内の YAML ファイルをすべて取得し、secrets.XXXX の形式で参照されている secrets を抽出します。

Step 2: 環境変数を収集(ホワイトリストベース)

ホワイトリスト方式を採用しています。core/src/services/security/variable_rules.ts に定義された環境変数のみが収集・設定されます。

以下のソースから環境変数を収集します(優先順位はルールごとに定義): Shared Terraform output(Azure 認証情報、ACR 情報)、config.toml(ACR subscription、ACR name、Image name、Repository、自動生成される環境変数)、.env ファイル(アプリケーション固有の環境変数、API keys)、Tenant Terraform output(デプロイ後に生成される情報)

ホワイトリストに登録されていない環境変数は、収集・設定されません。

Step 3: マッピング

GitHub Actions で必要な secrets と、収集した環境変数を名前でマッチングします。

マッチ条件: 環境変数名と secret 名が完全一致、ホワイトリストに登録されている環境変数のみマッチング対象

マッチ結果: Matched(GitHub repository に自動登録可能)、Unmatched(ホワイトリストにあるが値が見つからない → 手動で設定が必要)、Not in Whitelist(ホワイトリストに登録されていない → variable_rules.ts にルール追加が必要)

上書きルール: 各環境変数のルールで allowOverwrite が定義されており、既存の secrets を上書きするかどうかを制御します(allowOverwrite: true は既存の値を上書き可能、allowOverwrite: false は既存の値は保護され、上書きされません)

Step 4: 確認

マッチした secrets の一覧を表示し、GitHub repository に登録するか確認します(センシティブな値はマスキングして表示、各変数のソースを表示)

Step 5: Secrets を設定

GitHub CLI を使用して、マッチした secrets を repository に登録します(gh secret set <SECRET_NAME> --repo <repository>

前提条件

  1. GitHub CLI のインストール: brew install gh(macOS)、その他のOSは公式サイトを参照
  2. GitHub CLI の認証: gh auth login --scopes "repo,workflow,admin:org"(必要な権限: repoworkflowadmin:org
  3. config.toml の設定: テナントの config.toml に repositoryacr_subscriptionacr_nameimage_name が設定されている必要があります

使用例

基本的な使い方

infra setup-secret pj-japan dev  # frontendのsecretsをセットアップ(対話式で選択)
infra setup-secret pj-japan dev --component frontend # componentを指定
infra setup-secret pj-japan dev --component backend -y # 確認をスキップ

実行例

GitHub Actionsワークフローを解析 → 環境変数を収集 → マッピング → 確認 → Secrets を設定

対応する GitHub Actions ワークフローの例

examples/github_actions/ に配置されているワークフローで定義されている環境変数は、このコマンドで自動的に設定できるように設計されています。

標準的なワークフローで必要な secrets

Secret 名説明ソース
AZURE_CLIENT_IDService Principal IDShared Terraform output
AZURE_CLIENT_SECRETService Principal SecretShared Terraform output
AZURE_TENANT_IDAzure Tenant IDShared Terraform output
AZURE_SUBSCRIPTION_IDAzure Subscription IDShared Terraform output / config.toml
ACR_NAMEAzure Container Registry 名Shared Terraform output / config.toml
ACR_LOGIN_SERVERACR ログインサーバー URLShared Terraform output
ACR_USERNAMEACR 管理者ユーザー名Shared Terraform output
ACR_PASSWORDACR 管理者パスワードShared Terraform output

アプリケーション固有の secrets

.env ファイルに定義されている環境変数も、GitHub Actions で参照されている場合は自動的に設定されます(例: AUTH0_CLIENT_SECRET, ANTHROPIC_API_KEY, OPENAI_API_KEY

ホワイトリストへの環境変数の追加

新しい環境変数をホワイトリストに追加するには、core/src/services/security/variable_rules.tsVARIABLE_RULES 配列にルールを追加します。

ルールの定義: name(環境変数名または正規表現)、sources(優先順位順)、allowOverwrite(既存の値を上書き可能か)、sensitive(センシティブな値か)

ソースの優先順位: sources 配列の最初の要素が最優先されます(例: ["config_toml", "env_file", "shared_terraform"]

上書きルール: allowOverwrite: true(既存の secrets を上書き可能)、allowOverwrite: false(既存の secrets を保護)

マッチしない secrets の手動設定

マッチしない secrets は、以下の URL から手動で設定してください:

https://github.com/<organization>/<repository>/settings/secrets/actions

コマンド実行時に該当する URL が表示されます。

トラブルシューティング

  • GitHub CLI の認証エラー: gh auth login --scopes "repo,workflow,admin:org" を実行
  • Repository not found: config.toml に repository を追加
  • ワークフローファイルが見つからない: .github/workflows/ ディレクトリが存在しない、またはワークフローファイルで secrets.XXXX を使用していない(GitHub Actions を使用していない場合は無視して OK)
  • 権限エラー: リポジトリへの書き込み権限を確認、Organization secrets の場合は Organization admin の権限が必要
  • ホワイトリストに登録されていない: core/src/services/security/variable_rules.ts にルールを追加し、yarn build を実行してから再度コマンドを実行

関連コマンド

  • infra env-get: Container App の環境変数を取得
  • infra env-set: Container App の環境変数を設定

参考資料