簡體   English   中英

如何確保 Azure Dev Ops Pipeline 中的代理具有對存儲帳戶的防火牆訪問權限?

[英]How can you make sure, that an Agent in an Azure Dev Ops Pipeline has firewall access to a storage account?

我正在嘗試通過 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'

命令 output 應返回包含允許訪問您的存儲帳戶的所有 IPv4 地址的列表。 將 storage account show 命令 output 返回的 IP 列表與執行 Agent 的 IP 進行對比,看是否一致。

有關詳細信息,您可以參考此鏈接

快速更新我的問題。 我的示例中顯示的代碼運行良好,代理的公共 IP 在存儲帳戶的防火牆中被列入白名單(當時也在執行“terraform init”)。 因此,代理訪問存儲帳戶應該沒有問題。 問題是有時(我描述的 50% 的時間)代理不會使用其公共 IP 地址訪問存儲帳戶,但使用一些不同的 IP 地址。 在我的情況下,例如 10.1.0.4。 所以當然這個 IP 沒有被列入白名單,代理無法訪問存儲帳戶。 這個 IP 來自哪里以及為什么有時只會發生這種情況我仍然不知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM