Skip to main content

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

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

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

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

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

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

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

がシークレットを格納する方法の概要

は、Libsodium シールド ボックスを使ってシークレットを暗号化します。 シークレットは、 に到達する前に暗号化され、関連するサービス (Dependabot、 Actions、または Codespaces) で使われるまで暗号化されたままになります。

Dependabot のシークレット

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

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

使用方法

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

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

範囲

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

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

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

アクセス許可

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

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

ユーザーのアクセス許可

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

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

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

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

制限事項と制約事項

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

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

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

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

アクション シークレット

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

使用方法

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

範囲

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

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

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

アクセス許可

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

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

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

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

ユーザーのアクセス許可

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

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

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

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

制限事項と制約事項

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

Codespaces シークレット

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

使用方法

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

範囲

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

  • ユーザー アカウント レベル
  • リポジトリ レベル
  • Organization レベル

ユーザー アカウント レベルのシークレットの場合、シークレットにアクセスできるリポジトリを選択できます。 Organization レベルで設定されている場合、Codespaces シークレットはリポジトリ間で共有できます。 アクセス ポリシーを使って、シークレットにアクセスできるリポジトリを制御できます。

アクセス許可

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

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

ユーザーのアクセス許可

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

  • Codespaces シークレットは、そのシークレットにアクセスできるリポジトリを使って作成した codespace で使用できます。

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

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

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

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

制限事項と制約事項

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

参考資料