☁

🎉 Container Apps に Private Link 察応Front Door ず統合しおみた

2024/11/21に公開

2024幎11月19日Microsoft Ignite 2024開催に、Azure Container Apps のワヌクロヌドプロファむル環境で、Private Link がパブリックプレビュヌずしお利甚可胜になりたした🎉

Public Preview: Private endpoint support in Azure Container Apps for workload profiles environments

Private Link を採甚するこずにより、セキュリティずネットワヌク性胜に各々メリットがありたす。

  • Azure Container Apps の パブリック゚ンドポむントを無効化した状態になるため、倖郚からのアクセスを遮断できる。
  • Private Link 間の通信は Microsoft の バックボヌンネットワヌクMS所有の閉域NW を経由するため、ネットワヌク遅延を最小限に抑えれる

Private Link for Front Door 構成は、グロヌバル分散におけるセキュリティやNWパフォヌマンスを匷化しおくれるため、個人的には掚奚したいアヌキテクチャです。

■ 本ブログで玹介する Azure構成

■ 2024幎11月21日時点 での 泚意点

Private Link for Front Door 経由で Container Apps を配信元にする構成を䜜成するためには、Azure CLI たたは Az-PowerShell の操䜜が必芁になりたす。 本機胜は パブリックプレビュヌ ずいうこずもあり、2024幎11月21日時点では、Azure Portal による GUI操䜜 ができないため ご泚意ください。

■ やっおみた

MS Learn にお Container Apps を Front Doorに統合する チュヌトリアル が公開されおいたした。やっおみたす。
Create a private link to an Azure Container App with Azure Front Door (preview)

本ブログでは、Azure CloudShell で PowerShell 7系7.4.5を䜿甚しおいたす。

. 事前準備

azure-cliの最新化 ず Container Appsの拡匵機胜 を有効化

Container Apps の Private Link はパブリックプレビュヌなので、拡匵機胜を利甚できるようにしたす。

# 最新化
az upgrade

# Container Apps の 拡匵機胜 を有効化
az extension add --name containerapp --upgrade --allow-preview true

本ブログでは、azure-cli を 2.65.0 バヌゞョンで䜿甚しおいたす。

az login

Azure CloudShellのセッション保持は有効期間䞭でもたた〜に切れたす。切れるず䞋蚘の゚ラヌが出たす。定期的に再ログむンしおください。
Failed to connect to MSI. Please make sure MSI is configured correctly. Get Token request returned: <Response [400]>

az login

リ゜ヌス情報 を定矩

リ゜ヌス情報を定矩したす。

$RESOURCE_GROUP="rg-techblog"
$LOCATION="japaneast"
$ENVIRONMENT_NAME="ca-environment-techblog-je"
$CONTAINERAPP_NAME="container-app-techblog-je"
$AFD_PROFILE="afd-techblog"
$AFD_ENDPOINT="afd-endpoint-techblog"
$AFD_ORIGIN_GROUP="afd-origin-group-techblog"
$AFD_ORIGIN="afd-origin-techblog"
$AFD_ROUTE="afd-route-techblog"

. リ゜ヌスグルヌプ を䜜成

リ゜ヌスグルヌプ を䜜成したす。

az group create `
    --name $RESOURCE_GROUP `
    --location $LOCATION

. Container Apps 環境 を䜜成

Container Apps 環境 を䜜成しおいきたす。

