コンテンツにスキップ

プロバイダー

tegata v0.3.1 の文書

このリポジトリにあるプロバイダーです。それぞれ tegata-provider-<name> という別の実行ファイルで、tegata init で入れる(source)か、PATH に置きます(command)。どのプロバイダーの項目にもあるキーは設定に、組み込みの random、manual、value は設定にあります。

種類ごとに:

  • managed の種類は、apply と rotate で作り、prune で消します。data の種類は、apply のたびに読むだけです。
  • 出力は、stores.<store> の下の各項目の output に書くものです(リソースを見てください)。例では、すべてを main という保存先に置き、app というアイデンティティが読みます。
  • すぐに置き換わるは、新しい値を作ると前の値が使えなくなるということで、tegata はその前に聞きます(設定を見てください)。
プロバイダー 種類 区分 すぐに置き換わる 作るもの prune がすること
cloudflare api_token managed いいえ アカウントの API トークン(R2 の S3 の鍵にもなる) 古いトークンを消す
cloudflare tunnel_token managed はい 今ある Tunnel の新しいシークレット 何も消さない。入れ替えの前に起動したコネクターがつながっている間は断る
tailscale auth_key managed いいえ tailnet の参加の鍵 古い鍵を消す
aws ses_smtp_credentials managed いいえ IAM のアクセスキーと、そこから作る SES の SMTP のパスワード 古いアクセスキーを消す
gcp sql_user managed はい Cloud SQL の組み込みのユーザーのパスワード 何も消さない
terraform outputs data Terraform の出力から読んだ値
providers:
cloudflare:
source: github.com/k-kawa/tegata
version: "^0.3"
config:
account_id: 0123456789abcdef0123456789abcdef
credentials:
api_token: { env: TEGATA_CLOUDFLARE_TOKEN, optional: true }
プロバイダーのキー 説明
config.account_id Cloudflare のアカウント
credentials.api_token アカウントの API トークンを作れる API トークン(tunnel_token では、Cloudflare Tunnel を編集できることも)。なくてもよい:なければ、Cloudflare の cf コマンドのログインを、その設定のファイルから読んで使う(macOS では ~/Library/Preferences/cloudflare/config/default.json、ほかでは $XDG_CONFIG_HOME/cloudflare/config/default.json か ~/.config/cloudflare/config/default.json)。そのログインが 2 分以内に切れるときは、cf auth whoami を流して cf に更新させる

アカウントの API トークンを作ります(アカウントが持つので、作った人がいなくなっても使えます)。

resources:
releases_read:
provider: cloudflare
type: api_token
config:
name: releases read
policies:
- permissions: [Workers R2 Storage Bucket Item Read]
r2_buckets: [releases]
- permissions: ["DNS Write|DNS Edit"]
zones: [example.com]
stores:
main:
- { output: id, name: RELEASES_ACCESS_KEY_ID, readers: [app] }
- { output: r2_secret_access_key, name: RELEASES_SECRET_ACCESS_KEY, readers: [app] }
設定 説明
name トークンの名前。作った時刻が足される(releases read (2026-10-18 09:30 UTC))ので、入れ替えの間も新旧のトークンを見分けられる
policies ポリシーの一覧。それぞれに permissions(管理画面に出る権限のグループの名前。"A|B" は、名前が変わったグループのために A、次に B を試す)と、account: true(アカウント全体)、r2_buckets(バケットの名前)、zones(ゾーンの名前)の少なくとも 1 つを書く
出力 説明
id トークンの ID。R2 の S3 API のアクセスキーの ID でもある
value トークン
r2_secret_access_key トークンの SHA-256。R2 の S3 API のシークレットアクセスキーになる

prune は古いトークンを消します(もうないトークンは、消したものとみなします)。

tunnel_token(managed、すぐに置き換わる)

Section titled “tunnel_token(managed、すぐに置き換わる)”

今ある、リモートで管理する Cloudflare Tunnel のシークレットを入れ替え、そのトークン(cloudflared がつなぐのに使うもの)を返します。Tunnel そのものは、Terraform などのほかの方法で作ってください。

resources:
tunnel:
provider: cloudflare
type: tunnel_token
config: { tunnel: web }
stores:
main:
- { name: TUNNEL_TOKEN, readers: [app] }
設定 説明
tunnel Tunnel の名前(消していない Tunnel のうち、ちょうど 1 つがこの名前であること)
出力 説明
value Tunnel のトークン

Tunnel のシークレットは 1 つだけです。入れ替えたあとも、すでにつながっている cloudflared はつながったままですが、古いトークンでの新しい接続は失敗します。prune は Cloudflare の上で何も消しません。代わりに、入れ替えの前に起動したコネクターがまだつながっていないかを確かめ、新しいトークンで再起動するまでは(コネクターと、どこからつないでいるかを挙げて)断ります。

