Azure 使用.pfx证书从头开始实现HDInsight部署自动化
在Azure中创建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文件中的标识证书。我找不到使用模板部署生成它
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脚本