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いいえシークレットが保護されている場合のパスフレーズ