providers:
tailscale:
source: github.com/k-kawa/tegata
version: "^0.3"
credentials:
client_id: { env: TEGATA_TAILSCALE_CLIENT_ID }
client_secret: { env: TEGATA_TAILSCALE_CLIENT_SECRET }
プロバイダーのキー 説明
credentials.client_id、credentials.client_secret 参加の鍵を書けて、鍵に付けるタグを持つ Tailscale の OAuth クライアント

tailnet に機器を足すための参加の鍵を作ります。

resources:
join_key:
provider: tailscale
type: auth_key
config:
tags: [tag:server]
reusable: true
stores:
main:
- { output: key, name: TAILSCALE_AUTH_KEY, readers: [app] }
設定 説明
tags 必ず書く:OAuth クライアントが作る鍵にはタグが要る
reusable 既定は false
ephemeral 既定は false
preauthorized 既定は true
expiry_seconds 既定は 604800(7 日)
description 既定はリソースの名前
出力 説明
key 参加の鍵

prune は古い鍵を消します(使い切った鍵と、期限の切れた鍵は、消したものとみなします)。

providers:
aws:
source: github.com/k-kawa/tegata
version: "^0.3"

プロバイダーは、AWS の SDK や CLI と同じやり方で AWS の認証情報を探します。環境変数、~/.aws/credentials と ~/.aws/config、aws sso login のセッションなどです。aws コマンドそのものは要りません。credentials の項目は使いません。

IAM ユーザーのアクセスキーを作り、そこから Amazon SES の SMTP のパスワードを作ります(SES の作り方)。IAM ユーザーは自分で作り、SES でメールを送る権限だけを付けてください。

resources:
smtp:
provider: aws
type: ses_smtp_credentials
config: { user: ses-sender, region: us-west-2 }
stores:
main:
- { output: username, name: SMTP_USERNAME, readers: [app] }
- { output: password, name: SMTP_PASSWORD, readers: [app] }
設定 説明
user IAM ユーザー
region パスワードを使う SES のリージョン。既定は us-west-2
profile 使う AWS のプロファイル。なくてもよい
出力 説明
username アクセスキーの ID(SMTP のユーザー名)
password SMTP のパスワード。アクセスキーのシークレットそのものは返さない

prune は古いアクセスキーを消します。IAM ユーザーが持てるアクセスキーは 2 つまでなので、入れ替えるたびに、次の入れ替えの前に prune してください。

providers:
gcp:
source: github.com/k-kawa/tegata
version: "^0.3"
config: { project: my-project }

認証情報:TEGATA_GCP_ACCESS_TOKEN があればそれを、なければ gcloud auth print-access-token を使います。

プロバイダーのキー 説明
config.project Cloud SQL のインスタンスのある Google Cloud のプロジェクト

sql_user(managed、すぐに置き換わる)

Section titled “sql_user(managed、すぐに置き換わる)”

Cloud SQL の組み込みのユーザーに、ランダムなパスワードを付けます。ユーザーがなければ作ります。

resources:
db_password:
provider: gcp
type: sql_user
config: { instance: main, user: app }
stores:
main:
- { output: password, name: DATABASE_PASSWORD, readers: [app] }
設定 説明
instance Cloud SQL のインスタンス
user ユーザー。組み込みのユーザーであること(IAM のユーザーではない)
bytes パスワードのランダムなバイト数(16 進で書く)。既定は 24
出力 説明
password パスワード
user ユーザーの名前

ユーザーのパスワードは 1 つだけです。開いている接続は残り、古いパスワードでの新しい接続は失敗します。prune は何も消しません(古いパスワードはもう使えなくなっていて、ユーザーはデータを持っているので消しません)。

providers:
terraform:
source: github.com/k-kawa/tegata
version: "^0.3"

Terraform の設定の出力を 1 つ読みます:terraform -chdir=<dir> output -json <output>。state を読むだけで、plan も apply もしません。ディレクトリは初期化してあり(terraform init)、その state を読めることが要ります。TEGATA_TERRAFORM で terraform の実行ファイルを決めます(既定は PATH の terraform)。

resources:
infra:
provider: terraform
type: outputs
config: { dir: ../terraform, output: app_settings }
stores:
main:
- { output: bucket, name: BUCKET_NAME, readers: [app] }
- { output: db_host, name: DATABASE_HOST, readers: [app] }
設定 説明
dir Terraform のディレクトリ。YAML のファイルからの相対
output 値が map である出力の名前。その中の文字列、数、真偽値が出力になる。ほかの値はエラー

出力は、その map のキーです。

このページの問題を報告する(GitHub。英語でも日本語でも)