Closed11
【GitHub Actions】AWSとのOIDC連携が失敗する(2023年7月1日)
参考
元ネタ
ありがたい先人たち
エラー内容
OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint
と出ています
原因
- GitHub Actionsの中間証明書が追加された
- 既存(のfingerprint)に加え、そいつ(のfingerprint)も追加する必要がある
うーん...ルート証明書が2つあるからってことか...?こんがらがる
まあ追加登録すればいいのはわかった
対応
エラー時はこのように単一のfingerprintでしたが
今回指定のあったfingerprint1c58a3a8518e8759bf075b76b750d4f2df264fcd
を追加することで解決しました
解決した様子
Terraformへの反映は先人たちの力(記事)を借りて後日やりましょう...ありがたすぎる
それより一度仕組みを理解したい気持ちがつよい
ということでこちらを進めていきます
参考にさせていただきます
流れ
- Github ActionsのOIDC情報取得
参考になる図
Github ActionsのOIDC情報取得
$ 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"
]
}
出力内容についてはこちらを参照
jwks_uri
から中間証明書を取得
先程取得した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の証明書を検証するために必要となるのですね
ワンライナーでハッシュ値を出しました
$ openssl x509 -in certificate.crt -fingerprint -sha1 -noout | sed 's/^SHA1 Fingerprint=//' | tr -d ':' | tr '[:upper:]' '[:lower:]'
1c58a3a8518e8759bf075b76b750d4f2df264fcd
- 行頭の
SHA1 Fingerprint=
を削除し -
:
を削除し - 大文字を小文字に置き換え
ました
出力されたハッシュ値1c58a3a8518e8759bf075b76b750d4f2df264fcd
はGitHubブログにあったものと同値です
終わりに
まあなんとなく理解出来た気がします。
terraformで根本対処ができるまでは、AWS側で登録するfingerprintに気を配りましょう
このスクラップは2023/07/02にクローズされました