🦺

Check! Azure Functions のセキュリティ保護について再確認する

2021/01/19に公開

Prologue

Azure Functions の VNet 統合周りを整理しようと思って、手始めにセキュリティ保護のドキュメントの要点をまとめようとしたら、要点どころでなくなったので、取り急ぎ1つの記事として公開します。単に元のドキュメントの抜粋です😳

Azure Functions をセキュアに保つために

公式ドキュメントでおさらいした要点を軽く書き出してみました。

https://docs.microsoft.com/ja-jp/azure/azure-functions/security-concepts

Azure Functions 自体で気を付けること

要点 説明 参考
ログの取得及び監視 Azure MonitorAzure Application Insights)や Azure Sentinel が利用できます。 Azure Functions を監視する | Microsoft Docs
HTTPS を利用する HTTPS を選択し、TLS バージョンも注意する。 HTTPS の適用
アクセスキーを活用する anonymous ではなく function key などのアクセスキーを利用しましょう。アクセスキーは使いまわさない、パブリックへの公開は避け、承認スコープや管理レベルの扱いに気をつける。アクセスキーを格納する場所(シークレット リポジトリ)はデフォルトは App Settings の AzureWebJobsStorage で指定されたストレージだけど、適宜選択できる。 運用環境で HTTP エンドポイントを保護する
認証/承認 App Servcie では、Azure Active Directory やサードパーティのIDプロバイダ(Microsoftアカウント、Facebook、Google、Twitter、任意の OpenID Connect プロバイダ)を利用して認証することができます。また、Azure API Managerment (APIM) の認証ポリシーも利用できる。 認証と権限承認 - Azure App Service | Microsoft Docs
CORS アクセス制限 CORS の設定を適切に行いましょう。 クロス オリジン リソース共有
シークレットの管理 シークレットは決してコード内に記述せず、アプリケーション設定(App settings)Azure Key Vault を利用しましょう。 Key Vault 参照を使用する - Azure App Service | Microsoft Docs
デプロイ、scm サービスサイトを保護する デプロイ資格情報の構成FTPの無効化scm エンドポイントのアクセス制限などを行います。 セキュリティで保護されたデプロイ
CI/CD を利用した継続的な検証 Azure DevOps や GitHub Actions などの CI/CD ツールを用いて継続的に検証しましょう。 CI/CD パイプラインに継続的なセキュリティ検証を追加する方法
Web アプリケーション ファイアウォール (WAF) Azure Application GatewayAzure Front Door などのゲートウェイ サービスと組みあわせ、WAF を設定することができます。Azure App Service Environment(ASE)内で実行するか、プライベートエンドポイントを利用します。 -

Azure 全体のセキュリティ対策

要点 説明 参考
Azure Security Center で脆弱性チェック 脆弱性に対する対策ができているか、推奨項目がないかチェックすることができる。チェックだけなら無料で利用できます。 Azure Defender for App Service - 利点と機能 | Microsoft Docs

複数のリソースと組み合わせるときに気を付けること

要点 説明 参考
アクセス許可 リソース間のアクセス管理には、RBAC(Role Based Access Control)Managed Identites が利用できます。 App Service と Azure Functions でマネージド ID を使用する方法
ネットワークのセキュリティ 仮想ネットワークを利用してアクセスを制御することができます。また、Azure App Service 自体のアクセス制限を利用したり、Azure Private Link と組み合わせてプライベートエンドポイントを利用することもできます。 Azure Functions のネットワーク オプション | Microsoft Docs

ページの下までをピックアップするとこんな感じです。ぜーぜー

FaaS 単体だけ見れば小さくまとまって守りやすいとしても、実際の構成ではストレージやデータベース、他のリソースと組み合わせて利用する場合がほとんど。構成が複雑になればなるほど隙が多くなってしまうでしょう。FaaS, PaaS, SaaS は IaaS に比べてプラットフォーム側が守ってくれる部分も多いですが、個々のリソースやリソース間のセキュリティを保つのは開発者自身です。要点をしっかり見極めてガードを固めていきましょう!

Epilogue

多いけど、開発段階で必要なことはわりと自然とやってることだったので安心。本番運用の際は改めて見直したい。

Discussion