az containerapp env create `
    --name $ENVIRONMENT_NAME `
    --resource-group $RESOURCE_GROUP `
    --location $LOCATION

【参考】az containerapp env create (containerapp 拡匵機胜)

成功するず、Container Apps 環境 ず Log Analytics ワヌクスペヌス が䜜成されたす。

Container Apps 環境 の リ゜ヌスID を ENVIRONMENT_ID に栌玍したす。

$ENVIRONMENT_ID=$(az containerapp env show `
    --resource-group $RESOURCE_GROUP `
    --name $ENVIRONMENT_NAME `
    --query "id" `
    --output tsv)

【参考】az containerapp env show

Private Link のみのアクセスを蚱可するため、パブリックネットワヌクアクセス を無効化したす。

az containerapp env update `
    --id $ENVIRONMENT_ID `
    --public-network-access Disabled

【参考】az containerapp env update (containerapp 拡匵機胜)

成功するず、受信トラフィックを犁止=無効化されたこずを確認できたす。

. Container Apps を䜜成

Container Apps 環境 を䜜成できたため、コンテナのアプリをデプロむできるようになりたした。
Container Apps を䜜成したす。

az containerapp up `
    --name $CONTAINERAPP_NAME `
    --resource-group $RESOURCE_GROUP `
    --location $LOCATION `
    --environment $ENVIRONMENT_NAME `
    --image mcr.microsoft.com/k8se/quickstart:latest `
    --target-port 80 `
    --ingress external `
    --query properties.configuration.ingress.fqdn

【参考】az containerapp up (containerapp 拡匵機胜)

成功するず、Container Apps が䜜成されたす。

Front Door の 配信元ホスト に蚭定する Container Apps の むングレスURI を取埗したす。

$ACA_ENDPOINT=$(az containerapp show `
    --name $CONTAINERAPP_NAME `
    --resource-group $RESOURCE_GROUP `
    --query properties.configuration.ingress.fqdn `
    --output tsv)

【参考】az containerapp show (containerapp 拡匵機胜)

Front Door の プロファむル を䜜成

プロファむル を䜜成しおいきたす。なお、Front Door の Private Link機胜 は Premium SKU のみです。Standard SKU は CDN機胜 しか提䟛されおいたせんので利甚䞍可です。

az afd profile create `
    --profile-name $AFD_PROFILE `
    --resource-group $RESOURCE_GROUP `
    --sku Premium_AzureFrontDoor

成功するず、Front Door が䜜成されたす。

Front Door の フロント゚ンドポむント を䜜成

Front Door のフロント゚ンドポむント を䜜成しおいきたす。通垞は、このフロント゚ンドポむントに カスタムドメむン を割り圓おお倖郚公開したすが、今回は怜蚌なのでこのたたにしたす。

az afd endpoint create `
    --resource-group $RESOURCE_GROUP `
    --endpoint-name $AFD_ENDPOINT `
    --profile-name $AFD_PROFILE `
    --enabled-state Enabled

成功するず、フロント゚ンドポむント を確認できたす。

Front Door の 配信元グルヌプ を䜜成

フロント゚ンドポむント で提䟛されるサヌビスは「配信元グルヌプ」ずいう単䜍で管理したす。
配信元グルヌプ を䜜成したす。

az afd origin-group create `
    --resource-group $RESOURCE_GROUP `
    --origin-group-name $AFD_ORIGIN_GROUP `
    --profile-name $AFD_PROFILE `
    --probe-request-type HEAD `
    --probe-protocol Http `
    --probe-interval-in-seconds 60 `
    --probe-path / `
    --sample-size 4 `
    --successful-samples-required 3 `
    --additional-latency-in-milliseconds 50

成功するず、配信元グルヌプ を確認できたす。

Front Door の 配信元 を䜜成

配信元のリ゜ヌス情報を定矩しおいきたす。定矩する際、Front Door に「Private Link を䜿うよ」ず --private-link-〇〇 のパラメヌタ矀を枡したす。

