首页 > 解决方案 > 使用 .pfx 证书从头开始实现 HDInsight 部署自动化

问题描述

在 Azure 中创建 HDInsight 群集时,ADLS可以选择作为主存储。它需要一个服务主体HDInsight来对to进行身份验证ADLS,这可以在步骤 2 中生成并将证书/密钥下载为.pfx文件。Azure 明确指出,如果需要重新创建集群,则必须下载该文件并保持安全。(在第 2 步中,第二个选项是使用现有的主体,必须上传 .pfx。)到目前为止一切顺利 - 一切都按预期工作。

问题是我需要自动化整个过程。我下载了 Azure RM 部署模板。在此文件中,必须指定identityCertificate已经存在的.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?

非常感谢!

标签: azuredeploymentautomationazure-hdinsight

解决方案


我设法创建了一个完整的证书。az keyvault certificate import我无意中在文档下找到了一个示例。

关键是,如果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 控制台或部署模板中使用。


推荐阅读