amazon-web-services - Terraform 外部数据源 EKS 指纹有时不起作用
问题描述
我尝试使用以下代码使用 Terraform 的外部数据源检索现有的 EKS 证书指纹:
指纹.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
数据.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
。
主要问题是我很困惑,有时我从指纹中获取数据,有时blank
即使我添加了depends_on
. 我怎样才能解决这个问题?还是有更好的方法?
解决方案
您可以使用tls_certificate
数据源获取任何证书的指纹。数据源的资源文档帮助展示了如何获取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
}
推荐阅读
- javascript - 如何修复元素类型无效:需要一个字符串(对于内置组件)?
- mathematical-optimization - 我怎样才能最好地解决这个优化问题?
- swift - 我想将忘记密码链接添加到 mac 登录屏幕
- python - 如何将网页抓取的文本打印到单行上?
- autohotkey - 如何设置宏以在指定时间在不和谐频道中发送命令?
- mongodb - Mongodb-获取字段匹配特定值的文档的不同计数
- ios - 在 Cocos2dx iOS 项目中添加 Google Firebase
- android - 如何让用户使用毕加索裁剪图像?
- c# - 查找表的最小值
- python - 无法将 python 模块导入根目录,只能导入用于导入模块的特定目录