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

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

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

GitHub Actions is available with GitHub Free, GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. GitHub Actions is unavailable for per-repository plans, which are legacy billing plans. For more information, see "GitHub's products."

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

リポジトリに対してwriteアクセスがあるユーザなら、誰でもシークレットの作成、読み取りおよび使用ができます。

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

シークレットとは、暗号化された環境変数のことです。リポジトリに作成され、GitHub Actionsによってのみ使用されます。 GitHubは、公開鍵認証付き暗号およびPoly1305暗号化アルゴリズムを使用して、ウェブブラウザでシークレットを暗号化します。 詳しい情報については、「TweetNaCl.js」ドキュメンテーションを参照してください。 シークレットをアクションが使用できるようにするには、ワークフローファイルでシークレットを入力または環境変数に設定する必要があります。

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

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

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

  1. On GitHub, navigate to the main page of the repository.

  2. Under your repository name, click Settings.

    Repository settings button

  3. 左サイドバーで [Secrets] をクリックします。

  4. [Name] 入力ボックスに、シークレットの名前を入力します。

  5. シークレットの値を入力します。

  6. [Add secret] をクリックします。

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

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

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

アクションに入力あるいは環境変数としてシークレットを提供するには、リポジトリ内に作成したシークレットにアクセスするsecretsコンテキストを使うことができます。 詳しい情報については「GitHub Actionsのコンテキストと式構文」及び「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 }}

シークレットの制限

ワークフローは、最大で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@v1
          - name: Decrypt large secret
            run: ./.github/scripts/decrypt_secret.sh
            env:
              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

担当者にお尋ねください

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

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