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

如何禁用Azure存储账户公共访问并确保CloudShell可访问远程tfstate

Terraform状态文件访问问题解决与安全最佳实践

问题解决方法

当禁用Azure存储账户的公共访问后,CloudShell无法访问Terraform状态文件,可通过以下几种方式解决:

1. 基于Azure AD身份验证的RBAC权限配置

CloudShell使用当前用户的Azure AD身份运行,我们可以通过RBAC为该用户授予存储账户的Blob访问权限:

  • 在CloudShell中执行以下命令获取当前用户的对象ID:
    az ad signed-in-user show --query id -o tsv
    
  • 登录Azure门户,找到目标存储账户,进入**访问控制(IAM)**页面,添加角色分配:
    • 角色选择「存储Blob数据读取者」(仅需读取状态时)或「存储Blob数据参与者」(需读写状态时)
    • 分配对象选择「用户、组或服务主体」,粘贴刚才获取的用户对象ID
    • 保存配置
  • 修改Terraform后端配置,添加use_azuread_auth = true,让Terraform使用Azure AD身份验证访问存储:
    terraform {
      backend "azurerm" {
        resource_group_name  = "你的资源组名称"
        storage_account_name = "你的存储账户名称"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
        use_azuread_auth     = true
      }
    }
    

2. 配置存储账户专用端点

如果需要严格的网络隔离,可通过专用端点实现CloudShell与存储账户的私有连接:

  • 在存储账户的专用端点连接页面创建新的专用端点,选择与CloudShell所在虚拟网络(或对等VNet)关联的子网
  • 配置Azure专用DNS区域,确保CloudShell能正确解析专用端点的域名
  • 在存储账户的防火墙和虚拟网络设置中,禁用公共访问,仅允许专用端点访问

3. 允许CloudShell的出站IP范围访问(临时折衷)

若上述方法暂无法实施,可将CloudShell的出站IP添加到存储账户的防火墙允许列表:

  • 在CloudShell中执行curl ifconfig.me获取当前出站IP,或查询对应Azure区域的CloudShell官方IP范围
  • 在存储账户的防火墙和虚拟网络设置中,添加这些IP范围到允许列表,保持公共访问为「选定网络」模式

安全最佳实践

  • 强制禁用存储账户公共访问:除非业务必须,否则完全关闭公共网络访问,消除不必要的攻击面
  • 优先使用Azure AD身份验证:避免使用存储账户访问密钥,通过RBAC分配最小必要权限给用户或服务主体,实现细粒度访问控制
  • 结合网络隔离措施:使用专用端点+虚拟网络防火墙限制,确保只有受信任的网络能访问存储账户
  • 加密状态文件:确保存储账户启用静态加密(默认开启),可选客户管理密钥增强加密安全性
  • 定期审计权限:定期审查存储账户的RBAC角色分配,移除过期或不必要的权限
  • 启用访问日志:开启存储账户的诊断日志,监控状态文件的访问活动,便于异常检测和审计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:18:38