Basic Github Information
基本構造
大きな会社の基本的なgithub環境構造は、複数の組織を所有するエンタープライズを所有し、それぞれが複数のリポジトリと複数のチームを含むことがあります。小規模な会社は、1つの組織のみを所有し、エンタープライズは所有していない場合があります。
ユーザーの観点からは、ユーザーは異なるエンタープライズと組織のメンバーである可能性があります。その中で、ユーザーは異なるエンタープライズ、組織、リポジトリの役割を持つことがあります。
さらに、ユーザーは異なるエンタープライズ、組織、またはリポジトリの役割を持つ異なるチームの一部である可能性があります。
最後に、リポジトリには特別な保護メカニズムがあるかもしれません。
権限
エンタープライズの役割
エンタープライズの所有者: この役割を持つ人々は、管理者を管理し、エンタープライズ内の組織を管理し、エンタープライズの設定を管理し、組織全体にポリシーを適用することができます。ただし、組織の所有者になるか、組織が所有するリポジトリへの直接アクセスを与えられない限り、組織の設定やコンテンツにアクセスすることはできません。
エンタープライズのメンバー: あなたのエンタープライズが所有する組織のメンバーも、自動的にエンタープライズのメンバーです。
組織の役割
組織内のユーザーは異なる役割を持つことができます:
組織の所有者: 組織の所有者は、組織への完全な管理アクセスを持っています。この役割は限定されるべきですが、組織内では少なくとも2人以上にするべきです。
組織のメンバー: 組織内の人々のデフォルトの非管理的な役割は組織のメンバーです。デフォルトでは、組織のメンバーは多くの権限を持っています。
請求管理者: 請求管理者は、組織の請求設定を管理できるユーザーです。例えば、支払い情報などです。
セキュリティマネージャー: 組織の所有者が組織内の任意のチームに割り当てることができる役割です。適用されると、チームの全メンバーに、組織全体のセキュリティアラートと設定を管理する権限、および組織内のすべてのリポジトリに対する読み取り権限を与えます。
組織にセキュリティチームがある場合、セキュリティマネージャーの役割を使用して、チームのメンバーに組織への最小限のアクセスを与えることができます。
Githubアプリ管理者: 組織が所有するGitHubアプリを管理するために追加のユーザーを許可するために、所有者はGitHubアプリ管理者の権限を付与することができます。
外部コラボレーター: 外部コラボレーターは、1つ以上の組織リポジトリにアクセスできるが、組織のメンバーとして明示的にはない人です。
これらの役割の権限をこの表で比較することができます: https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles
メンバーの権限
https://github.com/organizations/<org_name>/settings/member_privileges で、組織の一部であるだけでユーザーが持つ権限を確認できます。
ここで設定された設定は、組織のメンバーの以下の権限を示します:
組織のすべてのリポジトリに対して管理者、ライター、リーダー、または権限なしである。
メンバーがプライベート、内部、または公開リポジトリを作成できるかどうか。
リポジトリのフォークが可能かどうか
外部コラボレーターを招待できるかどうか
公開またはプライベートサイトを公開できるかどうか
管理者がリポジトリに対して持つ権限
メンバーが新しいチームを作成できるかどうか
リポジトリの役割
デフォルトではリポジトリの役割が作成されます:
読み取り: プロジェクトを閲覧または議論したい非コード貢献者に推奨されます
トリアージ: 書き込みアクセスなしで問題とプルリクエストを積極的に管理する必要がある貢献者に推奨されます
書き込み: プロジェクトに積極的にプッシュする貢献者に推奨されます
維持: 敏感または破壊的なアクションへのアクセスなしでリポジトリを管理する必要があるプロジェクトマネージャーに推奨されます
管理者: セキュリティの管理やリポジトリの削除など、プロジェクトに完全なアクセスが必要な人に推奨されます
各役割の権限をこの表で比較することができます https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role
https://github.com/organizations/<org_name>/settings/roles で独自の役割を作成することもできます。
チーム
https://github.com/orgs/<org_name>/teams で組織で作成されたチームをリストすることができます。他のチームの子供であるチームを見るには、各親チームにアクセスする必要があります。
ユーザー
組織のユーザーは https://github.com/orgs/<org_name>/people でリストされています。
各ユーザーの情報では、ユーザーがメンバーであるチームと、ユーザーがアクセスできるリポジトリを見ることができます。
Github認証
Githubは、アカウントに認証し、あなたに代わってアクションを実行するためのさまざまな方法を提供します。
Webアクセス
github.comにアクセスして、ユーザー名とパスワード(および潜在的に2FA)を使用してログインできます。
SSH Keys
SSHキーを設定することで、関連する秘密キーがあなたに代わって行動を実行できます。 https://github.com/settings/keys
GPG Keys
これらのキーではユーザーを偽装することはできませんが、使用しない場合、署名なしのコミットを送信したことで発見される可能性があります。vigilant modeについてもっと学ぶ。
Personal Access Tokens
個人アクセストークンを生成してアプリケーションにアカウントへのアクセスを許可できます。個人アクセストークンを作成する際、ユーザーはトークンが持つ権限を指定する必要があります。https://github.com/settings/tokens
Oauth Applications
Oauthアプリケーションは、あなたのGitHub情報へのアクセスや、あなたになりすまして行動を実行するための権限を要求することがあります。この機能の一般的な例は、一部のプラットフォームで見つけることができるGitHubでログインするボタンです。
自分のOauthアプリケーションを作成するにはhttps://github.com/settings/developersへ
アカウントにアクセスできるOauthアプリケーションをすべて表示するにはhttps://github.com/settings/applicationsへ
Oauthアプリが要求できるスコープを表示するにはhttps://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-appsへ
組織のアプリケーションのサードパーティアクセスを表示するには_https://github.com/organizations/<org_name>/settings/oauth_application_policy_へ
セキュリティの推奨事項:
OAuthアプリは、GitHub全体で常に認証されたGitHubユーザーとして行動するべきです(例えば、ユーザー通知を提供する場合)し、指定されたスコープへのアクセスのみを持つべきです。
OAuthアプリは、認証されたユーザーのためにGitHubでのログインを有効にすることで、アイデンティティプロバイダとして使用できます。
単一のリポジトリに対して行動するアプリケーションを作りたい場合は、OAuthアプリを作成しないでください。
repo
OAuthスコープを使用すると、OAuthアプリは認証されたユーザーのすべてのリポジトリに対して行動できます。チームや会社のためのアプリケーションとしてOAuthアプリを作成しないでください。OAuthアプリは単一のユーザーとして認証するため、ある人が会社の使用のためにOAuthアプリを作成した場合、その人が会社を去ったら他の誰もそれにアクセスできなくなります。
詳細はこちら。
Github Applications
GitHubアプリケーションは、あなたのGitHub情報へのアクセスや、特定のリソースに対して特定の行動を実行するためにあなたになりすます権限を要求することがあります。GitHubアプリでは、アプリがアクセスするリポジトリを指定する必要があります。
GitHubアプリをインストールするには、組織のオーナーであるか、リポジトリで管理権限を持っている必要があります。
GitHubアプリは個人アカウントまたは組織に接続するべきです。
自分のGitHubアプリケーションを作成するにはhttps://github.com/settings/appsへ
アカウントにアクセスできるGitHubアプリケーションをすべて表示するにはhttps://github.com/settings/apps/authorizationsへ
これらはGitHubアプリケーションのAPIエンドポイントですhttps://docs.github.com/en/rest/overview/endpoints-available-for-github-app。アプリの権限に応じて、いくつかのエンドポイントにアクセスできます
組織のインストール済みアプリを表示するには_https://github.com/organizations/<org_name>/settings/installations_へ
セキュリティの推奨事項:
GitHubアプリは、user-to-serverトークンを使用していない限り、ユーザーから独立して行動するべきです。ユーザーからサーバーへのアクセストークンのセキュリティを高めるために、8時間後に期限切れになるアクセストークンと、新しいアクセストークンと交換できるリフレッシュトークンを使用できます。詳細については、"Refreshing user-to-server access tokens"を参照してください。
GitHubアプリは特定のリポジトリと統合するべきです。
GitHubアプリは個人アカウントまたは組織に接続するべきです。
GitHubアプリがユーザーができるすべてを知っていて実行することを期待しないでください。
GitHubでのログインサービスのみが必要な場合は、GitHubアプリを使用しないでください。ただし、GitHubアプリはuser identification flowを使用してユーザーをログインさせる_とともに_他のことも行うことができます。
GitHubユーザーとして行動し、そのユーザーができるすべてを行いたいだけの場合は、GitHubアプリを作成しないでください。
GitHub Actionsを使用してワークフローファイルを変更したい場合は、
workflow
スコープを含むOAuthトークンを使用してユーザーに代わって認証する必要があります。ユーザーは、ワークフローファイルが含まれているリポジトリに対して管理または書き込み権限を持っている必要があります。詳細については、"Understanding scopes for OAuth apps"を参照してください。詳細はこちら。
Github Actions
これはGitHubで認証する方法ではありませんが、悪意のあるGitHub Actionが不正にGitHubへのアクセスを取得し、Actionに与えられた権限に応じて、いくつかの異なる攻撃が行われる可能性があります。詳細は以下を参照してください。
Git Actions
Gitアクションは、イベントが発生したときにコードの実行を自動化することを可能にします。通常、実行されるコードはリポジトリのコードに何らかの関連があります(例えば、Dockerコンテナをビルドするか、PRに秘密が含まれていないことを確認する)。
設定
https://github.com/organizations/<org_name>/settings/actions では、組織のgithub actionsの設定を確認することができます。
github actionsの使用を完全に禁止することも、すべてのgithub actionsを許可することも、特定のactionsのみを許可することも可能です。
また、Github Actionを実行するために承認が必要な人と、実行時のGithub ActionのGITHUB_TOKENの権限を設定することもできます。
Git Secrets
Github Actionは通常、githubやサードパーティのアプリケーションとやり取りするために何らかのシークレットが必要です。リポジトリ内で平文でそれらを置くことを避けるために、githubではSecretsとして設定することを許可しています。
これらのシークレットは、リポジトリまたは組織全体に対して設定することができます。その後、Actionがシークレットにアクセスできるようにするためには、次のように宣言する必要があります:
Bashを使用した例
シークレットは、それらが宣言されたGithub Actionsからのみアクセス可能です。
リポジトリまたは組織に設定されると、githubのユーザーは再びアクセスすることはできません。彼らはただ変更することができます。
したがって、githubシークレットを盗む唯一の方法は、Github Actionを実行しているマシンにアクセスできることです(そのシナリオでは、Actionに宣言されたシークレットのみにアクセスできます)。
Git 環境
Githubでは、シークレットを保存できる環境を作成することができます。その後、以下のようなものを使って、githubアクションに環境内のシークレットへのアクセスを与えることができます:
最終更新