[英]Terraform Incapsula provider fails to create custom certificate resource
我們正在嘗試使用 Terraform Incapsula privider 來管理 Imperva 站點和自定義證書資源。
我們能夠創建 Imperva 站點資源,但證書資源創建失敗。
我們的用例是從 Azure KeyVault 獲取證書並使用 Incapsula Privider 將其導入 Imperva。 我們使用 Terraform "azurerm_key_vault_secret" 數據源從 KeyVault 獲取證書。 它將證書作為 Base64 字符串返回,我們將其作為“certificate”參數傳遞到 Terraform“incapsula_custom_certificate”資源以及使用 Z303E96F80576360D0C7B07AE_BZZincapula 資源創建的 siteID。 當我們運行“terraform apply”時,我們會收到以下錯誤。
incapsula_custom_certificate.custom-certificate: Creating...
Error: Error from Incapsula service when adding custom certificate for site_id ******807: {"res":2,"res_message":"Invalid input","debug_info":{"certificate":"invalid certificate or passphrase","id-info":"13007"}}
on main.tf line 36, in resource "incapsula_custom_certificate" "custom-certificate":
36: resource "incapsula_custom_certificate" "custom-certificate" {
我們嘗試使用 Terraform "filebase64" function 以 Base64 編碼從 PFX 文件中讀取證書,但我們得到了相同的錯誤。
這是我們的 Terraform 代碼:
provider "azurerm" {
version = "=2.12.0"
features {}
}
data "azurerm_key_vault_secret" "imperva_api_id" {
name = var.imperva-api-id
key_vault_id = var.kv.id
}
data "azurerm_key_vault_secret" "imperva_api_key" {
name = var.imperva-api-key
key_vault_id = var.kv.id
}
data "azurerm_key_vault_secret" "cert" {
name = var.certificate_name
key_vault_id = var.kv.id
}
provider "incapsula" {
api_id = data.azurerm_key_vault_secret.imperva_api_id.value
api_key = data.azurerm_key_vault_secret.imperva_api_key.value
}
resource "incapsula_site" "site" {
domain = var.client_facing_fqdn
send_site_setup_emails = true
site_ip = var.tm_cname
force_ssl = true
}
resource "incapsula_custom_certificate" "custom-certificate" {
site_id = incapsula_site.site.id
certificate = data.azurerm_key_vault_secret.cert.value
#certificate = filebase64("certificate.pfx")
}
通過從 Python 腳本直接調用 Imperva API,我們能夠使用相同的站點 ID、Imperva API ID 和密鑰導入相同的 PFX 證書文件。
證書沒有passphase。
我們是在做錯什么,還是這是 Incapsula 提供程序的問題?
Looking through the source code of the provider it looks like it is already performing a base64 encode operation as part of the AddCertificate function, which means using the Terraform filebase64 function is double-encoding the certificate.
相反,我認為它應該是這樣的:
resource "incapsula_custom_certificate" "custom-certificate" {
site_id = incapsula_site.site.id
certificate = file("certificate.pfx")
}
如果 azure 的返回值是 base64 那么這樣的東西也可以工作。
certificate = base64decode(data.azurerm_key_vault_secret.cert.value)
您是否嘗試過創建自簽名證書、使用密碼將其轉換為 PFX 並使用它?
我問是因為 Azure 的 PFX output 有一個空白/不存在的密碼短語,而且多年來我遇到了一些工具的問題,除非你設置密碼短語,否則它們根本不會導入 PFX。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.