検索
連載

【Azure】App ServiceのFTPサーバにアクセスできなくなった場合の対処方法Tech TIPS

これまで何の問題もなく使えていたAzure App Serviceのコンテンツファイル更新用FTPサーバ。しかし、新たにデプロイしたらエラーが発生してFTPに接続できなくなってしまった……。こうしたトラブルとその解決策を幾つか紹介しよう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

Azure App ServiceのFTPサーバにアクセスできなくなった!?

対象:Azure App Service


 Azureの「App Service」でWebサイトあるいはAPIサイトを運用していて、そこにHTMLやスクリプトなどのコンテンツファイルをアップロードするのにFTPを使っている人もいることだろう。

 最近、App Serviceをデプロイあるいは新規作成したら、FTPで接続できなくなった、といったトラブルに遭遇したことはないだろうか? だとしたら、それはAzureの仕様変更の影響かもしれない。

 本Tech TIPSでは、上述したようなトラブルも含めたApp Serviceのコンテンツファイル更新用FTPサーバでよくあるトラブルとその解決策を紹介する。

症状その1――App Serviceを新規作成したらFTPが使えなくなった

 本Tech TIPSの執筆時点で、App Serviceを新規作成するとデプロイ用のFTPサーバの基本認証(ベーシック認証)がデフォルトで無効化される(以前はデフォルトで有効だった)。App ServiceのFTPサーバには必ず基本認証を経て接続する必要があるため、実質的にFTPサーバは機能しないといってよい。

●既存のApp ServiceでFTPサーバの基本認証を有効化するには

 デプロイしたApp ServiceでFTPの基本認証を有効化するには、Azureポータルで以下の画面のように設定する。

【Azureポータル】既存のApp ServiceでFTPサーバの基本認証を有効化する
【Azureポータル】既存のApp ServiceでFTPサーバの基本認証を有効化する

■操作手順

  1. Azureポータルで対象のApp Serviceプランのページを開く
  2. 左側のメニューで[設定]−[構成]をクリックする
  3. プラットフォームの設定」欄にある[SCM基本認証の発行資格情報][FTP基本認証の発行資格情報]の両方で「オン」を選ぶ
  4. 保存]をクリック後、[続行]ボタンをクリックしてApp Serviceを再起動させる

 [FTP基本認証の発行資格情報]だけではなく[SCM基本認証の発行資格情報]も「オン」にすることを忘れないように注意しよう。

●App Serviceの新規作成時にFTPサーバの基本認証を有効化するには

 AzureポータルでApp Serviceを新規作成する場合は、以下の画面のように設定する。

【Azureポータル】App Serviceの新規作成時にFTPサーバの基本認証を有効化する
【Azureポータル】App Serviceの新規作成時にFTPサーバの基本認証を有効化する

■操作手順

  1. AzureポータルのApp Service一覧ページで[+ 作成]−[Webアプリ]をクリックして、Webアプリ作成ウィザードを起動する
  2. ウィザードを[デプロイ]まで進める
  3. 認証の設定」欄にある[基本認証]で[有効にする]を選ぶ
  4. [次: ネットワーク >]または[確認および作成]ボタンをクリックしてウィザードを進める

 BicepやARMテンプレートなどを使ってApp Serviceをデプロイする場合は、以下のように「Microsoft.Web/sites/basicPublishingCredentialsPolicies」というリソースの作成をテンプレートに追記して、FTPとSCMの両方の基本認証を明示的に有効化する。

param location string = resourceGroup().location
param siteName string // App Serviceの名前

// リソース生成: App Serviceのサイト本体
resource webApp 'Microsoft.Web/sites@2024-11-01' = {
  name: siteName // App Service名
  location: location
  properties: {
    // ……<省略>……
  }
}

// リソース生成: FTPの基本認証ポリシー
resource webAppFtpPolicy 'Microsoft.Web/sites/basicPublishingCredentialsPolicies@2024-11-01' = {
  parent: webApp // 親になるApp Serviceのリソース
  name: 'ftp' // FTPが対象
  properties: {
    allow: true // 基本認証を有効にする
  }
}

// リソース生成: SCMの基本認証ポリシー
resource webAppSCMPolicy 'Microsoft.Web/sites/basicPublishingCredentialsPolicies@2024-11-01' = {
  parent: webApp // 親になるApp Serviceのリソース
  name: 'scm' // SCMが対象
  properties: {
    allow: true // 基本認証を有効にする
  }
}

