Git
GitHub権限・セキュリティ
権限ロール、Secrets管理、セキュリティベストプラクティス
権限ロール
GitHubでは、リポジトリやOrganizationに対して適切な権限管理を行うことが重要です。
リポジトリの権限レベル(GitHub)
| 権限レベル | 説明 | 主な操作 |
|---|---|---|
| Read | 読み取り専用 | コードの閲覧、Issue・PRの閲覧 |
| Triage | Issue・PR管理 | Issueのラベル付け、Assignee設定 |
| Write | 書き込み権限 | コードのPush、PRのマージ |
| Maintain | リポジトリ設定管理 | ブランチ保護、Webhookの設定 |
| Admin | 完全な管理権限 | 権限管理、リポジトリ削除 |
GitLabやBitbucketでは権限体系が異なります。
それぞれのプラットフォームのドキュメントを参照してください。
権限付与の原則
最小権限の原則を遵守します。必要最小限の権限のみを付与し、過剰な権限を避けます。
外部協力者(読み取りのみ): Read
開発メンバー: Write
テックリード・リードエンジニア: Maintain
プロジェクトオーナー: Admin
Admin権限は必要最小限にAdmin権限を持つユーザーは、リポジトリの削除やセキュリティ設定の変更が可能です。
本当に必要な人のみに限定してください。
Secrets・環境変数管理
機密情報をリポジトリに含めないことは、セキュリティの基本です。
Secretsの種類
GitHubでは、以下の3種類のSecretsを管理できます:
- Repository Secrets: 特定のリポジトリでのみ使用
- Environment Secrets: 特定の環境(production、stagingなど)で使用
- Organization Secrets: Organization配下のすべてのリポジトリで使用
Secretsの管理方針
リポジトリに含めてはいけない情報
- API キー、トークン
- データベース接続情報
- パスワード、秘密鍵
- OAuth クライアントシークレット
- 暗号化キー
誤ってコミットした場合は、直ちにトークンやパスワードを無効化し、新しいものを発行してください。
.envファイルの管理
環境変数は .env ファイルで管理し、.gitignore に必ず追加します。
# 環境変数ファイル
.env
.env.local
.env.*.local
.env.production
.env.staging
代わりに、.env.example ファイルをリポジトリに含め、必要な環境変数の例を示します。
# データベース接続情報
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
# API設定
API_KEY=your_api_key_here
API_SECRET=your_api_secret_here
# アプリケーション設定
NODE_ENV=development
PORT=3000
GitHub Actions での Secrets 使用
GitHub Actions のワークフローで Secrets を使用する場合の例:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to production
env:
API_KEY: ${{ secrets.API_KEY }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: |
npm run deploy
Environment Secrets の活用本番環境とステージング環境で異なるSecretsを使用する場合は、Environment Secretsを使用すると管理が容易になります。
セキュリティ
個人アクセストークンの管理
GitHubの個人アクセストークン(PAT)を使用する場合:
- 必要最小限のスコープ(権限)のみを付与
- トークンに有効期限を設定
- 定期的にトークンをローテーション
- 使用しなくなったトークンは削除
Fine-grained personal access tokens の使用
従来のPersonal Access Tokenではなく、Fine-grained tokensを使用すると、より細かい権限制御が可能です。
従来のPersonal Access Tokenではなく、Fine-grained tokensを使用すると、より細かい権限制御が可能です。
依存関係の脆弱性管理
Dependabot の有効化
Dependabotを有効にすると、依存パッケージの脆弱性を自動的に検出し、更新PRを作成してくれます。
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
ブランチ保護とコードレビュー
セキュリティを強化するために、以下の設定を推奨します:
- main/develop ブランチへの直接pushを禁止
- 必須レビュアー数の設定(1人以上)
- ステータスチェック(CI/CD)の成功を必須化
- 管理者による保護ルールのバイパスを禁止
詳細はブランチ戦略を参照してください。
インシデント対応
機密情報の誤コミット時の対応
- 即座にトークンを無効化
- API キーやパスワードを直ちに無効化し、新しいものを発行
- 履歴から削除(必要に応じて)
git-filter-repoや BFG Repo-Cleaner を使用して履歴から削除- ただし、すでにクローンされている可能性があるため、トークン無効化が最優先
- チームへの通知
- 関係者に状況を共有し、再発防止策を検討
履歴の書き換えは、チーム全体に影響を与えます。
トークンの無効化と再発行で対応できる場合は、そちらを優先してください。