GLANZ. CREATIVE WORKS
Git

GitHub権限・セキュリティ

権限ロール、Secrets管理、セキュリティベストプラクティス

権限ロール

GitHubでは、リポジトリやOrganizationに対して適切な権限管理を行うことが重要です。

リポジトリの権限レベル(GitHub)

権限レベル説明主な操作
Read読み取り専用コードの閲覧、Issue・PRの閲覧
TriageIssue・PR管理Issueのラベル付け、Assignee設定
Write書き込み権限コードのPush、PRのマージ
Maintainリポジトリ設定管理ブランチ保護、Webhookの設定
Admin完全な管理権限権限管理、リポジトリ削除
GitLabやBitbucketでは権限体系が異なります。 それぞれのプラットフォームのドキュメントを参照してください。

権限付与の原則

最小権限の原則を遵守します。必要最小限の権限のみを付与し、過剰な権限を避けます。

外部協力者(読み取りのみ): Read
開発メンバー: Write
テックリード・リードエンジニア: Maintain
プロジェクトオーナー: Admin
Admin権限は必要最小限にAdmin権限を持つユーザーは、リポジトリの削除やセキュリティ設定の変更が可能です。 本当に必要な人のみに限定してください。

Secrets・環境変数管理

機密情報をリポジトリに含めないことは、セキュリティの基本です。

Secretsの種類

GitHubでは、以下の3種類のSecretsを管理できます:

  1. Repository Secrets: 特定のリポジトリでのみ使用
  2. Environment Secrets: 特定の環境(production、stagingなど)で使用
  3. 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を使用すると、より細かい権限制御が可能です。

依存関係の脆弱性管理

Dependabot の有効化

Dependabotを有効にすると、依存パッケージの脆弱性を自動的に検出し、更新PRを作成してくれます。

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 10

ブランチ保護とコードレビュー

セキュリティを強化するために、以下の設定を推奨します:

  • main/develop ブランチへの直接pushを禁止
  • 必須レビュアー数の設定(1人以上)
  • ステータスチェック(CI/CD)の成功を必須化
  • 管理者による保護ルールのバイパスを禁止

詳細はブランチ戦略を参照してください。

インシデント対応

機密情報の誤コミット時の対応

  1. 即座にトークンを無効化
    • API キーやパスワードを直ちに無効化し、新しいものを発行
  2. 履歴から削除(必要に応じて)
    • git-filter-repo や BFG Repo-Cleaner を使用して履歴から削除
    • ただし、すでにクローンされている可能性があるため、トークン無効化が最優先
  3. チームへの通知
    • 関係者に状況を共有し、再発防止策を検討
履歴の書き換えは、チーム全体に影響を与えます。 トークンの無効化と再発行で対応できる場合は、そちらを優先してください。