我们正在尝试使用 Terraform Incapsula privider 来管理 Imperva 站点和自定义证书资源。
我们能够创建 Imperva 站点资源,但证书资源创建失败。
我们的用例是从 Azure KeyVault 获取证书并使用 Incapsula Privider 将其导入 Imperva。我们使用 Terraform“azurerm_key_vault_secret”数据源从 KeyVault 获取证书。它将证书作为 Base64 字符串返回,我们将其作为“certificate”参数传递到 Terraform“incapsula_custom_certificate”资源以及使用 Terraform“incapsula_site”资源创建的 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”函数从 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 证书文件。
证书没有密码阶段。
我们是在做错什么,还是这是 Incapsula 提供程序的问题?