一言で
ガバナンスは 誰が何をできるか を決めること。
まず org。team、ポリシー、ruleset で形にする。
ルールは上から下へ流れる。repo も Copilot も同じ。
Organization の 3 モデル 📖 Docs 🏢 リコー事例
-
ORG の BASE PERMISSION
theomonfort-org → Member privileges ↗
Organization settings → Access → Member privileges → Base permissions
ドロップダウンを開く:
No permission、Read、Write、Admin。No permission = Single org / 🔴 Red。Write = 🟢 Green / 🟡 Sandbox。変更は全メンバーに即反映されるため、保存せずに見せるだけにする。
まず org をいくつ作るか。モデルごとに、全社員が最初から何を見られるかが変わる。
アクセスの付け方 📖 Docs
次はアクセス。IdP → team → repo の順で、個人に直接付けない。
flowchart LR
IDP["🪪 IdP (Okta)<br/>唯一の情報源"]
ENT["🏛️ Enterprise Team 📖<br/>Admin · 全 org"]
ORG["🏢 Org Team 📖<br/>この org · 組織図ベース"]
REPO["📦 Repository"]
IDP -->|"SCIM(EMU のみ)"| ENT
IDP -->|"SCIM / team sync"| ORG
ORG -->|Write など| REPO
ENT -->|Admin| REPO
classDef idp fill:#1a0a2e,stroke:#ffb000,color:#ffb000,stroke-width:2px
classDef ent fill:#2a0a0a,stroke:#ff5555,color:#ff5555,stroke-width:2px
classDef org fill:#0a0e27,stroke:#00f0ff,color:#00f0ff,stroke-width:2px
classDef repo fill:#0a1a14,stroke:#9bbc0f,color:#9bbc0f,stroke-width:2px
class IDP idp
class ENT ent
class ORG org
class REPO repo
click ENT href "https://docs.github.com/en/enterprise-cloud@latest/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams" "Enterprise teams のドキュメント" _blank
click ORG href "https://docs.github.com/en/organizations/organizing-members-into-teams/about-teams" "Organization teams のドキュメント" _blank
Org team と Enterprise team 📖 Docs
複数 org なら Enterprise team、1 つの org なら Org team。
| 🏢 Org team | 🏛️ Enterprise team | |
|---|---|---|
| 🎯 範囲 | 1 つの org | 複数 org |
| 🎫 付与 | repo ロール、org ロール、Copilot | 左すべて + enterprise ロール |
| 🪪 IdP 同期 | ✅ EMU、✅ 個人アカウント | ✅ EMU、❌ 個人アカウント |
| 💰 コストセンター | ❌ | ✅ メンバーに自動追従 |
| 💬 メンション | @org/team | @/ent:team |
| 📂 CODEOWNERS | ✅ | ❌(2026-10-14 時点) |
⚠️ Enterprise team を org に割り当てると、メンバーは招待なしで参加する。外部コラボレーターも enterprise メンバーになり、ライセンスを消費する。
Policies
-
POLICIES FOR ENTERPRISE-ASSIGNED USERS
octodemo → AI controls → Copilot ↗
Enterprise → AI controls → Copilot → Policies for enterprise-assigned users
ドロップダウンを開く:
Enabled、Disabled。Disabled = 「Let organizations decide」のままのポリシーは、Enterprise から直接ライセンスを受けたユーザーには全て無効になる。保存せずに見せるだけにする。
人は入った。次は何をしてよいか。org と enterprise で決め、repo では決めない。
- 🏛️ Enterprise — SSO / SCIM、使える機能、全 org の基準
- 🤖 Copilot モデル — グローバルモデルポリシーで新モデルの既定を決める。Enterprise team ごとの追加付与も可(preview ↗)。
- 🏢 Org — メンバー権限、repo 作成、2FA、Copilot と Actions
- 📦 Repo — ポリシーは持たず継承するだけ。repo で足せるのは ruleset。
- 🔁 ルールは下に流れる。org は厳しくできるが、緩められない。
- 👤 org なしの Copilot ライセンス:「Let organizations decide」は適用されない。代わりに Enterprise の Policies for enterprise-assigned users 設定が決め、無効ならそれらの機能は使えない。Copilot ポリシー ↗
🎯 ガードレールは上から。repo ごとに設定しない。 Org policies ↗ · Enterprise policies ↗
管理者ロール 📖 Docs
ポリシーは決まった。次は、その設定を誰が触れるか。repo のロールとは別の話。
- 🏛️ Enterprise Owner — 全設定とポリシー。ただし org の設定と中身は既定で見えない
- 🏢 Org Owner — その org の全権。絞る。ただし 2 名を下回らない
- 🛡️ Security Manager — 全 repo の Read とアラート管理。セキュリティ班に Owner は要らない
- 🧩 カスタム組織ロール — 「監査ログの閲覧だけ」など、必要な権限だけを束ねる(GHEC)
🎯 Owner は肩書きではなく鍵。配る前に、足りる小さいロールを探す。 Org roles ↗ · Custom org roles ↗
リポジトリ権限ロール
ここからは repo の中。誰が何をするか。ロールは積み上げ式。
| ロール | 下のロールに足されるもの |
|---|---|
| 👀 Read | 閲覧、clone、issue 作成 |
| 🔺 Triage | issue と PR の管理 — label、担当、close |
| ✍️ Write | push と merge |
| 🛠️ Maintain | 破壊的でない repo 設定 |
| 👑 Admin | 全権 — アクセス、公開範囲、削除 |
🧩 合うものがなければ、org レベルでカスタムリポジトリロールを作る。 Custom roles ↗
Rulesets 📖 Docs
-
CUSTOM PROPERTY を作成
前提:デモ専用 repo、Org owner、GitHub Team / Enterprise、承認用に Write 権限を持つ同僚 1 人。
theomonfort-org → Custom properties ↗
Organization settings → Repository → Custom properties → New property
Name:
business_criticality
Description:Business impact of service disruptionType: Single select
Values:critical,standard,experimentalAllow repository actors to set this property: OFF(中央管理で repo 側の対象外化を防ぐ)
Require this property for all repositories: OFF
Default: なし → Save property -
REPO に値を設定
同じ Custom properties ページ → Set values → 既存のデモ repo を選択 → Edit properties
business_criticality=critical→ Save changes別のデモ repo は同じ手順で
experimentalにする。名前の例のみ:payments-api / order-service = critical、recommendations-lab = experimental。実際のデモ repo に置き換える。
-
ORG RULESET を 1 つ作成
Organization settings → Repository → Rulesets → New ruleset → New branch ruleset
Ruleset name:
Critical services: reviewed changes
Enforcement status: Active
Bypass list: 空のままTarget repositories: Repositories matching a filter
Filter:props.business_criticality:criticalTarget branches: Add a target → Default branch
Require a pull request before merging: ON
Required approvals: 1
Dismiss stale pull request approvals when new commits are pushed: ON
Require conversation resolution before merging: ONBlock force pushes: ON
Restrict deletions: ONRestrict updates: OFF
Require status checks to pass before merging: OFF
Require signed commits: OFF → Create -
適用を確認
critical repo のデフォルトブランチに新しい変更を通常 push → 拒否。作業ブランチから PR を作成 → 別の人の承認が 1 件必要。
Custom properties → Set values → experimental のデモ repo を選択 → Edit properties →
business_criticality=critical→ Save changesその repo の Settings → Rules → Rulesets で同じ Org ruleset の適用を確認。分類を変えるだけ。ruleset の編集は不要。
ポリシーが「できること」、ロールが「誰が」。ruleset はコードに何を求めるか。
- 🛡️ branch protection の後継 — レビュー必須、必須チェック、署名、force push 禁止をひとまとめに
- 🏛️ ENT / ORG / REPO で定義 — 上位で決めれば、配下の repo すべてに効く
- 🔁 重ねて効く — 複数当たれば最も厳しいものが勝つ。下位で緩められない
- 🧪 Evaluate モード — 強制せずに影響だけ測る。既存 repo にはここから入れる
🎯 bypass は既定で付けない。付けた ruleset は強制ではなく「お願い」。 Org rulesets ↗
12 のアンチパターン
構造は以上。次はそれを壊すもの。01、02、11 は後から直しにくい。
21 項目のガードレール 📖 Well-Architected
設定する値と場所。19〜21 は Copilot。時間がなければ 03、15、18。
Copilot managed settings(NEW)
-
SERVER-MANAGED(.github-private)
theomonfort-org/.github-private → copilot/managed-settings.json ↗
Enterprise 全員の基準。
permissions、enabledPlugins、allowedMcpServersを見せる。同じフォルダのteams/とteam-mappings.jsonで team ごとに上書きできる。default branch に push すると約 1 時間で反映。クライアントの再起動か再サインインで即時反映。
-
FILE-BASED(端末のファイル)
Finder で ⌘⇧G を押し、パスを貼り付ける:
/Library/Application Support/GitHubCopilot/managed-settings.jsonが置いてある(この Mac ではtelemetryの設定)。中身は server-managed と同じ JSON。root 所有で group / world 書き込み不可でないと CLI は読まない。変更後はクライアントを再起動。
-
MDM(managed preferences)
Terminal で実行:
plutil -p "/Library/Managed Preferences/com.github.copilot.plist"この Mac では
"remoteControl.mode" => "disabled"が表示される。MDM は JSON ファイルではなく、ドット区切りのキーと文字列の値で配る(Intune など)。設定が重なると MDM → server-managed → file の順で優先。
Copilot クライアントも同じ。copilot/managed-settings.json がローカル設定を上書きする。優先順位は MDM → server-managed → file → user。導入手順 ↗ · 全キー ↗
.github-private & source org
置き場所は自分が持つ 1 つの repo。Enterprise → AI controls → Agents で指定する。
.github-private/
├── agents/ # enterprise 全体に公開
├── .github/agents/ # 検証用ステージング
└── copilot/
├── managed-settings.json # 基準となる設定
├── team-mappings.json # file → enterprise team
└── teams/*.json # team ごとの上書き
- 🏢 選べるのは org だけ。repo 名と
copilot/のパスは固定。 - 🔒 repo アクセスの有無に関係なくプラン全員に効く。internal にして
copilot/**を CODEOWNERS で守る。 - ✅ 設定ミスは Copilot settings validation で確認できる。2026-09-25 ↗
★ 使いどころ
5 つの層、ルールは 1 つ。上から設定する。
| 層 | 範囲 | 例 |
|---|---|---|
| 🏢 ポリシー | org → enterprise | 2FA、公開範囲、機能の可否 |
| 🔑 管理ロール | org → enterprise | Owner、Security manager、カスタム |
| 👤 権限ロール | リポジトリ | Read / Write / Admin |
| 🛡️ ruleset | ブランチとタグ | レビュー必須、必須チェック、署名 |
| 🤖 managed settings | Copilot クライアント | 既定モデル、bypass 禁止、プラグイン |
🎯 上から決める。repo ごとでは回らない。
費用配賦と支出の管理は コストセンターと予算 ↗ を参照。