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

HDInsight deployment automation from scratch with .pfx certificate

在 Azure 中创建 HDInsight 集群时,可以选择 ADLS 作为主存储。它需要一个 服务主体 来验证 HDInsightADLS,并且可以生成 certificate/key 在步骤 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文件只包含public键,部署失败。

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

如何创建这样的服务主体并以编程方式获取 .pfx 以便能够部署 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 控制台或部署模板中使用。

这是一个 github 项目,它提供了用于部署新 Linux HDInsight 集群和新 Data Lake Store 和存储帐户的模板

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

https://github.com/Azure/azure-quickstart-templates/tree/master/201-hdinsight-datalake-store-azure-storage