🤖

GitHub ActionsからAzureストレージアカウントへ書き込めるようにするための手順

に公開

GitHub ActionsからAzureストレージアカウントへ書き込めるようにするための手順

1. サービスプリンシパルのBlobストレージ書き込み権限設定

Azure Portal での設定方法

ステップ1: ストレージアカウントでのロール割り当て

# Azure CLIでの設定例
# サービスプリンシパルのオブジェクトIDを取得
az ad sp show --id <SERVICE_PRINCIPAL_APP_ID> --query objectId -o tsv

# ストレージアカウントに対してStorage Blob Data Contributorロールを割り当て
az role assignment create \
  --assignee <SERVICE_PRINCIPAL_OBJECT_ID> \
  --role "Storage Blob Data Contributor" \
  --scope "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>"

ステップ2: 必要な権限ロール

以下のいずれかのロールを割り当ててください:

  1. Storage Blob Data Contributor (推奨)

    • Blobの読み取り、書き込み、削除が可能
    • 最小権限の原則に従った適切な権限
  2. Storage Blob Data Owner

    • より広範囲な権限(通常は不要)

ステップ3: 静的ウェブサイト機能の有効化確認

# 静的ウェブサイト機能を有効化
az storage blob service-properties update \
  --account-name <STORAGE_ACCOUNT_NAME> \
  --static-website \
  --index-document index.html \
  --404-document 404.html

Azure Portal GUI での設定

  1. Azure Portalストレージアカウント → 対象のストレージアカウント
  2. アクセス制御 (IAM)追加ロールの割り当ての追加
  3. ロール: "Storage Blob Data Contributor" を選択
  4. アクセスの割り当て先: "ユーザー、グループ、またはサービス プリンシパル"
  5. 選択: GitHub Actionsで使用するサービスプリンシパル名を検索して選択
  6. 保存

2. GitHub ActionsのIPレンジ許可設定

対応方法の選択肢

選択肢1: GitHub ActionsのIPレンジを追加(推奨)

# GitHub ActionsのIPレンジを追加
az storage account network-rule add \
  --account-name <STORAGE_ACCOUNT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --ip-address "13.107.42.0/24"

az storage account network-rule add \
  --account-name <STORAGE_ACCOUNT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --ip-address "140.82.112.0/20"

az storage account network-rule add \
  --account-name <STORAGE_ACCOUNT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --ip-address "185.199.108.0/22"

GitHub ActionsのIPレンジ(主要なもの)

# GitHub Actionsで使用される主要IPレンジ
13.107.42.0/24
140.82.112.0/20
185.199.108.0/22
192.30.252.0/22
20.201.28.151/32
20.207.73.82/32
20.27.177.113/32
20.87.245.0/32

選択肢2: Azure Portal での設定

  1. Azure Portalストレージアカウント → 対象のストレージアカウント
  2. ネットワークファイアウォールと仮想ネットワーク
  3. IP アドレス範囲を追加 でGitHub ActionsのIPレンジを追加

選択肢3: Self-hosted Runnerの使用(セキュリティ重視の場合)

# .github/workflows/deploy.yml内で
jobs:
  build-and-deploy:
    runs-on: [self-hosted, linux] # Azure VM上のself-hosted runner

この場合、Azure VM(vnet-cdpipeline-stg-japaneast-001内)からアクセスするため、既存のネットワーク制限で問題なく動作します。

ワークフロー内でのエラーハンドリング追加

現在のワークフローにエラーハンドリングを追加することをお勧めします:

- name: Deploy to Blob Storage Static Website
  run: |
    echo "Deploying to Blob Storage static website..."
    
    # ネットワーク接続テスト
    echo "Testing network connectivity..."
    az storage account show \
      --name ${{ env.STORAGE_ACCOUNT_NAME }} \
      --resource-group ${{ env.STORAGE_RESOURCE_GROUP }} \
      --query "networkRuleSet.defaultAction" -o tsv
    
    # 静的ウェブサイトのアップロード
    if az storage blob upload-batch \
      --source ./out \
      --destination '$web' \
      --account-name ${{ env.STORAGE_ACCOUNT_NAME }} \
      --auth-mode login \
      --overwrite true; then
      echo "Static website deployment completed successfully."
    else
      echo "Static website deployment failed. Check network access and permissions."
      exit 1
    fi

推奨アプローチ

  1. まずはGitHub ActionsのIPレンジ追加を試す(選択肢1)
  2. セキュリティ要件が厳しい場合はSelf-hosted Runnerを検討(選択肢3)
  3. 権限設定は必ずStorage Blob Data Contributorロールを使用

これらの設定により、GitHub Actionsからストレージアカウントへのデプロイが可能になります。

Discussion