我有一个 Azure 存储帐户。当我允许所有网络访问时,我的 Github 操作可以运行并更新我的 Azure 静态网站。
当我禁止除命名网络(147.243.0.0/16 和我的机器的 IP)之外的所有网络时,我在 Github Actions 中收到 403(请求被拒绝)错误。
我假设我需要将 GitHub 添加到这些 IP,但是当我运行时:
curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/meta
有大量的IP!我需要全部添加吗?
我假设您希望允许 GitHub Actions 运行程序访问您的存储帐户?那么是的,由于这可能是大量虚拟机,因此您需要将大量 IP 列入白名单。
另一种方法是在管道中使用一些任务:
示例代码:
name: Deploy to Azure
on:
push:
branches:
- main
workflow_dispatch:
jobs:
publish:
environment: Production
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Whitelist GitHub Runner IP
uses: azure/CLI@v1
with:
inlineScript: |
set -eu
agentIP=$(curl -s https://api.ipify.org/)
az storage account network-rule add \
--resource-group "${{ secrets.RESOURCE_GROUP }}" \
--account-name "${{ secrets.STORAGE_ACCOUNT_NAME }}" \
--ip-address $agentIP
sleep 300
- name: Upload to blob storage
uses: azure/CLI@v1
with:
inlineScript: |
set -eu
az storage blob upload-batch \
--account-name "${{ secrets.STORAGE_ACCOUNT_NAME }}" \
--source ./src/ \
--destination '$web' \
--overwrite true
- name: Purge CDN endpoint
uses: azure/CLI@v1
with:
inlineScript: |
set -eu
az cdn endpoint purge \
--content-paths "/*" \
--profile-name "${{ secrets.CDN_PROFILE_NAME }}" \
--name "${{ secrets.CDN_ENDPOINT }}" \
--resource-group "${{ secrets.RESOURCE_GROUP }}"
- name: Remove GitHub Runner IP from Whitelist
if: always()
uses: azure/CLI@v1
with:
inlineScript: |
set -eu
agentIP=$(curl -s https://api.ipify.org/)
az storage account network-rule remove \
--resource-group "${{ secrets.RESOURCE_GROUP }}" \
--account-name "${{ secrets.STORAGE_ACCOUNT_NAME }}" \
--ip-address $agentIP
- name: logout
if: always()
run: |
az logout
现在您可以为您的跑步者分配固定IP地址。这是测试版,但现在可行
固定IP范围
只需勾选复选框即可为您的计算机设置固定的 IP 范围,这提供了一个可以在内部系统和 GitHub 的允许列表中允许列出的 IP 范围,以便继续使用操作,同时使您的 GitHub 环境更加安全。
在 Azure 应用服务上,也许 Azure 存储帐户也是如此,我在网络 --> 访问限制列表中添加了一项,并且仍然单独保留专用终结点设置。 我了解到,它们可以共存。
使用服务标签而不是 IP 或 IP 块添加规则。
常规设置 名称(可选):AzureDevOps 优先级:300 行动:允许 描述(必填):“服务标签 - AzureDevOps” 信号源设置 服务标签:AzureDevOps HTTP 标头过滤器设置:(使用默认值)
存储库和运行程序位于 GitHub 中并且有效。