微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确保 Azure Dev Ops 管道中的代理具有对存储帐户的防火墙访问权限?

如何解决如何确保 Azure Dev Ops 管道中的代理具有对存储帐户的防火墙访问权限?

我正在尝试通过 terraform azurerm 推出和更新 Azure 环境。此环境的 .tfstate 文件位于全局存储帐户中,因此当我运行命令“terraform init”时,我的服务主体需要访问该全局存储帐户。在我的管道中,我有一个额外的步骤来将执行代理的 IP 列入存储帐户防火墙中的白名单。命令如下所示:

az storage account network-rule add -g storage-account-name --account-name rsg-name --ip-address $Build_Agent_IP
sleep 60
az storage account network-rule list -g storage-account-name --account-name rsg-name

当我打印该存储帐户的网络规则时,运行代理的 IP 总是列在那里。现在的问题是,有时(可能有 50% 的时间)我的以下“terraform init”命令会失败,因为防火墙设置导致授权失败。我的猜测是在我运行“terraform init”时防火墙设置没有正确更新。有没有办法确保执行代理可以访问存储帐户?

解决方法

有没有办法确保执行代理可以访问 存储帐户?

我们可以运行 storage account show 命令来确定对存储帐户的访问是否仅限于特定(受信任的)IP 地址/IP 地址范围。

az storage account show
    --name xxx
    --query 'networkRuleSet.ipRules[?(action==`Allow`)].ipAddressOrRange'

命令输出应返回包含允许访问您的存储帐户的所有 IPv4 地址的列表。将存储帐户 show 命令输出返回的 IP 列表与执行代理的 IP 进行比较,以查看它们是否一致。

详情可以参考这个link

,

快速更新我的问题。我的示例中显示的代码运行良好,并且代理的公共 IP 已在存储帐户的防火墙中列入白名单(也在执行“terraform init”时)。因此,代理访问存储帐户应该没有问题。问题是有时(我描述的 50% 的时间)代理不使用其公共 IP 地址访问存储帐户,而是使用一些不同的 IP 地址。就我而言,这是例如 10.1.0.4。所以当然这个 IP 没有被列入白名单,代理无法访问存储帐户。这个 IP 来自哪里,为什么这只是有时发生,我仍然不知道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。