環境変数とシークレット
GitHub Actions 内で機密情報や環境固有の設定を安全に管理する方法を学びます。
「環境変数とシークレット」はCoddyKit上の無料CI/CD with GitHub Actions & DevOps Pipelinesレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCI/CD with GitHub Actions & DevOps Pipelines学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。
環境変数とシークレット: 基礎
レッスン3へようこそ。CI/CDでは、パイプラインに動的な値や機密情報を設定することがよくあります。
そこで欠かせないのが、環境変数とシークレットです。これらを使うと、ワークフローをさまざまな状況に対応させながら、機密データを安全に扱えます。
CI/CDで使う理由
開発、ステージング、本番など異なる環境へデプロイしたり、APIキーを使って外部サービスに接続したりする場面を考えてみましょう。
- 柔軟性: 環境変数を使うと、ワークフローファイルを変更せずに動作を変えられます。
- セキュリティ: シークレットにより、パスワードやAPIトークンなどの機密データが公開されるのを防げます。
- 再利用性: 設定を一度定義して、複数のジョブやステップで利用できます。
Actionsの環境変数
環境変数とは、実行中のプロセスの動作に影響を与えられる、名前付きの動的な値です。GitHub Actionsでは、ワークフローを設定可能にするための重要な要素です。
独自の環境変数を定義することも、GitHub Actionsが提供する多数の組み込み環境変数を使うこともできます。
GitHub Actionsの組み込み環境変数
GitHub Actionsは、あらかじめ定義された便利な環境変数を自動的に多数提供します。これらを使うと、リポジトリやワークフローの実行などに関するコンテキストを取得できます。
たとえば、GITHUB_SHAはコミットハッシュ、GITHUB_REFはワークフローをトリガーしたブランチ名またはタグ名です。
式の中ではgithubコンテキストオブジェクトを使ってアクセスします。envに割り当てた場合は、シェル変数として直接アクセスできます。
name: Print Context Variables
on: [push]
jobs:
display_info:
runs-on: ubuntu-latest
steps:
- name: Show commit SHA
run: echo "Commit SHA: ${{ github.sha }}"
- name: Show branch/tag ref
run: echo "Ref: ${{ github.ref }}"カスタム環境変数: ワークフローのスコープ
独自の環境変数は、ワークフローまたはジョブのレベルで定義できます。ワークフローのレベルで定義した変数は、そのワークフロー内のすべてのジョブとステップで利用できます。
ワークフローファイルのトップレベルでenvキーワードを使って設定します。
name: Workflow-level Env Var
on: [push]
env:
GREETING_MESSAGE: "Hello from Workflow!"
jobs:
my_job:
runs-on: ubuntu-latest
steps:
- name: Access workflow variable
run: echo "${{ env.GREETING_MESSAGE }}" # Access via env context
- name: Access workflow variable (shell)
env:
MY_VAR_IN_SHELL: ${{ env.GREETING_MESSAGE }}
run: echo "$MY_VAR_IN_SHELL" # Access as shell variableカスタム環境変数: ジョブとステップのスコープ
より細かく設定したい場合は、ジョブまたはステップのレベルで環境変数を定義します。ジョブに対して定義した変数はそのジョブのすべてのステップで利用でき、ステップレベルの変数はそのステップだけで利用できます。
これにより、設定をきめ細かく制御できます。
name: Job & Step-level Env Vars
on: [push]
jobs:
my_job:
runs-on: ubuntu-latest
env:
JOB_VAR: "Value for this job"
steps:
- name: Access Job-level variable
run: echo "Job Var: ${{ env.JOB_VAR }}"
- name: Step-specific variable
env:
STEP_VAR: "Value for this step"
run: echo "Step Var: ${{ env.STEP_VAR }}"
- name: Try to access step var in another step
run: echo "Trying to access: ${{ env.STEP_VAR }}" || true # Will be emptyGitHub Secretsの紹介
環境変数は機密性のないデータに適していますが、APIキー、データベースのパスワード、プライベートトークンなどの機密情報はどう扱えばよいでしょうか。
そこで役立つのがGitHub Secretsです。リポジトリのコードやログに公開することなく、機密情報を安全に保存し、ワークフローから利用できます。
- 暗号化: GitHubによって安全に保存されます。
- マスキング: ワークフローのログから自動的に隠されます。
- アクセス制御: 特定のワークフローでのみ利用できます。
GitHub Secretsの作成
シークレットは、ワークフローファイルに直接記述するのではなく、GitHubのリポジトリまたは組織の設定で作成・管理します。
- リポジトリのSettingsに移動します。
- Secrets and variables > Actionsの順に移動します。
- New repository secretをクリックします(より広い範囲で使用する場合は、組織のシークレットを作成します)。
- Name(例:
MY_API_KEY)を入力し、Valueを貼り付けます。
保存後は、シークレットの値を再び表示することはできません。更新または削除のみ可能です。
ワークフローでのシークレットの使用
シークレットを使用するには、環境変数でenvを使う場合と同様に、ワークフロー内でsecretsコンテキストオブジェクトを使って参照します。
GitHubはログ内のシークレットを自動的にマスキングし、値を***に置き換えて誤った公開を防ぎます。
name: Use a Secret Demo
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Display a secret (redacted)
run: echo "My secret key is: ${{ secrets.MY_API_KEY }}"
# GitHub Actions automatically redacts the value in logs.
- name: Pass secret to an environment variable
env:
API_KEY_ENV: ${{ secrets.MY_API_KEY }}
run: echo "API Key in env: $API_KEY_ENV"シークレットのセキュリティに関するベストプラクティス
シークレットを安全に管理することは、CI/CDパイプラインの完全性を保つうえで極めて重要です。必ず次のガイドラインに従ってください。
- 最小権限: シークレットへのアクセスは、本当に必要な範囲にのみ許可します。
- ハードコードしない: ワークフローファイルやリポジトリのコードにシークレットを直接埋め込まないでください。
- ログに出力しない: GitHubがマスキングしてくれる場合でも、シークレットの一部を誤って表示する可能性のある独自のechoコマンドは避けてください。
- 定期的にローテーションする: 定期的にシークレットを変更し、漏えいのリスクを最小限に抑えます。
- 環境ごとに分ける: 開発、ステージング、本番の各環境には、それぞれ異なるシークレットを使用します。
簡単な確認: 環境変数とシークレットの違い
GitHub Actions の環境変数とシークレットの重要な違い、または特徴を正確に説明している記述はどれですか?
振り返り:安全な設定
すばらしいです!GitHub Actions のワークフローで設定を管理する方法を無事に学びました。
- 環境変数を使用すると、機密性のない動的なデータをワークフローの実行に組み込めます。ワークフロー、ジョブ、ステップの各レベルに合わせて設定できます。
- シークレットは、API キーなどの機密情報を安全に扱うために不可欠です。情報は暗号化されたまま保持され、公開コードに含まれることもありません。
- シークレットを扱う際は、デプロイを脆弱性から守るため、常にセキュリティのベストプラクティスに従ってください。
これらの概念を身につけることで、柔軟性と安全性を兼ね備えた CI/CD パイプラインを構築できます。
よくある質問
「環境変数とシークレット」レッスンは無料ですか?
はい。「環境変数とシークレット」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CI/CD with GitHub Actions & DevOps Pipelinesコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。
「環境変数とシークレット」で何を学びますか?
GitHub Actions 内で機密情報や環境固有の設定を安全に管理する方法を学びます。 ブラウザで直接実行するハンズオンコードでCI/CD with GitHub Actions & DevOps Pipelinesを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CI/CD with GitHub Actions & DevOps Pipelinesを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCI/CD with GitHub Actions & DevOps Pipelinesは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「環境変数とシークレット」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCI/CD with GitHub Actions & DevOps Pipelinesレッスンでコードを書いて実行できますか?
はい。すべてのCI/CD with GitHub Actions & DevOps Pipelinesレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。