はじめに
アプリの構成のシークレットの管理に関する問題を理解するには、上級開発者の Steve のストーリーが最適です。
Steve はペット フードの配送会社で数週間勤務していました。 彼は、会社の Web アプリの詳細 (注文情報を格納するための Azure SQL データベースと、クレジット カードの請求と顧客の住所をマッピングするためのサード パーティ製 API を使用した .NET Core Web アプリ) を詳しく確認しているときに、誤って注文データベースの接続文字列をパブリック フォーラムに貼り付けてしまいました。
数日後、経理部は、会社に未払いの相当量のペットフードを納入していることに気づきました。 誰かが、接続文字列を使用してデータベースにアクセスし、データベースを直接更新することで注文を作成していたのです。
自分のミスに気付いた Steve は、攻撃者をロックアウトするため、急いでデータベースのパスワードを変更しました。 Steve がパスワードを変更すると、Web サイトはユーザーにエラーを返し始めました。 アプリ サーバーは、新しいパスワードで更新された構成を必要としていました。 Steve は再デプロイせずに、アプリ サーバーに直接ログインしてアプリの構成を変更しましたが、サーバーでは引き続き要求の失敗が示されていました。
Steve は、アプリの複数のインスタンスが異なるサーバーで実行されることを忘れていました。 彼は 1 つの構成のみを変更していました。 完全な再デプロイが必要となり、さらに 30 分のダウンタイムが生じました。
経理部が誤りを迅速に修正できたため、影響を受けた注文が 1 日分のみであったということは、Steve にとって幸運なことでした。 しかし、将来同じような幸運が彼に起きるとは限らないため、アプリのセキュリティと保守性を向上させる方法を見つける必要があります。
データベース接続文字列、API キー、またはサービス パスワードが漏洩した場合、致命的なことになる可能性があります。 漏洩により、データの盗難や削除、財務上の損害、アプリのダウンタイム、ビジネス資産と評判に回復不能な損害が生じる可能性があります。 残念ながら、シークレット値は多くの場合、同時に複数の場所にデプロイして、都合の悪いタイミングで変更する必要があります。 そしてこれらをどこかに格納する必要があります。 Steve が Azure Key Vault を使用することで、どのようにリスクを軽減し、アプリのセキュリティと保守性を向上させるかを見てみましょう。
学習の目的
このモジュールでは、次のことを行います。
- Azure Key Vault に格納できる情報の種類を調べる。
- Azure キー コンテナーを作成し、それを使用してシークレット構成値を格納します。
- Azure リソース用マネージド ID を使用して Azure App Service Web アプリから Azure Key Vault に安全にアクセスできるようにする。
- Azure Key Vault からシークレットを取得する Web アプリを実装する。