我正在使用 s3 来保存我的状态。因为这是一个自定义 S3(而不是 AWS),所以我按如下所示对其进行了配置(使用 IP + 端口)。
运行 terraform init 时我收到此错误:
成功配置后端“s3”!除非后端配置发生变化,否则 Terraform 将自动使用此后端。刷新状态时出错:RequestError:发送请求失败,原因为:获取“https://custom_S3_server_IP:8082/mytest/my_sub_folder/terraform.tfstate”:x509:无法验证 custom_S3_server_IP 的证书,因为它不包含任何 IP SAN
通常当我遇到这样的问题时,我会假设它是端点(dns)验证。但似乎我无法使用 Terraform 禁用它。这是我的 S3 配置:
backend "s3" {
region = "DEGO"
skip_region_validation = true
force_path_style = true
bucket = "mytest"
key = "my_sub_folder/terraform.tfstate"
access_key = "myK"
secret_key = "myS"
endpoint = "custom_S3_server_IP:8082"
}
编辑:我知道证书不包含输入的 IP,但在每个有此问题的客户端中,总有一种方法可以禁用 DNS 验证。例如,Terraform aws 实现可以使用“--no-verify-ssl”选项来解决这个问题,但我找不到任何使用类似这样的属性
答案1
您的 S3 服务器的 TLS 证书未在其“主题备用名称”字段中列出 IP 地址。您需要在 S3 服务器中使用具有此 IP 地址的正确证书。
一个更简单的替代方法是在 URL 中使用 DNS 名称,并确保您的证书在其 SAN 字段中具有 DNS 名称。
答案2
似乎目前没有选项可以禁用使用 terraform s3 作为状态存储桶的 tls 验证。
以下是一个未解决问题的参考: