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

时间:2018-08-29 15:48:25

标签: azure deployment automation hdinsight

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

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

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

identityCertificate

问题在于以这种方式创建的.pfx文件仅包含公钥,并且部署失败。

很明显,我无法告诉客户他们需要在Azure上单击此处并在产品上线时创建群集。所以主要问题是:

如何创建这样的服务主体并以编程方式获取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 才能部署HDInsight?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我设法创建了完整的证书。我不小心在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控制台或部署模板中使用。

答案 1 :(得分:0)

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

还可以使用PowerShell脚本生成证书(PFX)文件和服务主体创建

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