📉

【GitHub Actions】AWSとのOIDC連携が失敗する(2023年7月1日)

2023/07/02に公開

背景

OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprintとメッセージが出力され、ワークフローが失敗する。

原因

GitHubブログにて周知されています。
https://github.blog/changelog/2023-06-27-github-actions-update-on-oidc-integration-with-aws/

  • GitHub Actionsの中間証明書が2つある
  • 既存中間証明書(のfingerprint)に加え、2つめ(のfingerprint)も追加する必要がある

ブログに記載の通り、中間証明書(のfingerprint)を追加したいと思います。

対応

エラー時はこのように単一のfingerprintのみ登録していましたが、

今回指定のあったfingerprint1c58a3a8518e8759bf075b76b750d4f2df264fcdを追加することで解決しました。

解決した様子です。

fingerprintの確認検証

これで解決なのですが、どうせなので自力でfingerprint出力まで試しましょう。
AWSのドキュメントに記載がありますので、それに沿って試してみます。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_providers_create_oidc_verify-thumbprint.html

Github ActionsのOIDC情報取得

GitHub Actions OIDC

Github ActionsのOIDCの設定ドキュメントが確認出来ます。
ブラウザでもOKです。

$ curl -s https://token.actions.githubusercontent.com/.well-known/openid-configuration | jq
{
  "issuer": "https://token.actions.githubusercontent.com",
  "jwks_uri": "https://token.actions.githubusercontent.com/.well-known/jwks",
  "subject_types_supported": [
    "public",
    "pairwise"
  ],
  "response_types_supported": [
    "id_token"
  ],
  "claims_supported": [
    "sub",
    "aud",
    "exp",
    "iat",
    "iss",
    "jti",
    "nbf",
    "ref",
    "repository",
    "repository_id",
    "repository_owner",
    "repository_owner_id",
    "run_id",
    "run_number",
    "run_attempt",
    "actor",
    "actor_id",
    "workflow",
    "workflow_ref",
    "workflow_sha",
    "head_ref",
    "base_ref",
    "event_name",
    "ref_type",
    "environment",
    "environment_node_id",
    "job_workflow_ref",
    "job_workflow_sha",
    "repository_visibility",
    "runner_environment"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ],
  "scopes_supported": [
    "openid"
  ]
}

出力内容についてはこちらを参照
https://docs.github.com/ja/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#understanding-the-oidc-token

jwks_uriから中間証明書を取得

先程取得したOIDC情報の中の、jwks_uriのFQDNを使用します。

$ openssl s_client -servername token.actions.githubusercontent.com -showcerts -connect token.actions.githubusercontent.com:443
// 略

取得できる中間証明書はこちらです。
ルート証明書と間違えないようにしましょう。

中間証明書
-----BEGIN CERTIFICATE-----
MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0yMTA0MTQwMDAwMDBaFw0zMTA0MTMyMzU5NTlaME8xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxKTAnBgNVBAMTIERpZ2lDZXJ0IFRMUyBS
U0EgU0hBMjU2IDIwMjAgQ0ExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAwUuzZUdwvN1PWNvsnO3DZuUfMRNUrUpmRh8sCuxkB+Uu3Ny5CiDt3+PE0J6a
qXodgojlEVbbHp9YwlHnLDQNLtKS4VbL8Xlfs7uHyiUDe5pSQWYQYE9XE0nw6Ddn
g9/n00tnTCJRpt8OmRDtV1F0JuJ9x8piLhMbfyOIJVNvwTRYAIuE//i+p1hJInuW
raKImxW8oHzf6VGo1bDtN+I2tIJLYrVJmuzHZ9bjPvXj1hJeRPG/cUJ9WIQDgLGB
Afr5yjK7tI4nhyfFK3TUqNaX3sNk+crOU6JWvHgXjkkDKa77SU+kFbnO8lwZV21r
eacroicgE7XQPUDTITAHk+qZ9QIDAQABo4IBgjCCAX4wEgYDVR0TAQH/BAgwBgEB
/wIBADAdBgNVHQ4EFgQUt2ui6qiqhIx56rTaD5iyxZV2ufQwHwYDVR0jBBgwFoAU
A95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG
CCsGAQUFBwMBBggrBgEFBQcDAjB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGG
GGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBABggrBgEFBQcwAoY0aHR0cDovL2Nh
Y2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNydDBCBgNV
HR8EOzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRH
bG9iYWxSb290Q0EuY3JsMD0GA1UdIAQ2MDQwCwYJYIZIAYb9bAIBMAcGBWeBDAEB
MAgGBmeBDAECATAIBgZngQwBAgIwCAYGZ4EMAQIDMA0GCSqGSIb3DQEBCwUAA4IB
AQCAMs5eC91uWg0Kr+HWhMvAjvqFcO3aXbMM9yt1QP6FCvrzMXi3cEsaiVi6gL3z
ax3pfs8LulicWdSQ0/1s/dCYbbdxglvPbQtaCdB73sRD2Cqk3p5BJl+7j5nL3a7h
qG+fh/50tx8bIKuxT8b1Z11dmzzp/2n3YWzW2fP9NsarA4h20ksudYbj/NhVfSbC
EXffPgK2fPOre3qGNm+499iTcc+G33Mw+nur7SpZyEKEOxEXGlLzyQ4UfaJbcme6
ce1XR2bFuAJKZTRei9AqPCCcUZlM51Ke92sRKw2Sfh3oius2FkOH6ipjv3U/697E
A7sKPPcw7+uvTPyLNhBzPvOk
-----END CERTIFICATE-----

後続手順で使用するため、certificate.crtとして保存します

取得した中間証明書からfingerprintを取得

fingerprintとは証明書が改ざんされていないことを示すハッシュ値のことです。
AWSがGitHub Actionsの証明書を検証するために必要となるのですね
https://rms.ne.jp/sslserver/basis/openssl_command/

ワンライナーでハッシュ値を出しました

$ openssl x509 -in certificate.crt -fingerprint -sha1 -noout | sed 's/^SHA1 Fingerprint=//' | tr -d ':' | tr '[:upper:]' '[:lower:]'
1c58a3a8518e8759bf075b76b750d4f2df264fcd
  • 行頭のSHA1 Fingerprint=を削除し
  • :を削除し
  • 大文字を小文字に置き換え

ました
出力されたハッシュ値1c58a3a8518e8759bf075b76b750d4f2df264fcdはGitHubブログにあったものと同値です。

参考

元ネタ

https://github.blog/changelog/2023-06-27-github-actions-update-on-oidc-integration-with-aws/

外部サイト

https://dev.classmethod.jp/articles/the-openidconnect-providers-https-certificate-doesnt-match-thumbprint-error-occurs-in-assume-role-by-oidc/
https://tech.route06.co.jp/entry/2023/06/29/181610
https://qiita.com/minamijoyo/items/eac99e4b1ca0926c4310

Discussion