GitHub Actions를 위한 암호화된 시크릿 공유

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도, 설정 파일도 필요 없어. 워크플로의 YAML 두 줄만으로 암호화된 시크릿 공유가 가능해.

조합 가능한 출력

create 액션은 url과 id 두 가지를 출력해. Slack 알림, PR 댓글, 이메일 액션 또는 문자열 입력을 받는 모든 단계와 조합할 수 있어.

패스프레이즈 보호

두 번째 요소로 선택적 패스프레이즈를 추가해. 암호화 키가 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

Create 입력값

입력필수기본값설명
secret암호화하고 공유할 평문 시크릿
views아니오1자동 삭제 전 최대 조회 수 (1, 3, 5, 10)
expires아니오24h만료 시간 (1h, 24h, 7d, 30d)
passphrase아니오추가 보호를 위한 선택적 패스프레이즈

Get 입력값

입력필수기본값설명
url복호화할 Vaulted URL
passphrase아니오시크릿이 보호된 경우 패스프레이즈