我需要在 AzureResourceManagerTemplateDeployment@3 任务的 overRideParameters 中传递 SecureString 类型的变量。该变量是 SAS 令牌,在容器级别创建,具有读取、添加、列出、写入、创建权限。
Azure Data Factory (ADF) 自动生成的 ARM 模板如下:
如果我手动粘贴要在 ADF SSIS-IR 配置中用于自定义的完整 URL,则可以成功启动 SSIS-IR。但是,当通过 Azure DevOps (ADO) 管道代码(其中 url 和 SAS 令牌连接在一起)设置相同的属性值时,会出现问题 - SSIS-IR 将无法启动。错误(403)是找不到端点或者没有权限。
我怎样才能让它发挥作用?
下图显示了具有预期 SAS 令牌屏蔽的 ADF SSIS 配置。
在一个 yml 文件中的一项任务中,我从存储在 ADO 库中的变量组中提取变量(标记为秘密)。然后,我根据需要映射它Microsoft 文档中描述的。然后我确认检索到的值符合预期:
- job: Deploy_${{parameters.environmentName}}_env
displayName: Deploy published ADF ARM template
dependsOn: Check_Variables_${{parameters.environmentName}}
condition: succeeded()
variables:
- group: ado_ssis_cicd_${{parameters.environmentName}}
- name: sassToken_from_group
value: $(ssisir_sasToken)
- template: ../../variables/vars-${{parameters.environmentName}}.yml
steps:
- task: PowerShell@2
displayName: Extract Library variables.
inputs:
targetType: 'inline'
script: |
Write-host "sassToken_from_group from Group_Var from lib: $(sassToken_from_group)"
"$(sassToken_from_group)" -eq "sp=racwl&st=2022-11-07T06:29:55Z&se=2029-11-07T15:29:55Z&spr=https&sv=2021-06-08&sr=c&sig=5pPVjhiNO7g7WQIQb5F2uRFmvU8xJEoao2TSofsQJAA%3D"
该值作为参数(类型= String)传递给另一个 yml,然后在 AzureResourceManagerTemplateDeployment@3 任务参数覆盖中使用:
- task: AzureResourceManagerTemplateDeployment@3
displayName: ARM template deployment - Resource Group scope
inputs:
deploymentScope: Resource Group
azureResourceManagerConnection: ${{ parameters.azureResourceManagerConnection }}
subscriptionId: ${{ parameters.subscriptionId }}
resourceGroupName: ${{ parameters.resourceGroupName }}
location: ${{ parameters.location }}
csmFile: $(Build.SourcesDirectory)/build/ArmTemplatesDrop/ARMTemplateForFactory.json
csmParametersFile: $(Build.SourcesDirectory)/build/ArmTemplatesDrop/ARMTemplateParametersForFactory.json
deploymentMode: Incremental
overrideParameters:
-ssisir_blobContainerUri ${{ parameters.ssisir_blobContainerUri }}
-ssisir_sasToken ${{ parameters.ssisir_token }}
推送到 SSIS 自定义配置的 SAS 令牌按预期被屏蔽,因此我无法知道部署了什么。
我知道秘密只是一个加密的字符串。我不认为我需要(或可以)解密它。我知道 SecureString 类型的字符串的内存管理方式与普通字符串不同。
因为 yml 文件中参数被覆盖的代码位于拉取和映射变量的同一作业下的步骤中,所以我还尝试直接使用变量而不是通过参数传入的值:
overrideParameters:
-ssisir_blobContainerUri ${{ parameters.ssisir_blobContainerUri }}
-ssisir_sasToken $(sassToken_from_group)
我尝试复制您的操作,但始终收到以下错误。
IntegrationRuntimeCannotModify:集成运行时只能在处于“初始”或“已停止”状态时更新/删除。当前状态:“已开始”。
请务必注意,源 ADF 实例和目标 ADF 实例的 IntegrationRuntime 定义相同。
有什么专业建议吗?