コンテンツにスキップ

はじめに

tegata v0.3.1 の文書

クラウドのアカウントなしで、手元の機械で 10 分ほど tegata を試します。シークレットを作り、それで雛形を埋め、1 つを入れ替えます。そのあと、同じ設定を Google Cloud Secret Manager に移します。

tegata の実行ファイルが要ります(インストール)。この例は組み込みのプロバイダーだけを使うので、tegata init は要りません。

examples/minimal を写して、その中で作業します。

ターミナルウィンドウ
cp -r examples/minimal /tmp/tegata-try && cd /tmp/tegata-try

tegata.yaml には、シークレットをどこに置くか、誰が読むか、何を作るかを書きます。シークレットごとに readers を書きます。previous は、写すもとの値の読み手が読みます。

stores:
main:
local:
dir: ./store # plain-text JSON files: for trying tegata only
identities:
app: [serviceAccount:app@example.iam.gserviceaccount.com]
resources:
session_key:
provider: random # 32 random bytes
config: { bytes: 32 }
stores:
main:
- { name: SESSION_KEY, readers: [app] }
previous: { name: PREVIOUS_SESSION_KEY }
admin_password:
provider: manual # you type it
stores:
main:
- { name: ADMIN_PASSWORD, readers: [app] }
mail:
provider: value # a fixed, non-secret value
config: { from: "Example <noreply@example.com>" }
stores:
main:
- { output: from, name: MAIL_FROM, readers: [app] }

templates/app/app.env は、app として動くサーバーが埋めるファイルです。tegata check app templates/app で、その中のすべての名前を app が読めることを確かめます。

SESSION_KEY=__SESSION_KEY__
PREVIOUS_SESSION_KEY=__PREVIOUS_SESSION_KEY__
ADMIN_PASSWORD_SHA256=__ADMIN_PASSWORD|sha256__
MAIL_FROM=__MAIL_FROM__
$ tegata check app templates/app
ok
$ tegata apply
created secret ADMIN_PASSWORD
readers of ADMIN_PASSWORD: serviceAccount:app@example.iam.gserviceaccount.com
admin_password: no value yet (put it with `tegata set admin_password`)
created secret MAIL_FROM
readers of MAIL_FROM: serviceAccount:app@example.iam.gserviceaccount.com
MAIL_FROM: version 1 (from mail)
created secret SESSION_KEY
readers of SESSION_KEY: serviceAccount:app@example.iam.gserviceaccount.com
created secret PREVIOUS_SESSION_KEY
readers of PREVIOUS_SESSION_KEY: serviceAccount:app@example.iam.gserviceaccount.com
SESSION_KEY: version 1
session_key: generation 1
PREVIOUS_SESSION_KEY: version 1 (the value of SESSION_KEY)

apply がランダムな鍵を作り、app のメンバーが 4 つのシークレットを読めるようにしました。manual のパスワードは、入れるのを待っています。

$ echo 'correct horse' | tegata set admin_password
ADMIN_PASSWORD: version 1
admin_password: generation 1
$ tegata status
admin_password (manual) generation 1
ADMIN_PASSWORD v1 app
mail (value) -
MAIL_FROM v1 app
session_key (random) generation 1
SESSION_KEY v1 app
PREVIOUS_SESSION_KEY v1 app

サーバーの上では、render が保存先から雛形を埋めます。YAML もプロバイダーも要りません。

$ tegata render --store-dir store templates/app out
filled 1 files
$ cat out/app.env
SESSION_KEY=3f9c…
PREVIOUS_SESSION_KEY=3f9c…
ADMIN_PASSWORD_SHA256=9c0f…
MAIL_FROM=Example <noreply@example.com>

out はモード 0700 で、app.env は 0600 で作られます。

$ tegata rotate session_key
SESSION_KEY: version 2
session_key: generation 2
$ tegata render --store-dir store templates/app out
filled 1 files
$ tegata settle session_key
PREVIOUS_SESSION_KEY: version 2 (the value of SESSION_KEY)
$ tegata prune session_key
SESSION_KEY: disabled version 1
session_key: pruned generation 1
PREVIOUS_SESSION_KEY: disabled version 1

rotate から settle までの間、SESSION_KEY と PREVIOUS_SESSION_KEY の両方を受け付けるサービスは、入れ替えの前に作った値でも動き続けます。値の種類ごとの手順はシークレットを入れ替えるにあります。

  1. 保存先を替え、app のメンバーを、render するサーバーのサービスアカウントにします。

    stores:
    main:
    gcp:
    project: my-project
    location: us-central1
    identities:
    app: [serviceAccount:app-vm@my-project.iam.gserviceaccount.com]
  2. そのプロジェクトの Secret Manager を管理できるアカウントで tegata apply を流します(gcloud のログインを使います)。

  3. サーバーの上で tegata render templates/app /etc/app を流します。Compute Engine の VM なら、プロジェクトと認証情報は VM から取ります。ほかの場所では --project my-project を足し、サーバーのアイデンティティが認証できるようにしておきます。

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