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: 1hCreate 입력값
| 입력 | 필수 | 기본값 | 설명 |
|---|---|---|---|
| secret | 예 | — | 암호화하고 공유할 평문 시크릿 |
| views | 아니오 | 1 | 자동 삭제 전 최대 조회 수 (1, 3, 5, 10) |
| expires | 아니오 | 24h | 만료 시간 (1h, 24h, 7d, 30d) |
| passphrase | 아니오 | — | 추가 보호를 위한 선택적 패스프레이즈 |
Get 입력값
| 입력 | 필수 | 기본값 | 설명 |
|---|---|---|---|
| url | 예 | — | 복호화할 Vaulted URL |
| passphrase | 아니오 | — | 시크릿이 보호된 경우 패스프레이즈 |