You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.tf文件中传递机密变量?Azure SAS密钥保密配置咨询

实现Azure存储Blob容器创建时引用Key Vault中的SAS密钥

步骤1:将SAS令牌存入Azure Key Vault

  1. 登录Azure门户,找到你的Key Vault(没有的话先创建一个)
  2. 进入「机密」选项卡,点击「生成/导入」
  3. 上传选项选「手动」,填写:
    • 名称:比如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)
  4. 按需设置过期时间等属性,点击「创建」

步骤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,你可以:

  1. 进入Key Vault的「机密」选项,找到存储的SAS令牌,点击「显示机密值」
  2. 复制SAS令牌,手动拼接到源存储容器的URI后(格式:https://源账户.blob.core.windows.net/源容器?SAS令牌)
  3. 在目标存储账户的容器创建/内容复制流程中使用拼接后的URI

关键注意事项

  • 确保SAS令牌的权限(如sp参数)和有效期符合业务需求,避免权限不足或过期失效
  • Key Vault的访问策略需配置正确:操作账号/服务主体必须拥有机密读取权限
  • 如果使用自动化服务(如Azure自动化账户)执行操作,需给服务主体分配Key Vault的「机密用户」角色或自定义权限

内容的提问来源于stack exchange,提问作者chchchaitanya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:25:34