Terraform 外部数据源 EKS 指纹有时不起作用

Posted

技术标签:

【中文标题】Terraform 外部数据源 EKS 指纹有时不起作用【英文标题】:Terraform external data source EKS thumbprint not working sometimes 【发布时间】:2021-02-13 20:41:44 【问题描述】:

我尝试使用 Terraform 的外部数据源检索现有的 EKS 证书指纹,代码如下:

thumbprint.sh

#!/bin/bash

THUMBPRINT=$(echo | openssl s_client -servername oidc.eks.$1.amazonaws.com -showcerts -connect oidc.eks.$1.amazonaws.com:443 2>&- | tac | sed -n '/-----END CERTIFICATE-----/,/-----BEGIN CERTIFICATE-----/p; /-----BEGIN CERTIFICATE-----/q' | tac | openssl x509 -fingerprint -noout | sed 's/://g' | awk -F= 'print tolower($2)')
THUMBPRINT_JSON="\"thumbprint\": \"$THUMBPRINT\""
echo $THUMBPRINT_JSON

data.tf

data "external" "thumbprint" 
  program = ["$path.root/scripts/thumbprint.sh", data.aws_region.current.name]

openid.tf

resource "aws_iam_openid_connect_provider" "openid" 
  depends_on      = [data.external.thumbprint]
  client_id_list  = ["sts.amazonaws.com"]
  thumbprint_list = [data.external.thumbprint.result.thumbprint]
  url             = data.aws_eks_cluster.this.identity.0.oidc.0.issuer

并使用data.external.thumbprint.result.thumbprint从上述数据源获取指纹。

主要问题是我很困惑,有时我从 thumbprint 获取数据,有时即使我添加了 depends_on,它也会变为 blank 值。我怎样才能解决这个问题?还是有更好的方法?

【问题讨论】:

您是否有任何理由不想使用aws_eks_cluster data source 来获取此示例中的信息? @ydaetskcoR 你能告诉我如何从aws_eks_cluster 数据源获取指纹吗? 您可以将其与tls_certificate data source 结合使用,如示例中所示。 @ydaetskcoR 你能发表评论作为答案吗?我会标记为正确答案。 【参考方案1】:

您可以使用tls_certificate data source 获取任何证书的指纹。数据源的资源文档很有帮助地展示了如何获取 aws_iam_openid_connect_provider 资源的指纹的示例:

resource "aws_eks_cluster" "example" 
  name = "example"


data "tls_certificate" "example" 
  url = aws_eks_cluster.example.identity.0.oidc.0.issuer


resource "aws_iam_openid_connect_provider" "example" 
  client_id_list  = ["sts.amazonaws.com"]
  thumbprint_list = [data.tls_certificate.example.certificates.0.sha1_fingerprint]
  url             = aws_eks_cluster.example.identity.0.oidc.0.issuer

【讨论】:

以上是关于Terraform 外部数据源 EKS 指纹有时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Terraform EKS 标记

如何使用 Terraform 配置 EKS ALB

如何使用 Terraform 配置 AWS EKS 自动扩缩器?

在 EKS 上,我如何验证我通过 Terraform 配置了 Spot 实例

如何使用 Terraform for Amazon EKS 设置节点污点

Terraform:尝试销毁 EKS 集群时出现“错误:删除 S3 存储桶时出错”