ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

暗号化されたシークレットの作成と保存

暗号化されたシークレットを使えば、アクセストークンのようなセンシティブな情報をリポジトリに保存できます。

GitHub ActionsはGitHub Free、GitHub Pro、GitHub Team、GitHub Enterprise Cloud、GitHub Oneで利用できます。 GitHub Actions is not available for private repositories owned by accounts using legacy per-repository plans. 詳しい情報については「GitHubの製品」を参照してください。

ここには以下の内容があります:

ユーザアカウントのリポジトリでは、暗号化されたシークレットを作成するにはリポジトリのオーナーでなければなりません。 Organizationのリポジトリでは、暗号化されたシークレットを作成するには管理アクセスを持っていなければなりません。 シークレットを作成するのにREST APIを使っているなら、リポジトリへの書き込みアクセス権を持つ人はシークレットを作成できます。 詳しい情報についてはGitHub 開発者ドキュメンテーションの「GitHub ActionsシークレットAPI」を参照してください。

ファイルを編集するアクセス権を持っていれば、ワークフローファイル中の暗号化されたシークレットを使い、読み取ることができます。 詳細は「GitHub 上のアクセス権限」を参照してください。

暗号化されたシークレットについて

Secrets are encrypted environment variables that you create in a repository for use with GitHub Actions. GitHub uses a libsodium sealed box to help ensure that secrets are encrypted before they reach GitHub, and remain encrypted until you use them in a workflow.

シークレットをアクションが使用できるようにするには、ワークフローファイルでシークレットを入力または環境変数に設定する必要があります。

警告: GitHubは、ログに出力されたシークレットを自動的に削除しますが、シークレットをログに出力することは意識的に避けなくてはなりません。

暗号化されたシークレットの作成

シークレットの名前には、空白を含めることはできません。 GitHubがログのシークレットを確実に削除するよう、構造化データをシークレットの値として使用することは避けてください。 たとえば、JSONやエンコードされたGit blobを含むシークレットは作成しないでください。

  1. GitHubで、リポジトリのメインページにアクセスしてください。
  2. リポジトリ名の下で Settings(設定)をクリックしてください。
    リポジトリの設定ボタン
  3. 左サイドバーで [Secrets] をクリックします。
  4. [Name] 入力ボックスに、シークレットの名前を入力します。
  5. シークレットの値を入力します。
  6. [Add secret] をクリックします。

When generating credentials, we recommend that you grant the minimum permissions possible. For example, instead of using personal credentials, use deploy keys or a service account. Consider granting read-only permissions if that's all that is needed, and limit access as much as possible. When generating a personal access token (PAT), select the fewest scopes necessary.

シークレットをアクションに渡すには、シークレットを、ワークフロー内の入力または環境変数として設定してください。 アクションに必要な入力および環境変数については、アクションのREADMEファイルを確認します。 詳しい情報については、「GitHub Actionsのワークフロー構文」を参照してください。

暗号化されたシークレットのワークフロー内での利用

GITHUB_TOKENを除き、フォークしたリポジトリからワークフローがトリガーされた場合、シークレットは runner に渡されません。

アクションに入力あるいは環境変数としてシークレットを提供するには、リポジトリ内に作成したシークレットにアクセスするsecretsコンテキストを使うことができます。 For more information, see "Context and expression syntax for GitHub Actions" and "Workflow syntax for GitHub Actions."

steps:
  - name: Hello world action
    with: # Set the secret as an input
      super_secret: ${{ secrets.SuperSecret }}
    env: # Or as an environment variable
      super_secret: ${{ secrets.SuperSecret }}

Avoid passing secrets between processes from the command line, whenever possible. Command-line processes may be visible to other users (using the ps command) or captured by security audit events. To help protect secrets, consider using environment variables, STDIN, or other mechanisms supported by the target process.

If you must pass secrets within a command line, then enclose them within the proper quoting rules. Secrets often contain special characters that may unintentionally affect your shell. To escape these special characters, use quoting with your environment variables. 例:

Example using Bash

steps:
  - shell: bash
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "$SUPER_SECRET"

Example using PowerShell

steps:
  - shell: pwsh
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "$env:SUPER_SECRET"

Example using Cmd.exe

steps:
  - shell: cmd
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "%SUPER_SECRET%"

シークレットの制限

ワークフローは、最大で100のシークレットを持てます。 シークレット環境変数の名前は、リポジトリ内でユニークでなければなりません。

シークレットの容量は最大64 KBです。 64 KBより大きなシークレットを使うには、暗号化されたシークレットをリポジトリ内に保存して、復号化パスフレーズをGitHubに保存します。 たとえば、GitHubのリポジトリにファイルをチェックインする前に、gpgを使って認証情報をローカルで暗号化します。 詳しい情報については、「gpg manpage」を参照してください。

警告: アクションを実行する際、シークレットは出力されないので注意してください。 この回避策を用いる場合、GitHubはログに出力されたシークレットを削除しません。

  1. ターミナルから以下のコマンドを実行して、gpgおよびAES256暗号アルゴリズムを使用してmy_secret.jsonファイルを暗号化します。

    $ gpg --symmetric --cipher-algo AES256 my_secret.json
  2. パスフレーズを入力するよう求められます。 このパスフレーズを覚えておいてください。GitHubで、このパスフレーズを値として用いる新しいシークレットを作成するために必要になります。

  3. パスフレーズを保存するための新しいシークレットをリポジトリ内に作成します。 たとえば、LARGE_SECRET_PASSPHRASEという名前で新しいシークレットを作成し、シークレットの値を上記のステップで選択したパスフレーズに設定します。

  4. 暗号化したファイルをリポジトリ内にコピーしてコミットします。 この例では、暗号化したファイルはmy_secret.json.gpgです。

  5. パスワードを復号化するシェルスクリプトを作成します。 このファイルをdecrypt_secret.shとして保存します。

    #!/bin/sh
    
    # Decrypt the file
    mkdir $HOME/secrets
    # --batch to prevent interactive command --yes to assume "yes" for questions
    gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \
    --output $HOME/secrets/my_secret.json my_secret.json.gpg
  6. リポジトリにチェックインする前に、シェルスクリプトが実行可能であることを確かめてください。

    $ chmod +x decrypt_secret.sh
    $ git add decrypt_secret.sh
    $ git commit -m "Add new decryption script"
    $ git push
  7. ワークフローから、stepを使用してシェルスクリプトを呼び出し、シークレットを復号化します。 ワークフローを実行している環境にリポジトリのコピーを作成するには、actions/checkoutアクションを使用する必要があります。 リポジトリのルートを基準として、runコマンドを使用することで、シェルスクリプトを参照します。

    name: Workflows with large secrets
    
    on: push
    
    jobs:
      my-job:
        name: My Job
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Decrypt large secret
            run: ./.github/scripts/decrypt_secret.sh
            env:
              LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
          # This command is just an example to show your secret being printed
          # Ensure you remove any print statements of your secrets. GitHub does
          # not hide secrets that use this workaround.
          - name: Test printing your secret (Remove this step in production)
            run: cat $HOME/secrets/my_secret.json

担当者にお尋ねください

探しているものが見つからなかったでしょうか?

弊社にお問い合わせください