GitHub Actions シークレットの設定

GitBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、GitHub Actions Secrets の使用方法を学びます。シークレットとは、Organization、リポジトリ、またはリポジトリ環境で作成する暗号化された環境変数です。作成したシークレットは、GitHub Actions のワークフロー内で使用できます。

これは、API キー、アクセストークン、パスワードなどの機密情報を安全に保つために不可欠です。GitHub Actions は、シークレットがログに公開されないように、ログから自動的にシークレットを削除(redact)します。

この実験は、以前の実験で作成したリポジトリを基盤とします。github-actions-demo リポジトリにシークレットを追加し、それを使用するワークフローを作成します。

以下の手順を実行します。

  1. 既存の GitHub リポジトリにリポジトリシークレットを追加します。
  2. リポジトリをクローンし、シークレットを参照するワークフローファイルを作成します。
  3. シークレットを使用するためのステップを追加します。
  4. ワークフローを GitHub にプッシュします。
  5. 実行ログでシークレットがマスクされていることを確認します。

GitHub 設定で MY_SECRET という名前のリポジトリシークレットを作成する

このステップでは、既存の github-actions-demo リポジトリにシークレットを追加し、そのリポジトリを LabEx 環境にクローンします。

リポジトリシークレットの追加

  1. Web ブラウザを開き、GitHub 上の github-actions-demo リポジトリに移動します:https://github.com/your-username/github-actions-demo
  2. Settings タブをクリックします。
  3. 左側のサイドバーで、Security セクションまでスクロールダウンし、Secrets and variables をクリックし、次に Actions を選択します。
  4. 緑色の New repository secret ボタンをクリックします。
  5. 以下の詳細を入力します:
    • Name: MY_SECRET
    • Secret: SuperSecretValue123
  6. Add secret をクリックします。
GitHub Actions secrets

これで、「Repository secrets」の下に MY_SECRET がリストされているはずです。

リポジトリのクローン

次に、LabEx 環境に戻り、リポジトリをクローンします。

  1. github-actions-demo の GitHub リポジトリページで、緑色の Code ボタンをクリックします。
  2. HTTPS タブが選択されていることを確認し、URL をコピーします。URL は https://github.com/your-username/github-actions-demo.git のような形式になります。
  3. LabEx 環境でターミナルを開きます。デフォルトのパスは ~/project です。
  4. git clone コマンドを使用してリポジトリをダウンロードします。your-username は実際の GitHub ユーザー名に置き換えてください。
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git

出力例:

Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
  1. クローンしたリポジトリ内に移動します:
cd ~/project/github-actions-demo

ワークフローで ${{ secrets.MY_SECRET }} を使用してシークレットを参照する

このステップでは、作成したシークレットを参照するワークフローファイルを作成します。

  1. リポジトリディレクトリにいることを確認します:
cd ~/project/github-actions-demo
  1. .github/workflows ディレクトリ内に secrets-demo.yml という名前の新しいファイルを作成します:
touch .github/workflows/secrets-demo.yml
  1. WebIDE で .github/workflows/secrets-demo.yml を開き、以下の内容を追加します。これは、push イベントでトリガーされる基本的なワークフローを定義します。
name: Secrets Demo
on: [push]

jobs:
  use-secret:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

これでジョブの設定が完了しました。次のステップで、シークレットを使用するためのロジックを追加します。

安全にシークレット値を echo するステップを追加する

このステップでは、ワークフローを変更してシークレットにアクセスします。GitHub Actions では、${{ secrets.SECRET_NAME }} 構文を使用してシークレットにアクセスできます。

ワークフローの変更

.github/workflows/secrets-demo.yml を開き、steps リストに次のステップを追加します。インデントが正しいことを確認してください。

- name: Print Secret
  env:
    MY_SECRET_VAL: ${{ secrets.MY_SECRET }}
  run: |
    echo "Printing secret directly (masked): ${{ secrets.MY_SECRET }}"
    echo "Printing secret from env (masked): $MY_SECRET_VAL"

完全なファイル .github/workflows/secrets-demo.yml は次のようになります。

name: Secrets Demo
on: [push]

