wandfuldays

GitHub Actions × AWS OIDC の thumbprint_list が f 埋めでOKになっていた話

2025-06-12

2023年7月以降、GitHub Actions 用の AWS IAM OIDC Provider の thumbprint_list の値にダミー値(f埋め)が使えるようになり、更新も不要に。

こんにちは、 wand です!

今回は、GitHub Actions で AWS にアクセスするための OIDC (OpenID Connect) 設定について、特に thumbprint_list の扱いに関する知見を共有します。

GitHub Actions で AWS IAM の OIDC を構築する従来の方法

GitHub Actions で IAM の認証をする際は、 (self hosted runner を使用しない限り) aws-actions/configure-aws-credentials と OIDC を使うのが一般的かと思います。

IAM User のシークレットを GitHub に預けている人は、シークレットの管理が不要になる OIDC に移行することをお勧めします!

Configuring OpenID Connect in Amazon Web Services - GitHub Docs

これを実現するには AWS 側で IAM OIDC Provider を構成する必要があり、その際に thumbprint_list の設定が必要です。

thumbprint_list は、OpenID Provider (GitHub など) の証明書のフィンガープリント(SHA-1)を指定するための設定項目です。

thumbprint_list の値は、公式がアナウンスしている値を探して固定値として設定するか、以下のように動的に取得して設定するのが一般的でしょう。

data "tls_certificate" "this" {
  url = "https://token.actions.githubusercontent.com/.well-known/openid-configuration"
}

resource "aws_iam_openid_connect_provider" "this" {
  url = "https://token.actions.githubusercontent.com"
  client_id_list = [
    "sts.amazonaws.com"
  ]
  thumbprint_list = [
    data.tls_certificate.this.certificates[0].sha1_fingerprint
  ]
  # あるいは、複数
  # thumbprint_list = data.tls_certificate.this.certificates[*].sha1_fingerprint
}

thumbprint_list の趣旨に鑑みると、サプライチェーン攻撃のリスクを低減するために、動的に取得するのではなく公式がアナウンスしている値で固定したほうが良いでしょう。

2023/7/8 以降可能になった方法

2025/6/12 に上記の terraform コードを plan したところ、 thumbprint_list に plan 差分が現れました:

Terraform will perform the following actions:

  # module.github_oidc_provider.aws_iam_openid_connect_provider.this will be updated in-place
  ~ resource "aws_iam_openid_connect_provider" "this" {
        id              = "arn:aws:iam::288761745396:oidc-provider/token.actions.githubusercontent.com"
        tags            = {}
      ~ thumbprint_list = [
          ~ "d89e3bd43d5d909b47a18977aa9d5ce36cee184c" -> "2b18947a6a9fc7764fd8b5fb18a863b0c6dac24f",
        ]
        # (4 unchanged attributes hidden)
    }

サプライチェーン攻撃の可能性もあるため、公式アナウンスがないか調べたところ、 aws-actions/configure-aws-credentials のリポジトリにて以下の記述を見つけました:

Note that the thumbprint below has been set to all F's because the thumbprint is not used when authenticating token.actions.githubusercontent.com. This is a special case used only when GitHub's OIDC is authenticating to IAM. IAM uses its library of trusted CAs to authenticate. The value is still the API, so it must be specified.

和訳・要約すると、
token.actions.githubusercontent.com を認証する際は特別に thumbprint_list の値は使わないから全部 f 埋めのダミー値でいいよ!」
とのこと。

早速試してみます:

resource "aws_iam_openid_connect_provider" "this" {
  url = "https://token.actions.githubusercontent.com"
  client_id_list = [
    "sts.amazonaws.com"
  ]
  thumbprint_list = [
    "ffffffffffffffffffffffffffffffffffffffff"
  ]
}
thumbprint_list に ffffffffffffffffffffffffffffffffffffffff を設定した IAM OIDC Provider

aws-actions/configure-aws-credentials@v4.1.0 にて、実際に OIDC が通ることが確認できました。

aws-actions/configure-aws-credentials@4.1.0 が通った様子

固定のダミー値を設定したため、今後は更新運用や突然の terraform 差分に悩まされることもなくなりました!

注意

thumbprint_list の値が f 埋めのダミー値でよいのは、
あくまで 「 token.actions.githubusercontent.com を認証する際」の話です。

Okta 等を用いて OIDC で AWS マネジメントコンソールへの SSO ログインを構成する場合などは適切に thumbprint_list を設定しましょう。

まとめ

GitHub Actions 用の AWS IAM OIDC Provider では thumbprint_list の更新が不要になっていました。
時期的に、2023/6/27 に thumbprint_list の追加があり混乱が生じたためこのような変更が入ったのでしょう。
固定値を設定して陳腐化したり、動的に取得してある日突然 terraform 差分が発生したりするくらいなら、開き直って f 埋めのダミー値を設定してしまうのがよいと思います。

ただしこれは GitHub Actions に限った話です。
他の OpenID Provider (Okta など) と連携する際は、引き続きちゃんと thumbprint_list を設定しましょう!


wand

「wand」は魔法の杖を意味します。魔法のようにさまざまなものを自分の手で生み出せるようになりたい、そんな思いを込めました。 ハンドメイド、家庭菜園、DIY、プログラミング等、「つくる」をテーマに色々なことをしていきたいと思っています。 Amazonのアソシエイトとして、wand は適格販売により収入を得ています。 GitHub: https://github.com/wand2016