GitHub Actions向け暗号化シークレット共有
2行のYAMLで、CI/CDワークフロー内に自己消滅するシークレットリンクを作成・取得できる。
シークレットリンクを作成
- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.API_KEY }}
views: 1
expires: 24h取得して復号
- uses: vaulted-fyi/share-secret/get@v1
id: get
with:
url: ${{ needs.share.outputs.url }}
- run: echo "Secret is $SECRET"
env:
SECRET: ${{ steps.get.outputs.secret }}エンドツーエンド暗号化
AES-256-GCM暗号化はGitHub Actionsランナー内で実行される。ゼロ知識アーキテクチャ — サーバーは平文も鍵も見ない。復号鍵はURLフラグメントにのみ存在する。
自動ログマスキング
setOutputの前にcore.setSecretを呼び出すことで、復号された値がワークフローログに絶対に表示されない。複数行のシークレットは行ごとにマスクされ、完全に保護される。
インフラ不要
Vaultサーバーも、AWS Secrets Managerも、設定ファイルも不要だ。ワークフローに2行のYAMLを追加するだけで、暗号化シークレット共有が実現する。
組み合わせ可能な出力
作成アクションはurlとidの両方を出力する。Slack通知、PRコメント、メールアクション、または文字列入力を受け付けるあらゆるステップと組み合わせられる。
パスフレーズ保護
第2要素として任意のパスフレーズを追加できる。暗号化鍵はPBKDF2でラップされる — 誰かがリンクを傍受しても、パスフレーズなしでは復号できない。
自己消滅リンク
閲覧回数の上限を1〜10回に設定できる。有効期限を1時間〜30日に設定できる。上限に達するとシークレットはサーバーから自動的に削除される。
よくあるワークフロー
シークレットリンクをPRコメントとして投稿
- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.DEPLOY_TOKEN }}
views: 1
expires: 1h
- uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `Deploy token: ${{ steps.share.outputs.url }}`
})Slackに送信
- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.DATABASE_URL }}
views: 3
expires: 7d
- uses: slackapi/slack-github-action@v2
with:
webhook: ${{ secrets.SLACK_WEBHOOK }}
webhook-type: incoming-webhook
payload: |
{"text": "DB credentials: ${{ steps.share.outputs.url }}"}パスフレーズ保護付き
- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.PROD_KEY }}
passphrase: ${{ secrets.SHARE_PASSPHRASE }}
views: 1
expires: 1h作成入力値
| 入力 | 必須 | デフォルト | 説明 |
|---|---|---|---|
| secret | はい | — | 暗号化して共有する平文シークレット |
| views | いいえ | 1 | 自動削除までの最大閲覧数(1、3、5、10) |
| expires | いいえ | 24h | 有効期限(1h、24h、7d、30d) |
| passphrase | いいえ | — | 追加保護のための任意のパスフレーズ |
取得入力値
| 入力 | 必須 | デフォルト | 説明 |
|---|---|---|---|
| url | はい | — | 復号するVaulted URL |
| passphrase | いいえ | — | シークレットが保護されている場合のパスフレーズ |