jobs:
  use-secret:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Print Secret
        env:
          MY_SECRET_VAL: ${{ secrets.MY_SECRET }}
        run: |
          echo "Printing secret directly (masked): ${{ secrets.MY_SECRET }}"
          echo "Printing secret from env (masked): $MY_SECRET_VAL"

キーコンセプト

ワークフローでシークレットを使用すると、GitHub はログ内で自動的にそれをマスクします。echo で出力しようとしても、実際の値の代わりにアスタリスク (***) が表示されます。

シークレット参照を含むワークフローをコミットしてプッシュする

このステップでは、変更をコミットし、GitHub にプッシュします。これにより、GitHub Action がトリガーされます。

  1. リポジトリディレクトリにいることを確認します。
cd ~/project/github-actions-demo
  1. ワークフローファイルをステージングします。
git add .github/workflows/secrets-demo.yml
  1. 説明的なメッセージを付けて変更をコミットします。
git commit -m "Add workflow to test secrets"
  1. 変更を GitHub 上のリモートリポジトリにプッシュします。
git push

認証に関する注意:
git pushを実行すると、WebIDE が自動的に認証を求めます。以下の詳細な手順に従ってください。

  1. "The extension 'GitHub' wants to sign in using GitHub." というメッセージが表示されたポップアップが表示されます。「Allow」をクリックします。
  2. 新しい通知が表示されます。「Copy&Continue to GitHub」をクリックし、次のプロンプトで「Open」をクリックします。
  3. 開いたブラウザウィンドウで GitHub アカウントにログインし、コピーされた認証コードを入力します。認証を確認した後、ページは自動的に閉じます。
  4. 数秒待つと、ターミナルでプッシュ操作が正常に完了したことが確認できます。

プライバシーに関する注意:
WebIDE は認証目的で GitHub アカウントへのフルアクセスを要求します。プライバシーに関する懸念は不要です。現在の実験(Lab)が完了すると、LabEx VM は直ちに破棄され、資格情報や認証情報は保持されません。

ログを確認し、シークレットが漏洩なく使用されていることを確認する

コードをプッシュした後、ワークフローは GitHub 上で自動的にトリガーされます。ワークフローの実行ログを確認することで、シークレットが安全に使用されていることを検証できます。

  1. ウェブブラウザで GitHub 上のリポジトリにアクセスします:https://github.com/your-username/github-actions-demo
  2. リポジトリページの最上部にある Actions タブをクリックします。
  3. ワークフローの実行が一覧表示されているはずで、おそらく「Add workflow to test secrets」または「Secrets Demo」という名前です。

注記: コードをプッシュすると、リポジトリ内に複数のワークフローファイルがある場合、複数の Actions がトリガーされることがあります。左側のサイドバーでワークフロー名を確認するか、右側のワークフロー実行リストを使用して、正しいワークフロー実行を特定してください。

  1. ワークフロー実行のタイトルをクリックし、次に use-secret ジョブをクリックします。
  2. Print Secret ステップを展開して、出力を確認します。

以下のような表示が見えるはずです。

Printing secret directly (masked): ***
Printing secret from env (masked): ***

ワークフローがシークレット値を印刷しようとしたにもかかわらず、GitHub Actions がログ内で自動的に *** でマスクしていることに注目してください。これは重要なセキュリティ機能です。意図的に印刷しようとした場合でも、機密情報がログに誤って公開されるのを防ぎます。これにより、シークレットが安全に設定され、実際の値を公開することなくワークフロー内で使用されていることが確認できます。

GitHub Actions logs

まとめ

この実験(Lab)では、以下の方法を習得しました。

  1. 機密データを保存するために、GitHub 設定内でリポジトリシークレットを作成する方法。
  2. GitHub Actions のワークフローファイルを作成する方法。
  3. ${{ secrets.MY_SECRET }} 構文を使用してシークレットを参照する方法。
  4. ジョブステップ内でシークレットを環境変数として渡す方法。
  5. ビルドログ内で GitHub がシークレット値を自動的にマスクすることを検証する方法。

この手順により、デプロイキーや API トークンなどの機密データが CI/CD プロセス全体を通じて安全に保たれることが保証されます。