この記事について
Azure API Management (APIM) を VNet でホストする場合、特定の通信を許可するようにNetwork Security Group (NSG) を設定する必要がある。
今回、Azure Portal 上から APIM stv2 用の NSG を作成しようとしたらつまずいたので、備忘録として残しておく。
APIM 用の NSG で許可すべきルールについて
公式ページに具体的な設定項目が示されている。
仮想ネットワークの構成のリファレンス: API Management
ソース/ターゲットはサービスタグで統一されている。
つまずきポイント
Azure Portal から NSG の 受信/送信セキュリティ規則 を作成しようとすると、ほとんどのサービスタグが選べない。
↑ Internet, VirtualNetwork, AzureLoadBalancer しか選択肢に出てこない
直接入力もできないため、「ApiManagement」などのサービスタグが使えない。
解決策
Azure CLI を使ってルールを作成することはできた
MyNetworkSecurityGroup=oecms-aoai-api-nsg
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n ClientToVnet --protocol Tcp --priority 100 --source-address-prefixes Internet --destination-address-prefixes VirtualNetwork --destination-port-ranges 443 --direction Inbound --access Allow --description "API Management へのクライアント通信"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n ApiManagementToEndpoint --priority 200 --source-address-prefixes ApiManagement --destination-address-prefixes VirtualNetwork --destination-port-ranges 3443 --direction Inbound --access Allow --protocol Tcp --description "Azure Portal と PowerShell 用の管理エンドポイント"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToStorage --protocol Tcp --priority 300 --source-address-prefixes VirtualNetwork --destination-address-prefixes Storage --destination-port-ranges 443 --direction Outbound --access Allow --description "Azure Storage への依存関係"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToActiveDirectory --protocol Tcp --priority 400 --source-address-prefixes VirtualNetwork --destination-address-prefixes AzureActiveDirectory --destination-port-ranges 443 --direction Outbound --access Allow --description "Microsoft Entra ID、Microsoft Graph、 Azure Key Vault の依存関係"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToAzureConnectors --protocol Tcp --priority 500 --source-address-prefixes VirtualNetwork --destination-address-prefixes AzureConnectors --destination-port-ranges 443 --direction Outbound --access Allow --description "マネージド接続 の依存関係"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToSql --protocol Tcp --priority 600 --source-address-prefixes VirtualNetwork --destination-address-prefixes Sql --destination-port-ranges 1443 --direction Outbound --access Allow --description "Azure SQL エンドポイントへのアクセス"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToKeyVault --protocol Tcp --priority 700 --source-address-prefixes VirtualNetwork --destination-address-prefixes AzureKeyVault --destination-port-ranges 443 --direction Outbound --access Allow --description "Azure Key Vault へのアクセス"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToEventHub --protocol Tcp --priority 800 --source-address-prefixes VirtualNetwork --destination-address-prefixes EventHub --destination-port-ranges 5671 5672 443 --direction Outbound --access Allow --description "Azure Event Hubs へのログ ポリシーおよび Azure Monitor の依存関係"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToStorageForGit --protocol Tcp --priority 900 --source-address-prefixes VirtualNetwork --destination-address-prefixes Storage --destination-port-ranges 445 --direction Outbound --access Allow --description "Git のための Azure ファイル共有への依存関係"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToMonitor --protocol Tcp --priority 1000 --source-address-prefixes VirtualNetwork --destination-address-prefixes AzureMonitor --destination-port-ranges 1886 443 --direction Outbound --access Allow --description "診断ログとメトリック、リソース正常性、アプリケーション インサイトの発行"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToExternalRedisInbound --protocol Tcp --priority 1100 --source-address-prefixes VirtualNetwork --destination-address-prefixes VirtualNetwork --destination-port-ranges 6380 --direction Inbound --access Allow --description "マシン間のキャッシュ ポリシーのために外部の Azure Cache for Redis サービスにアクセスする"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToExternalRedisOutbound --protocol Tcp --priority 1100 --source-address-prefixes VirtualNetwork --destination-address-prefixes VirtualNetwork --destination-port-ranges 6380 --direction Outbound --access Allow --description "マシン間のキャッシュ ポリシーのために外部の Azure Cache for Redis サービスにアクセスする"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToInternalRedisInbound --protocol Tcp --priority 1200 --source-address-prefixes VirtualNetwork --destination-address-prefixes VirtualNetwork --destination-port-ranges 6381-6383 --direction Inbound --access Allow --description "マシン間のキャッシュ ポリシーのために内部の Azure Cache for Redis サービスにアクセスする"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToInternalRedisOutbound --protocol Tcp --priority 1200 --source-address-prefixes VirtualNetwork --destination-address-prefixes VirtualNetwork --destination-port-ranges 6381-6383 --direction Outbound --access Allow --description "マシン間のキャッシュ ポリシーのために内部の Azure Cache for Redis サービスにアクセスする"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToRateLimitInbound --protocol Tcp --priority 1300 --source-address-prefixes VirtualNetwork --destination-address-prefixes VirtualNetwork --destination-port-ranges 4290 --direction Inbound --access Allow --description "マシン間のレート制限ポリシーのために同期カウンターにアクセスする"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n VNetToRateLimitOutbound --protocol Tcp --priority 1300 --source-address-prefixes VirtualNetwork --destination-address-prefixes VirtualNetwork --destination-port-ranges 4290 --direction Outbound --access Allow --description "マシン間のレート制限ポリシーのために同期カウンターにアクセスする"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n LoadBalancerToVnet --protocol Tcp --priority 1400 --source-address-prefixes AzureLoadBalancer --destination-address-prefixes VirtualNetwork --destination-port-ranges 6390 --direction Inbound --access Allow --description "Azure インフラストラクチャの Load Balancer"
az network nsg rule create -g $MyResourceGroup --nsg-name $MyNetworkSecurityGroup -n TrafficManagerToVnet --protocol Tcp --priority 1500 --source-address-prefixes AzureTrafficManager --destination-address-prefixes VirtualNetwork --destination-port-ranges 443 --direction Inbound --access Allow --description "複数リージョンへのデプロイ用の Azure Traffic Manager ルーティング"
オマケ
仮想ネットワーク サービス タグ のページにあった以下記載で迷うことになった。
ちょうど Azure Portal 上で確認できるサービスタグと一致していたし、意図せずクラシックデプロイモデルを使っていたのか?という方向で調査して時間を使ってしまった。
雑感
Azure は不慣れなのでとりあえず Portalから〜と安易に考えていたが、しっかり Terraform で管理しようと思った