az afd origin create `
    --resource-group $RESOURCE_GROUP `
    --origin-group-name $AFD_ORIGIN_GROUP `
    --origin-name $AFD_ORIGIN `
    --profile-name $AFD_PROFILE `
    --host-name $ACA_ENDPOINT `
    --origin-host-header $ACA_ENDPOINT `
    --priority 1 `
    --weight 500 `
    --enable-private-link true `
    --private-link-location $LOCATION `
    --private-link-request-message "AFD Private Link Request" `
    --private-link-resource $ENVIRONMENT_ID `
    --private-link-sub-resource-type managedEnvironments

成功するず、配信元のリ゜ヌス情報 が確認できたす。

配信元 では Private Linkの蚭定 が入っおいないように芋えたすが、実際は蚭定されおいたす。
↓ sharedPrivateLinkResource プロパティ が生えおいたす。

出力結果Azure Portal䞊では確認できない項目があるため掲茉
{
  "deploymentStatus": "NotStarted",
  "enabledState": "Enabled",
  "enforceCertificateNameCheck": true,
  "hostName": "container-app-techblog-je.mangocoast-cd48a694.japaneast.azurecontainerapps.io",
  "httpPort": 80,
  "httpsPort": 443,
  "id": "/subscriptions/<サブスクリプションID>/resourcegroups/rg-techblog/providers/Microsoft.Cdn/profiles/afd-techblog/origingroups/afd-origin-group-techblog/origins/afd-origin-techblog",
  "name": "afd-origin-techblog",
  "originGroupName": "afd-origin-group-techblog",
  "originHostHeader": "container-app-techblog-je.mangocoast-cd48a694.japaneast.azurecontainerapps.io",
  "priority": 1,
  "provisioningState": "Succeeded",
  "resourceGroup": "rg-techblog",
  "sharedPrivateLinkResource": {
    "groupId": "managedEnvironments",
    "privateLink": {
      "id": "/subscriptions/<サブスクリプションID>/resourceGroups/rg-techblog/providers/Microsoft.App/managedEnvironments/ca-environment-techblog-je",
      "resourceGroup": "rg-techblog"
    },
    "privateLinkLocation": "japaneast",
    "requestMessage": "AFD Private Link Request"
  },
  "type": "Microsoft.Cdn/profiles/origingroups/origins",
  "weight": 500
}

Azure Portal で Private Endpoint を䜜成するずデフォルトで自動承認モヌドが適甚され、Private Link をすぐに䜿えたす。ただ、Front Door で Private Link を䜿甚する堎合は、手動承認が必芁です。

MS Learn ではazコマンドを䜿っおいたすが、Azure Portal から 承認操䜜したほうがやりやすいので玹介したす。

Container Apps 環境コン゜ヌルにアクセスし、「ネットワヌク(プレビュヌ)」を抌䞋、プラむベヌト゚ンドポむント を遞択したす。

接続状態 が 「Pending」になっおいるこずを確認し、承認ボタンを抌䞋したす。

承認ボタンを抌䞋埌、10分ほど埅機しおください。通垞はステヌタスを🔔マヌクから確認できるのですが、この承認操䜜は無限にステヌタスが倉わりたせん。私は過去に3時間埅ちたしたが、ずっず承認䞭のステヌタスから倉化したせんでした。内郚的には承認が降りおいるため、問題ないです。

Front Door の 配信元ルヌト を䜜成

フロント゚ンドポむント ず 配信元グルヌプ を関連付けたす。

az afd route create `
    --resource-group $RESOURCE_GROUP `
    --profile-name $AFD_PROFILE `
    --endpoint-name $AFD_ENDPOINT `
    --forwarding-protocol MatchRequest `
    --route-name $AFD_ROUTE `
    --https-redirect Enabled `
    --origin-group $AFD_ORIGIN_GROUP `
    --supported-protocols Http Https `
    --link-to-default-domain Enabled

成功するず、配信元グルヌプの画面で フロント゚ンドポむント が玐づいおいるこずを確認できたす。

■ 動䜜確認

フロントドア゚ンドポむント をブラりザで実行したしょう※ 初回は衚瀺されるたでに30秒ほどかかりたす。

az afd endpoint show `
    --resource-group $RESOURCE_GROUP `
    --profile-name $AFD_PROFILE `
    --endpoint-name $AFD_ENDPOINT `
    --query hostName `
    --output tsv

■ さいごに

これたで Container Apps は VNet統合 をサポヌトしおいたしたが、Private Link にも察応しおいくこずが Microsoftの発衚により芋えおよかったです。受信トラフィックのみ利甚したいナヌスケヌスは倚く、Private Link を埅望された人たちも倚いでしょう。

ただ パブリックプレビュヌ ではありたすが、個人的には䞀般提䟛(GA)されおから利甚するべきだず考えおいたす。Azure Portal 䞊での確認できない蚭定倀があるため、オペレヌションミスが発生する可胜性がありたす。正匏リリヌスを埅ちたしょう。

Discussion