如何允许ContinuousIntegration.exe在Azure密钥保管库中使用连接字符串



我在Azure中有一个Kentico Xperience(v13(实例,我想运行ContinuousIntegration.exe,用我的CI xml文件中的内容填充我的数据库。问题是,我们正在从Azure密钥库(AKV(将CMSConnectionString设置注入web应用程序,而CI.exe没有看到它。相反,我收到了以下错误消息:

CMS.DataEngine.ApplicationInitException: Cannot access the database specified by the 'CMSConnectionString' connection string. Please install the database externally and set a correct connection string.

或者这个错误消息:

Failed to execute the command.

以下是我们的web.config中的相关部分(适用于网站!(:

<connectionStrings>
<!--Should be provided by Azure Key Vault-->
</connectionStrings>

如何确保可执行文件能够访问AKV中的机密?

可以让ContinuousIntegration.exe了解一个安全连接字符串,该连接字符串由一个小型自定义模块在启动时设置。以下是模块的基本代码:

[assembly: AssemblyDiscoverable]
[assembly: RegisterModule(typeof(AzureConnectionStringModule))]
public class AzureConnectionStringModule : Module
{
public AzureConnectionStringModule()
: base(nameof(AzureConnectionStringModule))
{
}
protected override void OnPreInit()
{
base.OnPreInit();
var azureConnectionString = Environment.GetEnvironmentVariable("SQLAZURECONNSTR_CMSConnectionString");
if (string.IsNullOrWhiteSpace(azureConnectionString))
{
azureConnectionString = Environment.GetEnvironmentVariable("CMSConnectionString");
}
if (!string.IsNullOrWhiteSpace(azureConnectionString))
{
SettingsHelper.ConnectionStrings.SetConnectionString("CMSConnectionString", azureConnectionString);
}
}
}

从Kentico Xperience 13的新安装开始,以下是配置步骤:

  1. 按照此处的步骤将密钥保管库支持添加到本地管理应用程序中:https://learn.microsoft.com/en-us/azure/key-vault/general/vs-key-vault-add-connected-service.
  2. 将上面的模块添加到类库中的解决方案中。确保主项目引用类库,以便在构建过程中包含该类库
  3. 请确保~\web.config没有名为CMSConnectionString的连接字符串或应用程序设置
  4. 将应用程序部署到应用程序服务
  5. 在Azure中,创建一个名为CMSConnectionString、值为@Microsoft.KeyVault的应用程序服务配置设置(VaultName=your KeyVault;SecretName=CMSConnectionString(
  6. 在密钥库中,创建一个名为CMSConnectionString的密钥,并为Azure SQL数据库的连接字符串赋值。您可能还需要遵循https://learn.microsoft.com/en-us/azure/app-service/app-service-key-vault-references为我的应用程序服务创建访问策略
  7. 此时,Kentico Xperience 13管理员应该加载数据库访问权限
  8. 在应用程序服务门户中,在开发工具下,选择控制台
  9. 在控制台中,运行cd bin,然后运行ContinuousIntegration.exe -r。这应该会产生一条关于未配置存储库的消息,或恢复操作的输出

最新更新