SKILL.md
GitHub Actions OIDC Setup Skill
このスキルは、GitHub Actionsから各クラウドプロバイダ(Google Cloud, Firebase, AWS, Azure)へ、一時的な認証情報を用いてセキュアに接続するためのOIDC(OpenID Connect) / Workload Identity連携設定をサポート・自動実行します。 従来の長期的なサービスアカウントキーやIAMアクセスキーをGitHubのSecretsに登録する運用を廃止し、より安全なキーレス認証へ移行させます。
トリガー条件
ユーザーが以下のような要望を出した時に発動します:
- 「GitHub ActionsでOIDC対応の設定をして」
- 「GitHub ActionsでFirebase Hostingにデプロイする処理のOIDC認証で組んで」
- 「GCP/AWS/AzureのWorkload Identity連携を設定して」
- 「GitHubからクラウドへのデプロイをキーレスにしたい」
ワークフロー手順
ステップ 1: 要件の把握とパラメータの収集
処理を開始する前に、ユーザーの環境から以下の情報を自動取得、またはユーザーに確認します。
- 対象のクラウドプロバイダ: Google Cloud (GCP) / Firebase, AWS, Azure のいずれか。
- GitHubリポジトリ情報:
owner/repo 名(例: mono0926/dog)。ローカルのgit設定(git remote -v 等)から自動取得を試みてください。
- クラウド側の識別子:
- Google Cloud / Firebase: GCPプロジェクトID、プロジェクト番号、使用するサービスアカウント名。 - AWS: AWSアカウントID、作成するIAMロール名。 - Azure: テナントID、サブスクリプションID、アプリ(クライアント)ID。
- 必要な権限・用途: デプロイ対象(Firebase Hosting, Cloud Functions, Cloud Run, AWS S3, ECRなど)に応じて付与すべきロール/ポリシー。
ステップ 2: クラウド別詳細リファレンスの読み込み
収集した情報に基づいて、以下の対応するリファレンスドキュメントを読み込み、具体的なセットアップ手順を実行します。
- Google Cloud / Firebase の場合:
[gcp-firebase.md](references/gcp-firebase.md) を読み込んで実行してください。
[aws.md](references/aws.md) を読み込んで実行してください。
[azure.md](references/azure.md) を読み込んで実行してください。
ステップ 3: ローカル環境のCLIツール有無の確認
設定コマンドをエージェントが代理実行できるか確認するため、必要なCLIツールがインストールされ、ログイン状態にあるかを検査します。
- GCP:
gcloud --version および認証状態の確認
- AWS:
aws --version および認証状態の確認
- Azure:
az --version および認証状態の確認
エージェント自身でCLI操作ができる場合、コマンドを提示してユーザーの承認を得た上で、自動実行します。 CLIが使えない、または権限不足の場合は、ユーザー自身が実行するための「そのままコピーしてターミナルで実行できるgcloud/awsコマンドスクリプト」を提示して、実行を促してください。
ステップ 4: GitHub Actions ワークフローYAMLの作成・修正
認証設定が完了したら、GitHub ActionsからOIDC連携を利用するためのYAMLファイルを .github/workflows/ 以下に作成または修正します。
共通の重要事項
- permissions ブロックの明示的な一括定義(必須)
GitHub ActionsでOIDCトークンを発行するためには、以下の permissions 設定を必ずセットで(一括定義で)YAMLに含めてください。片方だけ(例: id-token: write のみ)を指定すると、もう片方(contents: read)が自動で none になり、コードのチェックアウト(actions/checkout)等が失敗する原因となります。 ``yaml permissions: id-token: write # OIDCトークンの要求に必須 contents: read # リポジトリ内容の読み取り(checkout等)に必須 ``
- サードパーティ製 Action のメジャーバージョン固定
ワークフロー内で外部のGitHub Actionsを使用する際は、原則として最新のメジャーバージョンを明記して使用してください。 * 例: actions/checkout@v4, google-github-actions/auth@v2, aws-actions/configure-aws-credentials@v4
- 本番環境等のアクセス制限(セキュリティの堅牢化)
本番(prod)やステージング(stg)環境用の接続設定を行う場合は、GCPのWorkload IdentityポリシーやAWSのIAM信頼ポリシー(Trust Policy)において、リポジトリ制限にワイルドカード()を安易に使用せず、特定のブランチ(例: refs/heads/main)や環境(例: environment:production)に厳格に絞り込んだ条件式を生成してください。 悪い例: repo:owner/repo: (すべてのブランチやPRから接続可能になってしまう) 良い例: repo:owner/repo:ref:refs/heads/main (本番ブランチのみに制限)
トラブルシューティングと注意点
- GitHubのOrganization制限: 企業や一部のOrganizationでは、Workload Identityのプロバイダポリシーで特定のアトリビュート(例:
repository_owner)が制限されている場合があります。ポリシーエラーが発生した場合は、アトリビュートマッピングを見直してください。
- ロールの反映遅延: IAMロールやWorkload Identityの設定は、作成後実際に反映されるまでに数十秒〜数分かかる場合があります。Actionsが一時的に認証エラー(403等)になった場合は、少し時間をおいてから再試行するよう案内してください。