セキュリティで保護されたストレージ アカウントを Azure Functions で使用する方法
この記事では、セキュリティで保護されたストレージ アカウントに関数アプリを接続する方法について説明します。 インバウンドおよびアウトバウンド アクセスに制限のある関数アプリを作成する方法の詳細なチュートリアルについては、仮想ネットワークとの統合に関するチュートリアルを参照してください。 Azure Functions とネットワークの詳細については、「Azure Functions のネットワーク オプション」を参照してください。
お使いのストレージ アカウントを仮想ネットワークに制限する
関数アプリを作成するときは、新しいストレージ アカウントを作成するか、既存のストレージ アカウントにリンクします。 現時点では、既存のセキュリティで保護されたストレージ アカウントを使用した関数アプリの作成をサポートしているのは、Azure portal、ARM テンプレート デプロイ、Bicep デプロイだけです。
Note
セキュリティで保護されたストレージ アカウントは、Dedicated (App Service) プランと Elastic Premium プランのすべてのレベルでサポートされています。 これらは、Flex 従量課金プランでもサポートされています。 従量課金プランは仮想ネットワークをサポートしていません。
ストレージ アカウントに関するすべての制限の一覧については、「ストレージ アカウントの要件」を参照してください。
関数アプリの作成時のセキュリティで保護されたストレージ
仮想ネットワークの背後でセキュリティが保護される新しいストレージ アカウントと共に、関数アプリを作成できます。 次のセクションは、Azure portal またはデプロイ テンプレートを使用してこれらのリソースを作成する方法を示しています。
「Premium プランでの関数アプリの作成」の手順を実行します。 仮想ネットワーク チュートリアルのこのセクションでは、プライベート エンドポイント経由でストレージに接続する関数アプリを作成する方法について説明します。
Note
Azure portal で関数アプリを作成する際には、[ストレージ] タブで既存のセキュリティ保護されたストレージ アカウントを選択することもできます。ただし、関数アプリがストレージ アカウントのセキュリティ保護に使用される仮想ネットワークを通して接続を行えるように、関数アプリで適切なネットワークを構成する必要があります。 ネットワークを構成するアクセス許可がない場合、またはネットワークの準備が完全には完了していない場合は、[ネットワーク] タブで [作成後にネットワークを構成する] を選択します。新しい関数アプリのネットワークは、ポータルの [設定]>[ネットワーク] で構成できます。
既存の関数アプリのセキュリティで保護されたストレージ
既存の関数アプリがある場合は、そのアプリで使用されているストレージ アカウントでネットワークを直接構成できます。 ただし、このプロセスを実行すると、ネットワークを構成する間、および関数アプリが再起動する間、関数アプリが停止することになります。
ダウンタイムを最小限に抑えるために、代わりに既存のストレージ アカウントを新しいセキュリティ保護されたストレージ アカウントにスワップアウトできます。
1. 仮想ネットワーク統合を有効にする
前提条件として、ご利用の関数アプリのために仮想ネットワーク統合を有効にする必要があります。
サービス エンドポイントまたはプライベート エンドポイントが有効になっていないストレージ アカウントを持つ関数アプリを選択します。
関数アプリの仮想ネットワーク統合を有効にします。
2. セキュリティで保護されたストレージ アカウントを作成する
関数アプリ用のセキュリティで保護されたストレージ アカウントを設定します。
2 番目のストレージ アカウントを作成します。 このストレージ アカウントは、セキュリティで保護されていない元々のストレージ アカウントではなく、関数アプリで使用するためのセキュリティで保護されたストレージ アカウントです。 Functions でまだ使用されていない既存のストレージ アカウントを使用することもできます。
後で使用するために、このストレージ アカウントの接続文字列を保存します。
ストレージ アカウントにファイル共有を作成します。 便宜上、元のストレージ アカウントと同じファイル共有名を使用できます。 そうでなく、新しいファイル共有名を使用する場合は、ご利用のアプリ設定を更新する必要があります。
次のいずれかの方法で新しいストレージ アカウントをセキュリティで保護します。
プライベート エンドポイントを作成する。 プライベート エンドポイント接続を設定するとき、
file
およびblob
サブリソース用のプライベート エンドポイントを作成します。 Durable Functions では、プライベート エンドポイントを介してアクセス可能なqueue
とtable
のサブリソースも作成する必要があります。 カスタムまたはオンプレミスのドメイン ネーム システム (DNS) サーバーを使用している場合は、新しいプライベート エンドポイントに解決されるように DNS サーバーを構成します。特定のサブネットへのトラフィックを制限します。 関数アプリが、許可されたサブネットとネットワーク統合されていること、そのサブネットに
Microsoft.Storage
へのサービス エンドポイントが用意されていることを確認します。
ファイルと BLOB のコンテンツを、関数アプリで使用されている現在のストレージ アカウントから、新しくセキュリティ保護されたストレージ アカウントとファイル共有にコピーします。 AzCopy と Azure Storage Explorer は一般的な方法です。 Azure Storage Explorer を使用する場合は、ご利用のクライアントの IP アドレスから、ご利用のストレージ アカウントのファイアウォールへのアクセスを許可することが必要な場合があります。
これで、関数アプリを、新しくセキュリティで保護されたストレージ アカウントと通信できるよう構成する準備ができました。
3. アプリケーションの構成のルーティングを有効にする
Note
これらの構成手順は、Elastic Premium および Dedicated (App Service) ホスティング プランにのみ必要です。 Flex 従量課金プランでは、ネットワークを構成するためのサイト設定は必要ありません。
これで、関数アプリのトラフィックを、仮想ネットワーク経由でルーティングする準備が整いました。
アプリケーション ルーティングを有効にして、アプリのトラフィックを仮想ネットワークにルーティングします。
関数アプリで、[設定] を展開して、[ネットワーク] を選択します。 [ネットワーク] ページの [送信トラフィックの構成] で、仮想ネットワーク統合に関連付けられているサブネットを選択します。
新しいページで、[アプリケーション ルーティング] の下にある [送信インターネット トラフィック] を選択します。
コンテンツ共有ルーティングを有効にして、関数アプリが新しいストレージ アカウントと、その仮想ネットワーク経由で通信できるようにします。 前の手順と同じページで、[構成ルーティング] の下にある [コンテンツ ストレージ] を選択します。
Note
同じプラン内の複数の関数アプリによって共有されているストレージ アカウント内のコンテンツ共有にルーティングする場合は、特別な注意を払う必要があります。 詳細については、ストレージに関する考慮事項の記事にある「仮想ネットワーク経由の一貫性のあるルーティング」を参照してください。
4. アプリケーション設定を更新する
最後に、セキュリティで保護された新しいストレージ アカウントをポイントするようにアプリケーション設定を更新する必要があります。
関数アプリで、[設定] を展開し、[環境変数] を選びます。
[アプリの設定] タブで、次の設定を更新します。それには、各設定を選択し、編集してから [適用] を選択します。
設定名 値 解説 AzureWebJobsStorage
ストレージ接続文字列 前に保存した、セキュリティで保護された新しいストレージ アカウントの接続文字列を使用します。 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
ストレージ接続文字列 前に保存した、セキュリティで保護された新しいストレージ アカウントの接続文字列を使用します。 WEBSITE_CONTENTSHARE
ファイル共有 プロジェクト デプロイ ファイルが存在する、セキュリティで保護されたストレージ アカウントに作成されたファイル共有の名前を使用します。 [適用]、[確認] の順に選択して、新しいアプリケーション設定を関数アプリに保存します。
関数アプリが再起動します。
関数アプリは、再起動を完了すると、セキュリティで保護されたストレージ アカウントに接続されます。