カスタマー マネージド キーを使用し、保存中のアプリケーション データを暗号化する

関数アプリのアプリケーション データを保存時に暗号化するには、Azure Storage アカウントと Azure Key Vault が必要です。 これらのサービスは、デプロイ パッケージからアプリを実行するときに使用されます。

  • Azure Storage では保存時に暗号化を行うことができます。 システムによって提供されるキー、または独自のカスタマー マネージド キーを使用できます。 これは、Azure の関数アプリで実行されていないアプリケーション データが格納される場所です。
  • デプロイ パッケージからの実行は、App Service のデプロイ機能です。 これにより、Shared Access Signature (SAS) URL を使用して、Azure Storage アカウントからサイト コンテンツをデプロイできます。
  • Key Vault 参照は、App Service のセキュリティ機能です。 これにより、実行時にアプリケーション設定としてシークレットをインポートできます。 これを使用して、Azure Storage アカウントの SAS URL を暗号化します。

保存時の暗号化の設定

Azure Storage アカウントの作成

最初に、Azure Storage アカウントを作成しそれをカスタマー マネージド キーを使用して暗号化します。 ストレージ アカウントが作成された後、Azure Storage Explorer を使用してパッケージ ファイルをアップロードします。

次に、Storage Explorer を使用して SAS を生成します

Note

この SAS URL を保存します。これは後で、実行時にデプロイ パッケージに安全にアクセスできるようにするために使用されます。

ストレージ アカウントからパッケージを実行するように構成する

ファイルを BLOB ストレージにアップロードし、ファイルの SAS URL を取得した後、WEBSITE_RUN_FROM_PACKAGE アプリケーション設定を SAS URL に設定します。 次の例では、Azure CLI を使用してそれを行っています。

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="<your-SAS-URL>"

このアプリケーション設定を追加すると、関数アプリが再起動します。 アプリが再起動したら、そのアプリを参照し、デプロイ パッケージを使用して正しく起動したことを確認します。 アプリケーションが正しく起動しなかった場合は、パッケージからの実行のトラブルシューティング ガイドに関する記事を参照してください。

Key Vault 参照を使用してアプリケーション設定を暗号化する

WEBSITE_RUN_FROM_PACKAGE アプリケーション設定の値を、SAS でエンコードされた URL への Key Vault 参照に置き換えることができるようになりました。 これにより、SAS URL が Key Vault で暗号化され、追加のセキュリティ層が用意されます。

  1. 次の az keyvault create コマンドを使用して Key Vault インスタンスを作成します。

    az keyvault create --name "Contoso-Vault" --resource-group <group-name> --location eastus    
    
  2. こちらの手順に従い、キー コンテナーへのアクセス権をアプリに付与します。

  3. 次の az keyvault secret set コマンドを使用して、キー コンテナーにシークレットとして外部 URL を追加します。

    az keyvault secret set --vault-name "Contoso-Vault" --name "external-url" --value "<SAS-URL>"    
    
  4. 次の az webapp config appsettings set コマンドを使用して、WEBSITE_RUN_FROM_PACKAGE アプリケーション設定を作成し、値を外部 URL への Key Vault 参照として指定します。

    az webapp config appsettings set --settings WEBSITE_RUN_FROM_PACKAGE="@Microsoft.KeyVault(SecretUri=https://Contoso-Vault.vault.azure.net/secrets/external-url/<secret-version>"    
    

    <secret-version> は、前の az keyvault secret set コマンドの出力にあります。

このアプリケーション設定を更新すると、関数アプリが再起動します。 アプリが再起動したら、そのアプリを参照し、Key Vault 参照を使用して正しく起動したことを確認します。

アクセス トークンをローテーションする方法

ストレージ アカウントの SAS キーは定期的にローテーションすることをお勧めします。 関数アプリが誤ってアクセス権を失わないようにするために、Key Vault で SAS URL を更新する必要もあります。

  1. Azure portal でストレージ アカウントに移動して SAS キーをローテーションします。 [設定]>[アクセス キー] で、SAS キーをローテーションするためのアイコンをクリックします。

  2. 新しい SAS URL をコピーし、次のコマンドを使用して、Key Vault に更新された SAS URL を設定します。

    az keyvault secret set --vault-name "Contoso-Vault" --name "external-url" --value "<SAS-URL>"    
    
  3. アプリケーション設定の Key Vault 参照を新しいシークレット バージョンに更新します。

    az webapp config appsettings set --settings WEBSITE_RUN_FROM_PACKAGE="@Microsoft.KeyVault(SecretUri=https://Contoso-Vault.vault.azure.net/secrets/external-url/<secret-version>"    
    

    <secret-version> は、前の az keyvault secret set コマンドの出力にあります。

関数アプリのデータ アクセスを取り消す方法

ストレージ アカウントへの関数アプリのアクセス権を取り消す場合、次の 2 つの方法があります。

Azure Storage アカウントの SAS キーをローテーションする

ストレージ アカウントの SAS キーがローテーションされると、関数アプリはストレージ アカウントへのアクセス権を失いますが、パッケージ ファイルの最終ダウンロード バージョンを使用して引き続き実行されます。 関数アプリを再起動すると、最終ダウンロード バージョンがクリアされます。

Key Vault への関数アプリのアクセス権を削除する

Key Vault への関数アプリのアクセス権を無効にすることで、サイト データへの関数アプリのアクセス権を取り消すことができます。 これを行うには、関数アプリの ID のアクセス ポリシーを削除します。 これは、Key Vault 参照を構成するときに作成した同じ ID です。

まとめ

これで、アプリケーション ファイルがストレージ アカウントで保存時に暗号化されるようになりました。 関数アプリは、起動時に Key Vault から SAS URL を取得します。 最後に、関数アプリは、ストレージ アカウントからアプリケーション ファイルを読み込みます。

ストレージ アカウントへの関数アプリのアクセス権を取り消す必要がある場合は、キー コンテナーへのアクセス権を取り消すか、ストレージ アカウント キーをローテーションします。どちらでも、SAS URL を無効にできます。

よく寄せられる質問

デプロイ パッケージから関数アプリを実行する場合、追加料金は発生しますか?

Azure Storage アカウントに関連するコストと、該当するエグレス料金のみです。

デプロイ パッケージからの実行は、関数アプリにどのように影響しますか?

  • デプロイ パッケージからアプリを実行すると、wwwroot/ が読み取り専用になります。 アプリでこのディレクトリへの書き込みを試行すると、エラーを受け取ります。
  • TAR および GZIP 形式はサポートされていません。
  • この機能は、ローカル キャッシュと互換性がありません。

次のステップ