GitHub によるシークレット管理
GitHub Secrets と OpenID Connect (OIDC) を使用して、機密性の高い認証情報を安全に保存・取得する方法を詳しく学びます。
「GitHub によるシークレット管理」はCoddyKit上の無料CI/CD with GitHub Actions & DevOps Pipelinesレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCI/CD with GitHub Actions & DevOps Pipelines学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。
安全なシークレット管理が必要な理由
ソフトウェアプロジェクトでは、API キー、データベースの認証情報、アクセストークンなどの機密情報を使用することがよくあります。これらをコードやリポジトリに直接保存するのは、大きなセキュリティリスクです。
シークレット管理とは、こうした機密データを安全に保存・管理することです。認証されたシステムとユーザーだけがアクセスできるようにし、不正な漏えいを防ぎます。
GitHub Secrets とは
GitHub には、GitHub Secrets と呼ばれる機密情報を安全に保存する仕組みがあります。GitHub Actions のワークフローで使用できる、暗号化された環境変数です。
- デフォルトではログに書き込まれません。
- 作成後に UI で表示されることはありません。
- 選択したワークフローだけがアクセスできます。
これにより、認証情報が誤って公開されるのを防げます。
リポジトリシークレットを設定する
シークレットは、リポジトリ、環境、組織のそれぞれのレベルで定義できます。通常は、まずリポジトリシークレットから始めます。
作成する手順は次のとおりです。
- リポジトリの Settings タブを開きます。
- Secrets and variables > Actions に移動します。
- New repository secret をクリックします。
一意の名前(例: API_KEY)を付け、シークレットの値を貼り付けます。
ワークフローでシークレットにアクセスする
シークレットを定義すると、ワークフローの YAML ファイルで使用できます。GitHub Actions は、シークレットを環境変数としてジョブに自動的に注入します。
${{ secrets.SECRET_NAME }} コンテキストを使ってアクセスします。このスクリプトは、そのようなシークレットを使用するステップをシミュレートします。実行する際は、GitHub Actions によって MY_API_KEY が環境変数として設定されていると考えてください。
#!/bin/bash
# This script simulates a workflow step
# where a secret is passed as an environment variable.
echo "Attempting to use an API key..."
# In a real GitHub Action, MY_API_KEY would be
# set by ${{ secrets.MY_API_KEY }} in the workflow YAML.
if [ -z "$MY_API_KEY" ]; then
echo "Error: MY_API_KEY is not set!"
echo "Please define it as a secret in your workflow."
else
echo "Successfully accessed API key (partially shown): ${MY_API_KEY:0:5}..."
fiより広い範囲でシークレットを管理する
リポジトリシークレット以外にも、GitHub には次の2つの強力なスコープがあります。
- 組織シークレット: 組織内の複数のリポジトリから利用できます。多くのプロジェクトで共有するシークレット(会社全体で使うデプロイトークンなど)に便利です。
- 環境シークレット: 特定のデプロイ環境(
staging、productionなど)に関連付けられます。デプロイ前に手動承認を必須にするなど、保護ルールを設定できます。
最大限のセキュリティを確保するため、必要最小限のスコープを常に使用してください。
OpenID Connect(OIDC)とは
OpenID Connect(OIDC) は、OAuth 2.0 の上に構築された認証レイヤーです。認可サーバーによる認証に基づいて、クライアントがエンドユーザーの身元を確認できるようにする標準です。
CI/CD では、OIDC を使うと、GitHub Secrets に API キーなどの長期間有効な認証情報を保存せずに、ワークフローからクラウドプロバイダー(AWS、Azure、GCP など)へ安全に認証できます。
Actions で OIDC が機能する仕組み
GitHub Actions は OIDC プロバイダーとして動作できます。ワークフローが実行されると、GitHub はそのジョブ専用の一意で短期間のみ有効な OIDC トークンを生成します。
このトークンには、リポジトリ、ブランチ、ジョブ ID など、ワークフローに関する検証可能なクレームが含まれます。クラウドプロバイダー側で GitHub が発行したトークンを信頼するように設定すると、これらのクレームに基づいて一時的なアクセスを許可できます。
OIDC の主なメリット
GitHub Actions で OIDC を使用すると、セキュリティ上の大きなメリットが得られます。
- 長期間有効な認証情報が不要: GitHub Secrets に静的なクラウド API キーを保存する必要がありません。
- リスクの低減: トークンの有効期間が短いため、侵害された場合の影響を最小限に抑えられます。
- きめ細かなアクセス制御: クラウドのロールを特定のワークフロー条件(
mainブランチからのデプロイだけを許可するなど)に対応付けられます。 - 監査: ID がワークフローの実行に紐付くため、誰が何を行ったかを追跡しやすくなります。
OIDC とクラウドを統合する
OIDC を使用するには、クラウドプロバイダー(AWS IAM、Azure AD、GCP IAM など)が GitHub の OIDC 発行者を信頼するように設定する必要があります。
通常は、次の設定を行います。
- クラウドアカウントに Identity Provider(IdP)を設定する。
- 特定の権限を付与する Role/Policy を定義する。
- GitHub の OIDC トークンがそのロールを引き受けることを許可する「Trust Policy」をロールに追加する。多くの場合、特定のリポジトリからのトークンだけを許可するなど、トークンのクレームに基づく条件も設定します。
その後、ワークフローがトークンを要求し、それを使って認証します。
理解度チェック: 安全なアクセス
機密データの保存に使う GitHub Secrets と、認証情報を保存せずにクラウド認証を行う OpenID Connect について学びました。
GitHub Actions のシークレット管理について、次の記述のうち正しいものはどれでしょうか。
振り返り: 認証情報を安全に保護する
よくできました。CI/CD パイプラインで機密データを安全に管理する方法を学びました。
- GitHub Secrets は、リポジトリ、組織、特定の環境内で API キーやトークンを暗号化して保存できます。
- OpenID Connect(OIDC) は、静的な認証情報の代わりに、短期間のみ有効で検証可能なトークンを使うことで、クラウドプロバイダーへのより安全な認証を実現します。
これらのプラクティスは、堅牢で安全な DevOps パイプラインを構築するうえで不可欠です。
よくある質問
「GitHub によるシークレット管理」レッスンは無料ですか?
はい。「GitHub によるシークレット管理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CI/CD with GitHub Actions & DevOps Pipelinesコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。
「GitHub によるシークレット管理」で何を学びますか?
GitHub Secrets と OpenID Connect (OIDC) を使用して、機密性の高い認証情報を安全に保存・取得する方法を詳しく学びます。 ブラウザで直接実行するハンズオンコードでCI/CD with GitHub Actions & DevOps Pipelinesを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CI/CD with GitHub Actions & DevOps Pipelinesを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCI/CD with GitHub Actions & DevOps Pipelinesは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「GitHub によるシークレット管理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCI/CD with GitHub Actions & DevOps Pipelinesレッスンでコードを書いて実行できますか?
はい。すべてのCI/CD with GitHub Actions & DevOps Pipelinesレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。