Azure Container Registryのパブリック IP ネットワーク ルールを構成してみる

この記事では、Azure App Service(以下App Service)でAzure Container Registry(以下Container Registry)からイメージをPullするときに、Container Registry側でアクセス元IPアドレスに基づいて、アクセスを制御する設定とその確認方法について記載します。

検証のパターンと実施方法

検証として以下パターンでの挙動を記載します。

  • アクセス許可設定したIPアドレスをもつApp Serviceでのイメージのpull
  • アクセス許可設定していないIPアドレスをもつApp Serviceでのイメージのpull

概要図

検証環境は以下で実施しました。

  • App Serviceリソースのデプロイのときに「公開」をDockerを指定してデプロイしていること
  • App Serviceのイメージソースをプライベートレジストリとし、ユーザー名やパスワードを使用してアクセスする
  • Container RegistryのSKUがPremiumであること

App Serviceの送信IPアドレスの確認

App Serviceの送信IPアドレスは以下の図にあるように対象となるリソースの「概要」->「プロパティ」->「ネットワーク」->「送信IPアドレス」に記載されています。

この複数記載されているIPアドレスを用いて、次のアクセス制御を設定します。

App Serviceの送信IPアドレス

Container Registryのアクセス制御

Container Registryの「ネットワーク」にて以下を設定し、保存します。

  • パブリックネットワークアクセス:選択されたネットワーク
  • アドレス範囲:先程確認したApp Serviceの送信IPアドレス

Container Registryのアクセス制御設定

Container Registryの診断設定

Container Registryに対し、App Serviceがイメージをpullしてくる際に利用するIPアドレスを確認するため、診断設定にてログを出力する設定をします。

Container Registryの診断設定にて「診断設定を追加する」をクリックし、次の画面でauditにチェックを入れます。

チェックを入れるとRepositoryEvent logsとLogin Eventsにも自動的にチェックが入ります。

あとは任意の「診断設定の名前」を記入し、「宛先の詳細」を今回はLog Analyticsに設定し、保存をクリックします。

診断設定の追加

Container Registryの診断設定

Container RegistryからApp Serviceへのイメージpull動作検証

App Serviceでイメージをpullする動作は、基本的にApp Serviceの起動時に行われます。

そのため、一回App Serviceを停止したのち、App Serviceを起動してアクセス制御が正しく行われているか動作検証を行いました。

まず、アクセス制御で許可設定したIPアドレスを持つApp Serviceでは問題なく、イメージをpullすることができました。

また、Container RegistryのログでContainerRegistryRepositoryEvents を確認してみると、起動した時間付近にCallerIpAddressでApp ServiceのIPアドレスが記載されており、OperationNameではPullが記載されています。

アクセス許可されたIPアドレスからのpullイベントのログ

一方で、アクセス許可されていないIPアドレスを持つApp ServiceからのアクセスログはContainerRegistryLoginEventsに記載されており、status codeが403と表記されています。

アクセス許可されていないIPアドレスからアクセスログ

また、アクセス許可されていない方のApp Serviceの起動時のログにはアクセスが拒否されていることが確認できます。

IPアドレスは上記のContainerRegistryLoginEventsに記載されているIPアドレスと同じものが記載されていました。

App Serviceの起動時のログ

まとめ

Container Registryでアクセス元IPに基づくアクセス制御とアクセスログによる挙動の確認をすることができました。

もし、IPアドレスに基づくアクセス制御とContainer Registryへのアクセスの鑑査を実施したい場合はご参考になればと思います。

参考

執筆担当者プロフィール
齊藤 泰一

齊藤 泰一(日本ビジネスシステムズ株式会社)

機械学習系ソリューション開発、開発環境自動化などを担当。

担当記事一覧