如何在.tf文件中传递机密变量?Azure SAS密钥保密配置咨询
实现Azure存储Blob容器创建时引用Key Vault中的SAS密钥
步骤1:将SAS令牌存入Azure Key Vault
- 登录Azure门户,找到你的Key Vault(没有的话先创建一个)
- 进入「机密」选项卡,点击「生成/导入」
- 上传选项选「手动」,填写:
- 名称:比如
source-storage-sas(易识别即可) - 值:完整的SAS令牌(注意是从
?开始的部分,比如?sv=2023-11-03&ss=b&srt=sco&sp=rwdlacupiytfx&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxxxxx)
- 名称:比如
- 按需设置过期时间等属性,点击「创建」
步骤2:不同场景下引用Key Vault机密创建容器
根据你的操作方式,选择对应的实现:
方式1:Azure CLI
先从Key Vault拉取SAS,再拼接源URI完成容器创建/内容复制:
# 从Key Vault读取SAS令牌 SAS_TOKEN=$(az keyvault secret show --name source-storage-sas --vault-name your-key-vault-name --query value -o tsv) # 拼接源存储容器的完整URI(替换为你的源账户和容器名) SOURCE_URI="https://source-storage-account.blob.core.windows.net/source-container${SAS_TOKEN}" # 创建目标容器 az storage container create --account-name target-storage-account --name target-container # 批量复制源容器内容到目标容器(如果需要) az storage blob copy start-batch --source-uri $SOURCE_URI --destination-container target-container --account-name target-storage-account
方式2:Azure PowerShell
# 获取Key Vault中的SAS令牌(明文) $sasToken = Get-AzKeyVaultSecret -VaultName your-key-vault-name -Name source-storage-sas -AsPlainText # 拼接源URI $sourceUri = "https://source-storage-account.blob.core.windows.net/source-container$sasToken" # 创建目标容器 $targetContext = (Get-AzStorageAccount -ResourceGroupName your-resource-group -Name target-storage-account).Context New-AzStorageContainer -Name target-container -Context $targetContext # 复制源容器内容到目标容器 $sourceContext = New-AzStorageContext -StorageAccountName source-storage-account -SasToken $sasToken Get-AzStorageBlob -Container source-container -Context $sourceContext | Start-AzStorageBlobCopy -DestContainer target-container -DestContext $targetContext
方式3:ARM模板自动化部署
在ARM模板中通过reference函数直接引用Key Vault机密,无需硬编码:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "targetStorageAccountName": {"type": "string"}, "targetContainerName": {"type": "string"}, "sourceStorageAccountName": {"type": "string"}, "sourceContainerName": {"type": "string"}, "keyVaultName": {"type": "string"}, "sasSecretName": {"type": "string"} }, "variables": { "sourceSasToken": "[reference(resourceId('Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), parameters('sasSecretName')), '2023-02-01').value]", "sourceUri": "[concat('https://', parameters('sourceStorageAccountName'), '.blob.core.windows.net/', parameters('sourceContainerName'), variables('sourceSasToken'))]" }, "resources": [ { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2023-01-01", "name": "[concat(parameters('targetStorageAccountName'), '/default/', parameters('targetContainerName'))]", "properties": {} } // 如需复制内容,可添加blob copy资源定义,此处省略 ] }
注意:部署模板前,确保部署账号拥有Key Vault的「机密读取」权限,且Key Vault访问策略已允许该账号读取机密。
方式4:Azure门户手动操作(半自动化)
如果是纯手动操作,门户暂不支持直接引用Key Vault机密生成源URI,你可以:
- 进入Key Vault的「机密」选项,找到存储的SAS令牌,点击「显示机密值」
- 复制SAS令牌,手动拼接到源存储容器的URI后(格式:
https://源账户.blob.core.windows.net/源容器?SAS令牌) - 在目标存储账户的容器创建/内容复制流程中使用拼接后的URI
关键注意事项
- 确保SAS令牌的权限(如
sp参数)和有效期符合业务需求,避免权限不足或过期失效 - Key Vault的访问策略需配置正确:操作账号/服务主体必须拥有
机密读取权限 - 如果使用自动化服务(如Azure自动化账户)执行操作,需给服务主体分配Key Vault的「机密用户」角色或自定义权限
内容的提问来源于stack exchange,提问作者chchchaitanya
相关产品推荐
相关产品推荐

