是否可以使用 ARM 创建 KeyVault,生成密码并在其他 ARM 资源中使用密码?
Is it possible to create KeyVault using ARM, generate password and use the password in other ARM resources?
我想创建 ARM 模板
- 创建包含 KeyVault 的资源组;
- 使用预定义名称生成新密码,例如 AdminPassword。
- 在其他资源中使用密码,例如创建 SQL 数据库时的主密码。
重新部署模板和 KeyVault 以及 AdminPassword 密码时,应使用现有密码。
我找到了使用 KeyVault 机密作为参数的示例,但这是不同的,因为在解析参数时 KeyVault 不存在。
您可以编写示例 ARM teplate 来创建 KeyVault 然后使用其中的 sectets 吗?
如果您在 arm 模板中生成一个秘密——从密钥库中检索它是没有意义的,如果您将秘密传递给模板——同样,检索它也没有任何意义,只需使用它。无论哪种方式,如果你真的热衷于让你的生活更艰难,你可以使用条件和嵌套模板在 arm 模板中破解一些东西
您可以使用 uniqueString 在 ARM 模板中生成密码。
然后创建您的 KeyVault 和 Secret。在 KeyVault 模板的输出中,您可以获得 Secret 的 URI,该 URI 可以注入到另一个资源(例如 Web 应用程序)的应用程序配置中。 https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references
"outputs": {
"dbSecretUri": {
"value": "[reference(resourceId('Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), 'yourSecretName')).secretUriWithVersion]"
}
}
您的 Web 应用需要启用托管身份,并且 KeyVault 需要具有允许该应用连接到保管库的访问策略。
这取决于您希望密码的安全性...
如果您希望后续部署使用相同的密码值,那么它必须是确定性的。如果它是确定性的,那么有权访问部署的任何人都可以确定密码。
如果您希望密码是随机的,那么模板每次都会生成一个随机密码,因此后续部署会创建一个新密码。
您可以使用用户提供的种子作为密码生成的参数(并使用幂等的uniqueString()),然后只有知道种子并有权访问的人部署可以确定密码。请注意,您的种子必须是 secureString 参数类型。但在这一点上,更好的做法是将密码生成和资源部署的步骤分开。
我想创建 ARM 模板
- 创建包含 KeyVault 的资源组;
- 使用预定义名称生成新密码,例如 AdminPassword。
- 在其他资源中使用密码,例如创建 SQL 数据库时的主密码。
重新部署模板和 KeyVault 以及 AdminPassword 密码时,应使用现有密码。
我找到了使用 KeyVault 机密作为参数的示例,但这是不同的,因为在解析参数时 KeyVault 不存在。
您可以编写示例 ARM teplate 来创建 KeyVault 然后使用其中的 sectets 吗?
如果您在 arm 模板中生成一个秘密——从密钥库中检索它是没有意义的,如果您将秘密传递给模板——同样,检索它也没有任何意义,只需使用它。无论哪种方式,如果你真的热衷于让你的生活更艰难,你可以使用条件和嵌套模板在 arm 模板中破解一些东西
您可以使用 uniqueString 在 ARM 模板中生成密码。
然后创建您的 KeyVault 和 Secret。在 KeyVault 模板的输出中,您可以获得 Secret 的 URI,该 URI 可以注入到另一个资源(例如 Web 应用程序)的应用程序配置中。 https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references
"outputs": {
"dbSecretUri": {
"value": "[reference(resourceId('Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), 'yourSecretName')).secretUriWithVersion]"
}
}
您的 Web 应用需要启用托管身份,并且 KeyVault 需要具有允许该应用连接到保管库的访问策略。
这取决于您希望密码的安全性...
如果您希望后续部署使用相同的密码值,那么它必须是确定性的。如果它是确定性的,那么有权访问部署的任何人都可以确定密码。
如果您希望密码是随机的,那么模板每次都会生成一个随机密码,因此后续部署会创建一个新密码。
您可以使用用户提供的种子作为密码生成的参数(并使用幂等的uniqueString()),然后只有知道种子并有权访问的人部署可以确定密码。请注意,您的种子必须是 secureString 参数类型。但在这一点上,更好的做法是将密码生成和资源部署的步骤分开。