2024-05-31
Azure App Service でカスタムコンテナーを使用する場合、何らかのコンテナレジストリからイメージを Pull する必要があります。
Azure を使っている方であれば Azure Container Registry (ACR) を使用することも多いかと思いますが、 App Service と ACR は Azure ポータルを通じて簡単に連携させることが可能です。
App Service のデプロイセンターから設定を行うことが可能です。
その際、デフォルトでは管理者資格情報が使用されます。
この 管理者資格情報 というものは、 ACR にログイン可能なマスターユーザーを意味します。
ACR の設定から アクセスキー の画面で確認することができます。
この 管理者ユーザー が有効化されていると、 App Service から ACR に対して管理者としてイメージの pull 等ができるようになります。
その際に利用される認証情報ですが、 ACR のアクセスキーから確認することができ、その認証情報は App Service の環境変数に設定されます。
具体的には下記の環境変数が自動的に設定され、利用されます。
これらの環境変数の詳細説明は Azure の公式ドキュメントに記載されています。
Azure App Service の環境変数とアプリ設定 – カスタム コンテナー
ACR に対してパブリックアクセスが可能な場合、強い権限を持つ管理者ユーザーを有効化したくないケースや、 App Service の環境変数として認証情報を保持しておくことに抵抗がある場合もあるかと思います。
その場合、マネージド ID で認証してコンテナイメージを Pull する設定に変更することで、 上述したDOCKER_REGISTRY_SERVER_USERNAME や DOCKER_REGISTRY_SERVER_PASSWORD などの環境変数を使用せずに ACR からコンテナイメージを Pull できるようになります。
まずは App Service の左のブレード内にある ID からマネージド ID を有効化しましょう。
システム割り当てマネージド ID を使用するほうが管理が楽かと思います。
マネージド ID の種類については下記が参考になります。
ACR の左のブレード内にある アクセス制御 (IAM) からロール割り当ての追加を行います。
次に、割り当てるロールとして AcrPull を選びます。
ロールを選択後、メンバーの選択を行います。
メンバーの選択では、先ほど有効化した App Service のシステム割り当てマネージド ID を メンバーの追加 から選択肢ましょう。
該当の App Service のマネージド ID のが選択できたら、ロール割り当てを確定します。
App Service の画面に戻り、 デプロイセンター から認証方法を マネージド ID に変更します。
ひとつ注意点として、マネージド ID 認証にするとポータル上でイメージ名やタグ名を選択できません。
そのため、 ACR のイメージ名やタグ名はあらかじめ控えておき、手動で入力する必要があります。
ただし運用環境では CI/CD でこれらの値は自動でセットする形にしていることも多く、手動で設定する場合でも ACR のポータル画面からすぐに確認ができるため大きな問題にはならないと思います。
(Container Apps のリビジョン作成画面では ACR に管理者ユーザーが有効になっていれば、アプリ自体の ACR への認証はマネージド ID でも ACR の情報がドロップダウンに表示されるので、 App Service 側も今後改善されるかもしれません)
さて、ここまで設定できたら App Service の環境変数から DOCKER_REGISTRY_* の環境変数を削除することができます。
あわせて、 ACR 側の 管理者ユーザー も使用しない場合は削除してもいいでしょう。
この設定を行うことで App Service に設定したマネージド ID で ACR からのイメージ Pull が行われるようになります。
よりセキュアな構成を検討されている場合はぜひ参考にしていただければ幸いです。
弊社ではAzure構築・アドバイザリーサービスを提供しております。
マイクロソフト出身、 Azure 認定資格を保持するエンジニアが Azure に関するアドバイスや、環境構築などのご支援をいたします。
また、マイクロソフトのAzureサポートとのやり取りも弊社にお任せいただけます。
サポート担当とのやり取りは、慣れていない場合適切な情報を引き出すことができず、連絡の往復が続き問題解決までに時間がかかることが多いです。
弊社のアドバイザリーサービスでは、弊社で回答できる部分は迅速に回答し、Azure内部の調査が必要な場合などはAzureサポートと連携して問題解決にあたることができます。
Azure をより活用し、最適な構成を構築するご支援をいたしますので、ご検討の方はお気軽にお問い合わせください。