🔐

Github Actions の 秘匿情報(Secrets) 管理について(提案)

2024/01/11に公開

提案内容

皆様は、Github Actionsで秘匿情報(Secrets)を取り扱う場合、どの様にしておりますでしょうか?
GithubActions上のスタンダードにGithubActionsのSecretsでしょうか?

今回は、AWS Secrets Managerの提案をさせて頂ければ、と思います。

この記事は何?

CircleCIなどでSecretsの管理で後述する困りごとを経験しており、GithubActionsでも同様の悩みが出そうと、他社がどのような取り組みをしているか調べても見つかりませんでした。
ベストプラクティスと言える自信はありませんが、1例としてGithub Actionsで秘匿情報の管理について提案させて頂きたく記事を書かせて頂きました。

結論どう管理するのか?

以下の手順でAWS Secrets Managerに設定した秘匿情報の取得・利用をすることができます。

  1. AWS Secrets Managerで秘匿情報を作成

今回は、cicd_secretsと言う名前で作成しています。後述のコードなどで出てきます。
Jsonで作成して、以下の様な内容にします。

{
    "API_KEY": "test_api_key"
}

2. 秘匿情報の取得

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v4
      with:
          aws-region: "ap-northeast-1"
          role-to-assume: ${{ secrets.AWS_ROLE_ARN_FOR_DEV }}

    - name: Get Secrets from AWS Secrets Manager
      uses: aws-actions/aws-secretsmanager-get-secrets@v1
      with:
          secret-ids: |
            SECRETS,cicd_secrets
          parse-json-secrets: true

※AWSへのログインが必要なため、1つだけGithubactionsに秘匿情報としてOIDCRoleのARNを設定する必要があります。今回の場合ですと、AWS_ROLE_ARN_FOR_DEVが対象です。

※cicd_secrets部分がAWS Secrets Managerで作成したSecret名です。
また、その前のcicd_secretsの前についている、SECRETSはenvに差し込む時のprefixとなり任意の文字を指定が可能です。
詳細は公式ドキュメントをご参照ください。
https://github.com/aws-actions/aws-secretsmanager-get-secrets

ちょっと困っていること

秘匿情報の取得で利用しているアクションが、prefixが必須で必要になるので、変数名が長くなってしまいます。
こちらは、対応中なので長い目で待ちましょう。
https://github.com/aws-actions/aws-secretsmanager-get-secrets/issues/11

  1. 秘匿情報の利用
    - name: Echo Secrets
      run: |
        echo ${{ env.SECRETS_API_KEY }}

※秘匿情報のためEchoしてもマスクされます、呼び出し方の参考と捉えてください。

何に困っていたのか?

AWS Secrets Managerを利用しようとした経緯です。

主には、秘匿情報の中身を確認できないことに困っておりました。
GithubActionsやCircleCIで秘匿情報を設定可能ですが、一度設定すると、中身の確認は出来ません。
調べてみると、あれやこれやと、やり方はある様なのですが、公式の方法では無いですし、何より手間がかかります。
https://zenn.dev/arkwknsk/articles/deaee3f0d7958b
https://dev.classmethod.jp/articles/retrieve-circleci-env/

CI/CD環境は、改修頻度が低く稀に触ろうとした時に、Secretsに設定されている値が不明で、
改修した時になんか権限周りでエラーとか出てるけど、そもそもSecretsに指定しているIDなどがわからず、そこを見つけ出すのに苦労した経験がありました。
また、実装時も秘匿情報をログに出力できないので、値が本当に合っているのかなど確認が格段にしやすくなりました。

以上!秘匿情報(Secrets) 管理の提案でした。
迷っている方の参考になれば幸いです。

宣伝

弊社エンジニア募集しております!
ご興味ある方はぜひ以下より!

https://www.wantedly.com/projects/1113570

弊社は人、文化が良いなと個人的には感じておりますのでこちらも併せて読んでいただけますと嬉しいです。
https://spacemarket.co.jp/recruit/engineer/

スペースマーケット Engineer Blog

Discussion