[GitHub Actions]2023年5月末対応期限の脆弱性について期限を迎える前におさらいしてみた

GitHub Actionsにて2023年5月末が期限のセキュリティ対策処置があります。GitHub Actionsのworkflowが失敗する可能性に対処するためにも、忘れずに処置しておきましょう。
2023.03.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

セキュリティの観点から、GitHub Actionsからsave-stateset-outputのコマンドが2023年5月31日を持って廃止されます。告知そのものは2022年10月11日に出ていました。ポイントは、期限以降はwarningメッセージにとどまらず、workflowそのものが実行失敗するようになる可能性を含むところです。

十二分に時間の猶予はあるはずですが、もしかして未だ対処していない、或いは知らなかったという人がいるかもしれないと思い、改めて書いてみることにしました。なお、DevIOの過去記事を見る限りではあまり触れられておらず、執筆勢が手を付けている範囲での利用例が無かったのかもしれません。

問題

現在、Actionsのrunnnerを2.298.2以降にした上でsave-state及びset-outputを利用するとwarningのメッセージが出力されます。

詳細は以下のように表示されます。

The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

The save-state command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

このメッセージ内にてアナウンスされている記事は当記事の最初の方にあるリンク先となります。

対応方法

セルフホストランナーにて行っている場合は2.297.0以降へのアップデートが必要です。自動アップデートされる仕組みなので基本は気にせずともよいのですが、--disableupdateにて自動アップデートをオフにしていた場合は手動で対処しておきましょう。

Actionsの製作者は@actions/coreをv1.10.0以降にアップデートします。これはsaveStateと setOutputに対するアップデートを取り込むためです。

save-stateあるいは set-outputを使っている場合は、GITHUB_STATE及び GITHUB_OUTPUTへの出力となるように修正を入れます。なお、実行しているworkflowのみならず、利用しているActions内にも該当部分があるか忘れずに確認し、必要に応じてアップデートか、対処されているActionsに差し替えておきましょう。過去にset-envやadd-pathに対して修正が発生しましたが、それと似たような内容です。

変更前

- name: Save state
  run: echo "::save-state name={name}::{value}"
- name: Set output
  run: echo "::set-output name={name}::{value}"

変更後

- name: Save state
  run: echo "{name}={value}" >> $GITHUB_STATE
- name: Set output
  run: echo "{name}={value}" >> $GITHUB_OUTPUT

あとがき

同様のセキュリティ対策として、Node12が2022年4月以降非サポートになるため、依存しているGitHub Actionsにおいても2023年夏以降は全てのActionがNode16にて実行されるようになります。この影響にてaws-actions/configure-aws-credentials@v1がdeprecatedとなります。

告知は知っていたものの気がつくと期限日だったというのはよくありますが、GitHub Actionsの場合はWorkflowそのものが失敗するのでクリティカルです。忘れずに対応しておきましょう。