Azure 使用.pfx证书从头开始实现HDInsight部署自动化

Azure 使用.pfx证书从头开始实现HDInsight部署自动化,azure,deployment,automation,azure-hdinsight,Azure,Deployment,Automation,Azure Hdinsight,在Azure中创建HDInsight群集时,ADL可以被选择为主存储。它需要一个服务主体来验证HDInsight到ADLS,在步骤2中可以生成该服务主体,并将证书/密钥作为.pfx文件下载。Azure明确声明,如果需要重新创建群集,则必须下载该文件并确保其安全。(在步骤2中,第二个选项是使用现有主体,其中必须上载.pfx。)到目前为止,一切正常-一切正常 问题是我需要自动化整个过程。我下载了Azure RM部署模板。在此文件中,必须指定已存在的.pfx文件中的标识证书。我找不到使用模板部署生成它

在Azure中创建HDInsight群集时,
ADL
可以被选择为主存储。它需要一个服务主体来验证
HDInsight
ADLS
,在步骤2中可以生成该服务主体,并将证书/密钥作为
.pfx
文件下载。Azure明确声明,如果需要重新创建群集,则必须下载该文件并确保其安全。(在步骤2中,第二个选项是使用现有主体,其中必须上载.pfx。)到目前为止,一切正常-一切正常

问题是我需要自动化整个过程。我下载了Azure RM部署模板。在此文件中,必须指定已存在的
.pfx
文件中的
标识证书。我找不到使用模板部署生成它的方法

我们尝试的是创建服务主体,将其存储在密钥库中,并使用以下Azure CLI命令下载证书:

az ad sp create-for-rbac --name ${sp_name} --create-cert --keyvault ${vault} --cert ${cert_name}
az keyvault certificate download --vault-name ${vault} --name ${cert_name} --file ${cert_name}.pem
问题是以这种方式创建的
.pem
文件只包含公钥,部署失败

显然,我不能告诉我们的客户,当产品上线时,他们需要在Azure中点击这里和那里来创建集群。因此,主要问题是:

如何创建这样的服务主体并以编程方式获取
.pfx
,以便能够部署HDInsight?


非常感谢

我设法创建了一个完整的证书。我意外地在
az keyvault证书导入
文档下发现了一个示例

关键是,如果在不使用密钥保险库选项的情况下调用
az ad sp create for rbac
,它将生成密钥对并将其存储在本地。可以从输出中提取文件路径(默认情况下为JSON,全局查询参数在这里工作正常)

因此,这段代码就成了一个诀窍:

gen_cert_file=$(az ad sp create-for-rbac --name ${sp_name} --create-cert --query fileWithCertAndPrivateKey --output tsv)
mv ${gen_cert_file} ./${cert_file}
openssl pkcs12 -export -in ${cert_file} -passout "pass:${cert_pass}" -out ${pfx_file}
az keyvault certificate import --vault-name ${keyvault_name} --name ${cert_name} --file ${pfx_file} --password "${cert_pass}"

第一个命令的结果是一个.pem文件。使用
openssl
工具将其转换为受密码保护的.pfx文件。此文件同样可以在Azure控制台或部署模板中使用。

这里是一个github项目,该项目为模板提供了部署新的Linux HDInsight群集和新的Data Lake存储和存储帐户的功能

另外还有用于生成证书(PFX)文件和服务主体创建的PowerShell脚本