How to create OIDC provider to EKS

多分ほとんどの人がそうだと思うけど、仕事でTerraformを使ってAWS EKSを構築している。

EKSはKubernetes 1.14からIAMの Identity providerを使ってOIDCを作成できる。 これが何が良いかと言うと、Kube2iamのようなオペレーターを使わなくても、KubernetesのServiceAccount にIAMロールをアノテーションとして指定すれば、AssumeRoleでクレデンシャルがゲットできるのである。

最近立てたEKSは1.14で構築したので、OIDCを一緒に作成した。 Terraformはこんな感じ。

resource "aws_iam_openid_connect_provider" "cluster" {
client_id_list = ["sts.amazonaws.com"]
thumbprint_list = []
url = aws_eks_cluster.cluster.identity.0.oidc.0.issuer
}

thumbprint_listは空っぽのまま、TerraformのReferenceをみると空だからまあいいやとなる。
それで作成すると、実際にアプリがクレデンシャルを取りに行くと 証明書のThumbprintがマッチしないと怒られてエラーがでる。
なので、ちゃんとRoot CAのThumbprintをとってthumbprint_listに渡してあげないと駄目なのです。Thumbprintを取得する方法はここ。 docs.aws.amazon.com

スクリプトを作成して、Terraform内でやる方法とかもあるけど、Root CA 10年以上期限があるので、
今回は手動で取得してハードコードした。 AWSのコンソールから作成すると自動的にThumbprintが設定されるので、Terraform側で上手くアップデートされることを期待。

余計なところで結構ハマりました。