Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

TerraformでGitHub Actions OpenID ConnectのIAM IdPを管理したい

こんにちは。エンジニアのEadaedaです。

皆さんのチームではGithub Actionsでaws-actions/configure-aws-credentialsを使っていますか?GitHub ActionsでAWS SDKやAWS CLIを使うために必要なクレデンシャルなどを設定してくれるactionで、我々のチームでは最近かなり利用するようになりました。

github.com

使うためにはIAM IDプロバイダが必要で、そのリソース管理をTerraformで行っているというパターンは多いと思います。例えば以下のようなtfファイルを書きますよね。

resource "aws_iam_openid_connect_provider" "github_actions_oidc" {
  url = "https://token.actions.githubusercontent.com"
  thumbprint_list = [
    "ここにthumbprint"
  ]
  client_id_list = [
    "sts.amazonaws.com"
  ]
}

ここで困るのがコード中に書いたここにthumbprintの部分です。サムプリントは計算方法がAWSより案内されているので、そのとおり計算し結果をコピペするだけです。

docs.aws.amazon.com

とはいえ、ルート証明書が変更されるたびにサムプリントの値を計算・コピペ・terraform applyするというのは少々めんどくさいし、計算・コピペは人間がやる作業なので間違いが起こりやすいです。そこでTerraformのtls_certificateデータリソースを使って、サムプリントの計算もTerraformにさせましょう。

registry.terraform.io

certificatesの0番目はルート証明書を指すことを利用して下記のように記述できます。

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

resource "aws_iam_openid_connect_provider" "github_actions_oidc" {
  url = "https://token.actions.githubusercontent.com"
  thumbprint_list = [
    data.tls_certificate.github_actions_oidc_provider.certificates[0].sha1_fingerprint
  ]
  client_id_list = [
    "sts.amazonaws.com"
  ]
}

更新時に人間がやることはterraform planで新しいサムプリントと確認することと、差分が大丈夫であればterraform applyするだけとなりました。

以上です。