発生した問題
ISSUE - 課題
GitHub Actions ワークフローで ECR へのイメージプッシュ後、後続のデプロイJOBでイメージ URI が取得できない問題が発生。
image-uri
とecr-registry
の出力が空になる- デプロイジョブで正しいイメージ URI を参照できない
- ログに Secret Scanning の警告が出力される
根本原因
CAUSE - 原因
GitHub Actions の Secret Scanning 機能が ECR イメージ URI をシークレット情報として検出していました。
ECR イメージ URI には AWS アカウント ID が含まれているため、以下の警告がログに出力されます
##[warning]Skip output 'image-uri' since it may contain secret.
##[warning]Skip output 'ecr-registry' since it may contain secret.
セキュリティ上の理由で、シークレット情報を含む可能性がある出力は自動的にスキップされるようです。
解決策
SOLUTION - 解決策
シークレット情報を含まない値のみをJOB間で受け渡すように変更します。
修正前のコード
build-and-push:
outputs:
image-uri: ${{ steps.build-image.outputs.image }}
ecr-registry: ${{ steps.login-ecr.outputs.registry }}
deploy:
steps:
- name: Build Image URI
run: |
IMAGE_URI="${{ needs.build-and-push.outputs.ecr-registry }}/app:${{ needs.build-and-push.outputs.image-tag }}"
修正後のコード
build-and-push:
outputs:
image-tag: ${{ github.sha }}
deploy:
steps:
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Build Image URI
run: |
IMAGE_URI="${{ steps.login-ecr.outputs.registry }}/app:${{ needs.build-and-push.outputs.image-tag }}"
修正のポイントはイメージタグのみを受け渡し、デプロイジョブ内で ECR レジストリ情報を再取得することです。
技術的な背景
Secret Scanning の動作
GitHub Actions の Secret Scanning は以下の情報を自動検出します。
検出対象 | 例 |
---|---|
AWS アカウント ID | 123456789012 |
API キー | AKIA… |
プライベートキー | -----BEGIN RSA PRIVATE KEY----- |
ベストプラクティス
シークレット情報の取り扱いで推奨される方法。
推奨 | 非推奨 |
---|---|
各ジョブで個別に認証情報を取得 | JOB間でシークレット情報を受け渡し |
識別子のみを受け渡し | URI を受け渡し |
必要最小限の情報のみを出力 | すべての認証情報を出力 |