【Bicep】App Serviceの新規作成時にFTPサーバの基本認証を有効化する
※Microsoftのレファレンス: Microsoft.Web/sitesMicrosoft.Web/sites/basicPublishingCredentialsPolicies

症状その2――暗号化していないFTPでは接続できない

 App Serviceを新規作成すると、そのFTPサーバはデフォルトで暗号化していない平文(ひらぶん)のFTP接続を拒否する。暗号化されていないFTPで接続できるようにするには、App Serviceの設定を明示的に変更する必要がある。

 いうまでもないことだが、暗号化していないFTPでは、その通信経路上でネットワークパケットをモニタリングすると容易にFTPの資格情報が読み取れてしまう。つまり資格情報が漏えいする危険性が高く、お勧めできる設定ではない。その危険性を踏まえてから、以下の設定をしていただきたい。

●既存のApp Serviceで暗号化していないFTP接続を許可するには

 Azureポータルでは、以下の画面のように設定する。

【Azureポータル】App Serviceで平文のFTP接続を許可する
【Azureポータル】App Serviceで平文のFTP接続を許可する

■操作手順

  1. Azureポータルで対象のApp Serviceプランのページを開く
  2. 左側のメニューで[設定]−[構成]をクリックする
  3. プラットフォームの設定」欄にある[FTP の状態]プルダウンリストで[すべて許可]を選ぶ
  4. 保存]をクリック後、[続行]ボタンをクリックしてApp Serviceを再起動させる

●App Serviceの新規作成時にFTPサーバの基本認証を有効化するには

 BicepやARMテンプレートなどを使ってApp Serviceをデプロイする際に、暗号化されていないFTP接続を許可するには、次のどちらかのリソース設定が必要になる:

  • Microsoft.Web/sites」リソースの[properties]−[siteConfig]−[ftpsState]に「AllAllowed」を指定
  • Microsoft.Web/sites/config」リソースの[properties]−[ftpsState]に「AllAllowed」を指定

// ……<前略>……

// リソース生成: App ServiceのWeb設定
resource webAppConfig 'Microsoft.Web/sites/config@2024-11-01' = {
  parent: webApp // 親になるApp Serviceのリソース
  name: 'web'
  properties: {
    ftpsState: 'AllAllowed' // 暗号化していないFTP接続を許可
    // ……<省略>……
  }
}

// ……<後略>……

【Bicep】App Serviceの新規作成時に暗号化されていないFTP接続を許可する
これは「Microsoft.Web/sites/config」リソースの方で設定する例。[ftpsState]はデフォルトで「FtpsOnly」すなわち暗号化していないFTP接続を拒否するように設定される。
※Microsoftのレファレンス: Microsoft.Web/sites/config

症状その3――ユーザースコープの資格情報だとFTP接続時の認証に失敗する

 AzureポータルのApp Serviceのページで[デプロイ]−[デプロイセンター]−[FTPS資格情報]タブには、前述した「アプリケーションスコープ」の他、「ユーザースコープ」という資格情報の欄もある。

 アプリケーションスコープがApp Serviceごとの資格情報であるのに対し、ユーザースコープはAzureにサインイン中のアカウントごとに作成できる資格情報だ。そのアカウントがアクセス可能なApp Serviceであればどれでも、リソースグループやサブスクリプションが異なっていても、そのアカウントにひも付いているユーザースコープの資格情報でFTP接続ができる(ユーザー名には各App Serviceの名前を加える必要がある)。

 そのため、ユーザースコープの資格情報を変更する場合は注意が必要だ。Azureポータルで、あるApp Serviceの[デプロイ]−[デプロイセンター]−[FTPS資格情報]タブで、ユーザースコープの資格情報を変更した場合、その他のApp Serviceにも作用するからだ(App Service以外のリソースやFTP以外の接続/デプロイ手段にも影響する)。結果として、意図していなかった他のApp Serviceでもユーザースコープの資格情報でのログインに失敗するようになる。ユーザースコープの資格情報を変更したら、全てのFTPクライアントで新しいユーザースコープの資格情報を設定し直すのを忘れないようにしよう。

 またユーザースコープのパスワードは、後から確認できない。パスワードを忘れたら新たなパスワードを再設定するしかない。複数のApp Serviceなどのリソースで利用するつもりなら、パスワードマネージャーなどに保存しておくべきだろう。

【Azureポータル】ユーザースコープの資格情報の注意点
【Azureポータル】ユーザースコープの資格情報の注意点

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.