Skip to main content

GitHub シークレットの種類の概要

GitHub シークレットの使用法、スコープ、アクセス許可について説明します。

GitHub シークレットの種類について

GitHub シークレットは、API キー、トークン、パスワードなどの機密情報をリポジトリに安全に格納するために使われます。

機密情報を GitHub シークレットとして格納すると、資格情報やキーをハードコーディングする必要がなくなり、コードやログでの露出を防ぐことができます。 このシークレットは、サービスの認証、資格情報の管理、ワークフローでの機密データのセキュリティで安全な受け渡しに使用できます。

2 種類のシークレットが GitHub で使われています。

GitHub シークレットの種類に応じて、リポジトリ、organization、または個人用アカウントのセキュリティの設定ページでシークレットを作成および管理できます。

Dependabot のシークレット

Dependabot シークレットは、Dependabot 内で使う資格情報と機密情報を格納するために使われます。

Dependabot シークレットはリポジトリの dependabot.yml ファイルで参照されます。

使用方法

Dependabot シークレットは、通常、プライベート パッケージ レジストリに対する認証のために Dependabot によって使われます。 これにより、Dependabot で pull request を開き、プライベート リポジトリ内の脆弱な依存関係や古い依存関係を更新できるようになります。 認証に使われるこれらの Dependabot シークレットは、リポジトリの dependabot.yml ファイルで参照されます。

Dependabot シークレットには、Dependabot によって開始されるワークフローに必要なシークレットを含めることもできます。 たとえば、Dependabot は、依存関係を更新する pull request を作成するとき、または pull request にコメントを付けるときに、GitHub Actions ワークフローをトリガーできます。 この場合、ワークフローが Dependabot イベントによってトリガーされている限り、Dependabot シークレットをワークフロー ファイル (.github/workflows/*.yml) から参照できます。

範囲

Dependabot シークレットは以下で定義できます。

  • リポジトリ レベル
  • Organization レベル

Organization レベルで設定されている場合、Dependabot シークレットはリポジトリ間で共有できます。 Organization 内のどのリポジトリがシークレットにアクセスできるかを指定する必要があります。

アクセス許可

Dependabot から Dependabot シークレットにアクセスするのは、依存関係を更新するためにプライベート レジストリに対する認証を受けるときです。

GitHub Actions ワークフローから Dependabot シークレットにアクセスするのは、ワークフローのトリガー イベントが Dependabot によって開始されたときです。 これは、ワークフローが Dependabot によって開始された時点で使用できるのは Dependabot シークレットのみであり、Actions シークレットにはアクセスできないためです。 そのため、これらのワークフローに必要なすべてのシークレットは、Actions シークレットではなく、Dependabot シークレットとして格納する必要があります。 pull_request_target イベントには追加のセキュリティ制限があります。 「制限事項と制約事項」を参照してください。

ユーザーのアクセス許可

リポジトリレベルのシークレット:

  • リポジトリに対して管理者アクセス権を持つユーザーは、Dependabot シークレットを作成および管理できます。
  • リポジトリに対してコラボレーター アクセス権を持つユーザーは、Dependabot シークレットを使用できます。

Organization レベルのシークレット:

  • Organization 所有者は、Dependabot シークレットを作成および管理できます。
  • 各シークレットにアクセスできるリポジトリに対してコラボレーター アクセス権を持つユーザーは、Dependabot シークレットを使用できます。

制限事項と制約事項

Dependabot によって開始されたワークフローの場合、pull_request_target イベントは他のイベントとは異なる方法で処理されます。 このイベントで、pull request のベース参照が Dependabot (github.event.pull_request.user.login == 'dependabot[bot]') によって作成された場合:

  • ワークフローは読み取り専用の GITHUB_TOKEN を受け取ります。
  • シークレットは、ワークフローには利用できません

この追加の制限は、Dependabot によって作成された pull request から生じる可能性のある潜在的なセキュリティ リスクを防ぐのに役立ちます。

Dependabot シークレットはフォークに渡されません。

アクション シークレット

Actions シークレットは、API キー、認証トークン、その他の資格情報などの機密情報をワークフローに格納するために使われます。

使用方法

Actions シークレットはワークフロー ファイル (.github/workflows/*.yml) で参照されます。

範囲

Actions シークレットは以下で定義できます。

  • リポジトリ レベル
  • 環境レベル
  • Organization レベル

環境レベルのシークレットは、運用やステージングなどの特定の環境に固有です。 Actions シークレットは、organization レベルで設定されている場合、リポジトリ間で共有できます。 アクセス ポリシーを使って、シークレットにアクセスできるリポジトリを制御できます。

アクセス許可

Actions シークレットは、GitHub Actions ワークフロー内でのみ使用できます。 Actions 上で実行されているとしても、Dependabot は Actions シークレットにアクセスできません。

Dependabot によって開始されたワークフローの場合、Actions シークレットは使用できません。 ワークフローからアクセスできるようにするには、これらのワークフロー シークレットを Dependabot シークレットとして格納する必要があります。

Actions シークレットを格納する場所によって、そのアクセス可否が決まります。

  • リポジトリ シークレット: リポジトリ内のすべてのワークフローがシークレットにアクセスできます。
  • 環境シークレット: シークレットは、その特定の環境を参照するジョブに限定されます。
  • Organization シークレット: organization によってアクセスが許可されたリポジトリ内のすべてのワークフローは、organization シークレットにアクセスできます。

ユーザーのアクセス許可

リポジトリレベルと環境のシークレット:

  • リポジトリに対して管理者アクセス権を持つユーザーは、Actions シークレットを作成および管理できます。
  • リポジトリに対してコラボレーター アクセス権を持つユーザーは、シークレットを使用できます。

Organization レベルのシークレット:

  • Organization 所有者は、Actions シークレットを作成および管理できます。
  • 各シークレットにアクセスできるリポジトリに対してコラボレーター アクセス権を持つユーザーは、シークレットを使用できます。

制限事項と制約事項

  • Actions シークレットは、Dependabot によって開始されたワークフローでは使用できません。
  • Actions シークレットは、フォークからの pull request によってトリガーされたワークフローには渡されません。
  • ワークフロー ログに出力されるすべての GitHub シークレットの内容は GitHub Actions によって自動的にリダクトされます。
  • 最大 1,000 個の組織シークレット、100 個のリポジトリ シークレット、100 個の環境シークレットを格納できます。 シークレットのサイズは最大 48 KB です。 詳細については、「シークレットの制限」を参照してください。

参考資料