GitHubのOrganizations（チーム）に、二段階認証（二要素認証）の設定を導入・徹底する

# はじめに
IT企業や組織にとって、ソースコードは命です。それほど大事なソースコードを管理しているGithubのセキュリティ対策を怠っていませんか？

そこで今回は、GithubID（or メールアドレス）とパスワードが盗まれたとしても、不正アクセスを防止することができる二段階認証をご紹介します。

GitHubには、もともと二段階認証機能が提供されているので、 **個人レベルでの導入自体は簡単** です。

下記URLからただ設定するだけです。
https://github.com/settings/security

<img src="https://qiita-image-store.s3.amazonaws.com/0/105093/ce2fea13-3fb2-5832-719d-c66962b7b734.png">

ただなかなか、 **組織レベルでの導入は難しい** と思います。エンジニア、デザイナー、マーケッター、PM、時には営業や外注会社など様々なメンバー全員に、個人毎に二段階認証を設定してもらう必要があるためです。 

そこで今回、GitHubの二段階認証の設定を導入するステップをまとめてみました。たったの3ステップです。

1. 対象のGithubIDを特定する
2. 対象者に二段階認証の設定を依頼する
3. 二段階認証の設定を徹底する

実際にこのステップによって、私の所属するチームでは二段階認証が徹底されています。また **新規メンバーが入ってきても、二段階認証を徹底することができます。** 「二段階認証をやってね！」という入社フローのようなドキュメントレベルではなく、システムとして抜け漏れなく徹底できるようになっています。


# ① 対象のGithubIDを特定する
そもそも誰が二段階認証していて、誰が二段階認証していないのか調査して、設定を依頼する対象者を特定する必要があります。

下記URLにアクセスして、2FA×でソートすることで、画像のように対象者を確認することができます。
https://github.com/orgs/チーム名（※要変更）/people

<img src="https://qiita-image-store.s3.amazonaws.com/0/105093/229d6d00-9755-9e6c-a3fd-65d64a6a2410.png" width=50%>

もしも、URLにアクセスしても、2FAという文言が表示されていなければ、あなたはそのチームにおいてOwnerではなくMemberのため、閲覧できないことを表します。OwnerからOwner権限をもらうか、Ownerと連絡を取り合って対象者を特定してください。尚、この先もOwner権限がないと閲覧、設定できない機能があるため、よしなにやってください。


# ② 対象者に二段階認証の設定を依頼する
※ここは対象者の人数にもよるので、②はよしなにやってください。

無事にGithubIDを特定できたと思います。ただここで非常に厄介なのが、 **GithubIDを特定できても誰だかわからない** 場合です。例えば、TaroYamadaというGithubIDは、山田太郎さんだなと推測できますが、hoge123などのGithubIDでは誰だか推測すらできませんよね。そこでどのように連絡するかが非常に大事になってきます。

個別で1人1人連絡するのが大変なくらい対象者がいた場合、Githubを利用しているであろう人が全員含まれているある程度大きなメーリスやチャットのチャンネルやルームに連絡しましょう。

その際、GithubIDわかっても誰だよ問題があるので、いっそのこと対象者の画像を添付してしまいましょう。そうすることで、対象者は晒されているという気持ちになるので、すぐに二段階認証の設定をしてくれますし、すでに二段階認証の設定をしている人も、改めてセキュリティの意識が上がると思います。また画像の添付には、URLベースでスクリーンショットを共有できるので、[gyazo](https://gyazo.com/download?lang=ja) をオススメします。

以下、連絡の例です。ちなみに、締め切りは3日後にしました。

```
【Githubの二段階認証の設定のお願い】

Githubの「チーム名（※要変更）」に所属していて、二段階認証を設定していない方々へのご連絡です。

恐れ入りますが、セキュリティ向上のために、二段階認証の設定をお願いいたします。

下記URLからTwo-factor authenticationをOnにしてください。
https://github.com/settings/security

現在設定されていない、対象のGithubIDは以下です。必ずご確認ください。
https://gyazo.com/hoge
https://gyazo.com/hogehoge

締め切りは、【●月✖︎日(▲)まで】でお願いいたします。

それまでに二段階認証の設定をしていないアカウントは、
強制的に「チーム名（※要変更）」から除外されてしまうので、必ず設定をお願いいいたします。

万が一スマホを無くしてしまうと二度とログインできなくなるので、
Githubで二段階認証をする際に、リカバリーコードがダウンロードすることができるので、
大切に保管しておいてください。
```

# ③ 二段階認証の設定を徹底する
先程の文章にあった下記の文章が気になったと思います。

```
それまでに二段階認証の設定をしていないアカウントは、
強制的に「チーム名（※要変更）」から除外されてしまうので、必ず設定をお願いいいたします。
```

これはGithubが提供しているセキュリティの機能です。
以下から設定することができます。
https://github.com/organizations/チーム名（※要変更）/settings/security

<img src="https://qiita-image-store.s3.amazonaws.com/0/105093/77446b32-445c-845a-416e-204bb14b52f8.png">

この機能によって、大きく2つの恩恵を受けることができます。

- 設定した瞬間、二段階認証を設定していないアカウントは、そのOrganizations（チーム）から除外されます。（※対象者に除外されましたというメールは送信されます。）
- 新たにメンバーがOrganizations（チーム）にジョインする際も、そのアカウントが二段階認証を設定していなければジョインすることができなくなります。

除外されるという機能のためONにする前に、締切日まで度々下記にアクセスして設定の進捗を確認するとともに毎日gyazoでスクリーンショットを更新しながら、リマインドすることをオススメします。
https://github.com/orgs/チーム名（※要変更）/people

もし除外されてしまって、Githubを閲覧することやPushすることができないと連絡があった場合、対象者に二段階認証を設定してもらい、再度Ownerがその人をOrganizations（チーム）にジョインさせれば解決します。

# まとめ

1. 対象のGithubIDを特定する
2. 対象者に二段階認証の設定を依頼する
3. 二段階認証の設定を徹底する

このたったの3ステップで、二段階認証を徹底することができました。③は少々強引なやり方には見えますが、スピード感を重視して再発を防止する場合、これくらい荒っぽくても良いと思います。また今回のステップで、退職者や複数アカウントなど本当は利用していないアカウントを一掃できることも一石二鳥だと思います。

IT企業や組織にとって、ソースコードは命です。それほど大事なソースコードを管理しているGithubのセキュリティ対策を怠ってはいけません。