Web App for Conateinersをセキュアに構成する

2024/02/11に公開

アーキテクチャ

  1. インバウンド通信はプライベートエンドポイントを使用する
  2. App Serviceからのアウトバウンド通信はVNET統合を使用する
  3. App Serviceに持たせる権限はシステム割り当てマネージドIDを使用する

Azure Container Registry

Private endpointを使用するためレベル「Premium」を選択する。Geo冗長や可用性ゾーンもサポートされている。
https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-skus

App ServiceのマネージドIDを使用してACRからイメージをプルすることで、ACRの管理者ログインを有効化する必要がなくなる。
https://learn.microsoft.com/ja-jp/azure/app-service/configure-custom-container?tabs=debian&pivots=container-linux#use-managed-identity-to-pull-image-from-azure-container-registry

Web Apps for Containers

仮想ネットワーク統合とPrivate endpointを使用するにはレベル「Basic」、「Standard」、「Premium」、「PremiumV2」、「PremiumV3」を選択する必要がある。
https://learn.microsoft.com/ja-jp/azure/app-service/overview-vnet-integration
https://learn.microsoft.com/ja-jp/azure/app-service/overview-private-endpoint

App Serviceのシステム割り当てマネージドIDを有効化し、RBACの「ACR Pull」を付与する。
ユーザ割り当てマネージドIDはIDとリソースの紐づけが「1vs多」となり、IDが漏洩した際のリスクが大きくなるため、基本採用しない。
https://learn.microsoft.com/ja-jp/azure/app-service/overview-managed-identity?tabs=portal%2Chttp

App ServiceにはWebhookを用いた継続的デプロイ機能がサポートされているため、状況に応じて使用する。本番環境の要件等で手動デプロイが必要な場合はAzure CLIで手動デプロイを実行する。
https://learn.microsoft.com/ja-jp/azure/app-service/configure-custom-container?tabs=debian&pivots=container-linux
https://learn.microsoft.com/ja-jp/azure/app-service/deploy-ci-cd-custom-container?tabs=acr&pivots=container-linux

Client

Docker操作(ACRへのDocker push等)を行うサーバを用意する。仮想マシンのマネージドIDを有効化して権限を持たせるか、Az loginで権限を持たせる方法がある。

Discussion