GitHub Actions OIDC × Custom Propertiesで実現するABAC実装ガイド
GitHub Actions OIDCトークンがリポジトリのCustom Propertiesを扱えるようになったことで、CI/CDの権限設計は一段進みます。これは単なる機能追加ではなく、静的ロール運用から属性ベース制御(ABAC)への移行機会です。
従来運用の限界
多くの組織では、CI用クラウド権限が次のように肥大化します。
- 環境ごとに似たロールが乱立
- 例外対応でロール条件が複雑化
- リポジトリの重要度と権限強度が連動しない
この状態では、最小権限を維持するほど運用負荷が上がり、結果的に“広めに許可”へ流れます。
ABACを成立させる属性設計
ABACの肝は、属性の命名規則と統制です。実務で有効なのは、次のような属性セットです。
- データ分類(
public/internal/restricted) - 規制境界(
pci/sox/none) - デプロイ重要度(
low/high) - オーナー領域(platform, payments など)
これらをOIDCクレームに反映し、クラウドIAM側で評価すれば、権限付与を“実態に沿って”自動化できます。
基本ポリシーパターン
導入時は次を最低ラインにします。
- trust policyはdeny-by-default
- org/repo一致を必須化
- 必要属性の一致を必須化
- セッション有効時間を短縮
- 監査ログへ属性値を記録
この5点だけでも、権限の過剰化と原因不明アクセスを大幅に減らせます。
属性改ざんリスクに対処する
属性が権限判断に使われる以上、属性変更は“設定作業”ではなく“セキュリティ変更”です。よって以下が必要です。
- 属性変更の承認フロー
- CODEOWNERSによるレビュー必須化
- 日次ドリフト検知
- 緊急例外(break-glass)のチケット連携
属性管理を野放しにすると、ABACは逆に新しい攻撃面になります。
4週間での導入ロードマップ
- 1週目: 属性タクソノミー確定
- 2週目: 既存リポジトリへ属性付与・欠損洗い出し
- 3週目: 非本番で強制検証
- 4週目: 本番適用と監査ダッシュボード公開
小さく始め、例外を可視化しながら適用範囲を広げるのが成功パターンです。
まとめ
OIDC + Custom Properties は、YAMLを減らす機能ではなく、組織規模に耐える権限制御基盤です。リポジトリの意図(属性)をクラウド認可に直結できれば、速度と統制を同時に満たせます。