Terraform внешний источник данных EKS отпечаток пальца иногда не работает

#amazon-web-services #terraform #openid-connect #terraform-provider-aws #amazon-eks

#amazon-web-services #terraform #OpenID-подключение #terraform-provider-aws #amazon-eks

Вопрос:

Я попытался получить существующий отпечаток пальца сертификата EKS с помощью внешнего источника данных Terraform со следующим кодом:

thumbprint.sh

 #!/bin/bash

THUMBPRINT=$(echo | openssl s_client -servername oidc.eks.${1}.amazonaws.com -showcerts -connect oidc.eks.${1}.amazonaws.com:443 2>amp;- | 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, а иногда они blank имеют значение, даже если я добавил depends_on . Как я могу это исправить? Или есть лучший подход?

Комментарии:

1. По какой-либо причине вы не хотите использовать aws_eks_cluster источник данных для получения этой информации, как в примере?

2. @ydaetskcoR можете ли вы сообщить мне, как я могу получить отпечаток пальца из aws_eks_cluster источника данных?

3. Вы можете объединить его с tls_certificate источником данных , как показано в примере.

4. @ydaetskcoR можете ли вы опубликовать этот комментарий в качестве ответа? Я отмечу как правильный ответ.

Ответ №1:

Вы можете получить отпечаток пальца любого сертификата, используя 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
}