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

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

## GitHub はシークレットを格納する方法

GitHub
[では、Libsodium シール ボックス](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes)を使用してシークレットを暗号化します。 シークレットは GitHub に到達する前に暗号化され、 Dependabot、 GitHub Actions、または Codespacesによって使用されるまで暗号化されたままになります。

## Dependabot 秘匿情報

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

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

### 使用方法

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

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

### Scope

Dependabotシークレットは、次の場合に定義できます。

* リポジトリ レベル
* 組織階層

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

### アクセス許可

Dependabot シークレットは、依存関係を更新するためにプライベート レジストリに対して認証を行うときに、 Dependabot によってアクセスされます。

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

#### ユーザーのアクセス許可

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

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

組織のシークレット

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

### 制限事項と制約事項

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

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

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

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

## アクション シークレット

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

### 使用方法

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

### Scope

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

* リポジトリ レベル
* 環境レベル
* 組織階層

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

### アクセス許可

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

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

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

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

#### ユーザーのアクセス許可

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

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

組織のシークレット

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

### 制限事項と制約事項

* アクション シークレットは、 Dependabotによって開始されたワークフローでは使用できません。
* Actions シークレットは、フォークからの pull request によってトリガーされたワークフローには渡されません。
* GitHub Actions は、ワークフロー ログに出力されるすべての GitHub シークレットの内容を自動的に編集します。
* 最大 1,000 個の組織シークレット、100 個のリポジトリ シークレット、100 個の環境シークレットを格納できます。 シークレットのサイズは最大 48 KB です。 詳細については、「[シークレットの制限](/ja/actions/reference/security/secrets#limits-for-secrets)」を参照してください。

## Codespaces 秘匿情報

Codespaces シークレットには、 GitHub Codespaces内で使用するための資格情報と機密情報 (API トークンや SSH キーなど) が格納されるため、セキュリティで保護された開発環境を構成できます。

### 使用方法

Codespaces シークレットは、 Codespaces 開発コンテナー構成 (`devcontainer.json`) 内で参照されます。

### Scope

Codespacesシークレットは、次の場合に定義できます。

* ユーザー アカウント レベル
* リポジトリ レベル
* 組織階層

ユーザー アカウント レベルのシークレットの場合、シークレットにアクセスできるリポジトリを選択できます。

Codespaces 組織レベルで設定されている場合、シークレットはリポジトリ間で共有できます。 アクセス ポリシーを使って、シークレットにアクセスできるリポジトリを制御できます。

### アクセス許可

Codespaces シークレットには、 Codespacesでのみアクセスできます。

GitHub Actions
Codespacesシークレットにアクセスできません。

#### ユーザーのアクセス許可

ユーザー アカウントレベルのシークレット:

* Codespaces シークレットは、そのシークレットにアクセスできるリポジトリを使用して作成するすべてのコード空間で使用できます。

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

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

組織のシークレット

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

### 制限事項と制約事項

* GitHub Codespacesには最大 100 個のシークレットを格納できます。
* シークレットのサイズは最大 48 KB です。
* Codespaces シークレットはフォークに渡されません。

## 詳細については、次を参照してください。

* [Dependabot のプライベート レジストリへのアクセスの構成](/ja/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries#storing-credentials-for-dependabot-to-use)
* [シークレット リファレンス](/ja/actions/reference/security/secrets#limits-for-secrets)
* [リポジトリまたは Organization の開発環境シークレットの管理](/ja/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization)
* [GitHub Codespaces のアカウント固有のシークレットの管理](/ja/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces)