GitHub の変数とシークレットは、リポジトリの Write 権限があれば読み取り/書き込みができる

2023.12.22

こんにちは、CX 事業本部 Delivery 部の若槻です。

GitHub Actions では、ワークフロー実行から参照できるカスタムの変数を Variables(変数)および Secrets(シークレット)で定義することができます。

上記を Configuration variables(構成変数)とも呼び、以下のようなものがあります。

  • Repository Variables
  • Repository Secrets
  • Organization Variables
  • Organization Secrets
  • Environment Variables
  • Environment Secrets

そしてこれらの構成変数の管理を GitHub.com から行う画面(https://github.com/<Org>/<Repo>/settings/secrets/actions)にアクセスするためには、ユーザーは Admin 権限を持っている必要があります。

しかし今回、組織やリポジトリの Write 権限のみのユーザーでも構成変数の読み取り/書き込みが可能となる方法を確認してみたのでご紹介します。

はじめに結論

GitHub Actions for VS Code または GitHub CLI を使うことにより、リポジトリの Write 権限があるユーザーであれば構成変数の読み取り/書き込みが可能となります。

試してみる

GitHub におけるユーザーのリポジトリに対する権限ロールには次の 5 つがあります。

ロール 説明
Read リポジトリの読み取り
Triage リポジトリの読み取り、Issue と PR の管理
Write リポジトリの読み取り、書き込み
Maintain リポジトリの読み取り、書き込み、いくつかの設定の管理
Admin リポジトリの読み取り、書き込み、すべての設定の管理

詳細な権限は次のドキュメントに記載があります。

ここでは Write 権限と Read 権限のユーザーで試してみます。

環境

# VS Code
$ code --version
1.85.1
0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2
arm64

# GitHub Actions for VS Code
$ code --list-extensions --show-versions | grep github.vscode-github-actions@      
github.vscode-github-actions@0.26.2

# GitHub CLI
$ gh --version
gh version 2.40.1 (2023-12-13)
https://github.com/cli/cli/releases/tag/v2.40.1

VS Code および GitHub CLI で、検証をしたいユーザーでログインしておきます。

Write 権限のユーザーなら読み取り/書き込みができる

まず、リポジトリに対する Write 権限を持つユーザーで試してみます。

VS Code 拡張の場合

VS Code でサイドバーから拡張機能の Settings メニューを開くと、各種構成変数の名前や値が参照できるようになっています。

[+]ボタンから新しい構成変数を、名前と値を指定して追加することができます。

変数名の指定。

値の指定。

新しい変数が追加されました。

既存の構成変数の更新や削除を行うこともできます。

VS Code 拡張で構成変数の読み取り/書き込みをすることが確認できました。

ちなみに Environment 自体の作成や削除はできません。

GitHub CLI の場合

構成変数を取得することができます。

$ gh variable list
NAME          VALUE     UPDATED           
FFF           rrr       about 7 hours ago
HOGE_GHA_VAR  hoge-var  about 21 hours ago
$ gh variable list --env development
NAME        VALUE           UPDATED           
HOGE_VAR    dev-hoge-var    about 22 hours ago
HOGE_VAR_2  dev-hoge-var-2  about 8 hours ago
$ gh secret list
NAME             UPDATED           
HOGE_GHA_SECRET  about 22 hours ago

構成変数を更新することもできます。

$   gh variable set FFF --body FUGA
✓ Created variable FFF for <Org>/wakatsuki-test
$ gh variable list                                          
NAME          VALUE     UPDATED               
FFF           FUGA      less than a minute ago
HOGE_GHA_VAR  hoge-var  about 22 hours ago

GitHub CLI で構成変数の読み取り/書き込みをすることが確認できました。

Read 権限のユーザーなら、Environment 名の読み取りのみできる

リポジトリに対する Read 権限を持つユーザーで試してみます。

VS Code 拡張の場合

すると Environment の名前のみ取得されました。構成変数は取得さえできませんでした。

VS Code 拡張では Environment 名の読み取りのみできるようです。

GitHub CLI の場合

構成変数の取得はできませんでした。

$ gh variable list
failed to get variables: HTTP 404: Not Found (https://api.github.com/repos/<Org>/wakatsuki-test/actions/variables?per_page=100)
$ gh variable list --env development
failed to get variables: HTTP 404: Not Found (https://api.github.com/repos/<Org>/wakatsuki-test/actions/variables?per_page=100)
$ gh secret list
failed to get variables: HTTP 404: Not Found (https://api.github.com/repos/<Org>/wakatsuki-test/actions/variables?per_page=100)

おわりに

GitHub Actions for VS Code または GitHub CLI を使うことにより、リポジトリの Write 権限があるユーザーであれば構成変数の読み取り/書き込みが可能となることを確認しました。

プロジェクトによっては GitHub リポジトリの Write 権限のみしか開発者ユーザーに付与されない場合もあると思います。そのような場合に Admin 権限を持つユーザーに構成変数の管理を依頼することなく、開発者ユーザー自身で構成変数の読み取り/書き込みを行うことができるようになります。

参考

以上