外注が終わったのに、リポジトリの権限が残っている | GH Media
URLがコピーされました

外注が終わったのに、リポジトリの権限が残っている

URLがコピーされました
外注が終わったのに、リポジトリの権限が残っている

開発を外部に委託している会社に「いま御社のリポジトリに、誰がアクセスできますか」と聞くと、たいてい答えが返ってきません。調べれば分かる、という状態ではあります。ただ、その場で答えられないということは、変化に気づける状態ではないということでもあります。

実際に一覧を出してみると、常駐が終わった会社のアカウントが残っている、退職した人が個人アカウントのまま入っている、誰の依頼で付与したのか分からない権限がある、といったものが出てきます。悪意の話ではなく、ほとんどが外し忘れです。

外し忘れが起きるのは、付与が画面操作だからです。依頼はチャットで来て、担当者がブラウザを開いて、認証して、画面を操作して終わる。記録はチャットのスレッドにしか残りません。半年後にそのスレッドを掘り返す人はいません。

「ポチポチ」の何が問題なのか

先日、GitHub の権限管理を Terraform に移した実例が公開されていました。動機として挙げられていたのは、新しいメンバーが入るたび、チーム構成が変わるたびに Slack のワークフローで依頼が流れてきて、その都度ブラウザを開いて画面を操作する——という運用のしんどさです。

しんどさは入口の話で、実務で効いてくるのはその先にある3つです。

現在の状態を一箇所で見られない。 Organization のメンバー一覧、チームの所属、リポジトリごとの権限は別々の画面にあります。全体像は、人の頭の中にしかありません。

変更の理由が残らない。 「なぜこの人に書き込み権限があるのか」に答えられるのは、付与した本人だけです。その本人が異動すると、誰も外せなくなります。外していいか分からないものは、残ります。

棚卸しが目視になる。 定期的に確認する運用を作っても、比較対象が前回の目視結果なので、差分ではなく全件を見ることになります。続きません。

コードに載せると、依頼がプルリクエストになる

Terraform の GitHub プロバイダを使うと、Organization のメンバーシップ、チーム、チームの所属、リポジトリへのチームの割り当てといった単位を設定ファイルとして持てます。

運用の形が変わるのはここです。権限の依頼が「チャットのメッセージ」から「プルリクエスト」になります。

  • 誰が、誰に、どの権限を、いつ付けたのかがコミット履歴に残る
  • 承認がレビューという形で明示的になる
  • 現在の状態がファイルとして読める(棚卸しが差分の確認になる)
  • 契約終了時は、該当する記述を消したプルリクエストを出せば終わる

最後の1点が、外部に委託している会社にとっていちばん効きます。オフボーディングが「思い出して外す作業」ではなく「差分の適用」になります。Google Workspace 側のアカウント停止手順を整備している会社でも、コードホスティング側だけが手作業のまま残っているケースは珍しくありません。

権限の依頼がチャットのスレッドで消える運用と、プルリクエストとして履歴に残る運用の対比図

全部を載せようとすると失敗する

最初から Organization のすべてをコード化しようとすると、たいてい途中で止まります。実際の事例でも「すべてを管理するわけではない」と明言されています。

載せる価値が高いのは、変更が頻繁で、記録が必要なものです。

対象最初に載せるか理由
Organization のメンバー載せる入退社・契約開始終了で最も動く
チームとその所属載せる権限の実体はここに集まる
チームへのリポジトリ割り当て載せる「誰が何を触れるか」の核心
ブランチ保護のルール状況次第変更頻度が低く、先に載せる必要は薄い
リポジトリそのものの作成急がない作成より権限のほうが事故が多い

順序を守ると、最初の1週間で効果が出ます。逆に、リポジトリ本体の設定から入ると、既存の細かい差異を取り込む作業で消耗します。

実際に詰まるところ

導入を検討するなら、先に知っておいたほうがよい点が4つあります。

既存のリソースの取り込み。 現状はすでに存在するので、まず現在の状態をコード側に引き当てる作業が要ります。ここが初回のコストの大半です。人数が多いほど時間がかかるので、対象をメンバーとチームに絞る判断が効いてきます。

招待中のユーザーの扱い。 招待を送ったが承諾されていない状態は、メンバーとしては未確定です。適用のたびに差分として現れることがあり、運用ルールを決めておかないと毎回のノイズになります。

個人アカウントとの結びつき。 GitHub のアカウントは個人に紐づきます。社員名簿とアカウント名の対応表がどこにも無いと、コード上の記述を見ても誰のことか分かりません。この対応表を先に作るほうが、実は効きます。

適用に使う権限の置き場所。 適用を実行するための資格情報と、現在の状態を記録するファイルの保管場所には、Organization を操作できる強い権限が集まります。ここが個人のPCにあると、開発端末が侵入経路になったときの被害範囲が跳ね上がります。CI 上で実行し、資格情報は秘密情報として管理する形が前提です。

なお、インフラ全体を宣言的に管理する話と同じ道具を使いますが、権限管理のほうは対象が小さく、効果が出るまでが短い領域です。インフラのコード化が進んでいない会社でも、ここだけ先に始められます。

発注する側が確認できること

自社に開発チームがない場合でも、委託先に聞ける質問があります。

「弊社のリポジトリにアクセスできる人の一覧を、いま出せますか」。出せるなら、次は「その一覧はどこで管理されていますか」。答えが「GitHub の画面です」であれば、契約が終わったときに外れる保証はどこにもありません。契約終了から30日後に、もう一度同じ一覧を出してもらうとはっきりします。

次にやること

自社の Organization で、直近1年に権限を付与した回数を数えてください。10回を超えているなら、画面操作のままでは記録が追えない規模です。

まずはメンバーとチームの所属だけをコードに載せて、次の依頼からプルリクエストで受ける。ここまでで、棚卸しは差分の確認になります。

開発体制の権限設計、委託先を含めたアクセス管理、契約終了時のオフボーディング手順の整備については、グリームハブの開発・AI・自動化のご相談で承っています。体制と委託先の数によって適切な範囲が変わるため、お問い合わせからご相談ください。

Sources

URLがコピーされました

グリームハブ株式会社は、変化の激しい時代において、アイデアを形にし、人がもっと自由に、もっと創造的に生きられる世界を目指しています。

記事を書いた人

鈴木 翔

鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

関連記事

「TECH」の記事一覧を見る