🔑
Azure Key Vaultを用いてAPIキーをセキュアに使う
0. はじめに
GitHubでコードを共有し、チームで開発を進めたい。しかし、APIキーなどを誤って公開してしまうと、不正アクセスのリスクが高まってしまう。そこで活躍するのがKey Vaultです。
Azure Key Vaultとは
Azure Key Vaultは、パスワードやAPIキー、接続文字列などの機密情報を安全に保管するためのMicrosoft Azureのサービスです。ちなみにKey Vaultとは「鍵の保管庫」という意味だそうです。Key Vaultを使うことでコード内に直接的に機密情報を書く必要がなくなるため、情報漏洩のリスクを減らすことができます。Key Vaultに関する詳細は公式ドキュメントをご確認ください。
本記事で実現すること
App Serviceで実行しているWebアプリケーションにてAPIキーを利用する際に、Key Vault(キーコンテナとも呼ばれています。)を用いて、APIキーを安全に管理する方法を解説していきます。
1. Key Vaultの作成
Key Vaultの作成
- Azure Portalで、「キーコンテナー」と検索し、作成します。
- 「基本」では、「Key Vault名」や「地域」を設定します。
- 「アクセスポリシー」は、本記事では「コンテナーのアクセス ポリシー」を選択しました。
- 他の項目は、本記事ではデフォルトのままの設定にしました。
APIキーの追加
- 作成したキーコンテナーで、「シークレット」を「生成/インポート」していきます。
- 「名前」(本記事ではAPIKEYにしました.)と「値」(APIキー)を指定して生成します。
2. App Serviceとの連携
Key Vaultへのアクセス許可
- 作成済みのApp Serviceの「ID」でシステム割り当てマネージドIDを有効にします。
「システム割り当て済み」の「状態」を「オン」に変更して「保存」してください。
- 先ほど作成したキーコンテナーの「アクセスポリシー」を「作成」していきます。
- 「アクセス許可」では、「シークレットのアクセス許可」の「取得」「一覧」を選択します。
- 「プリンシパル」では、作成済みのApp Serviceを選択します。
- 他の項目はデフォルトのままの設定にしました。
環境変数への設定
- 作成済みのApp Serviceの「環境変数」の「アプリ設定」を「追加」していきます。
- 適当な環境変数の「名前」を設定し、「値」は以下のように設定します。
@Microsoft.KeyVault(VaultName=<Key Vault名>;SecretName=<シークレット名>)
- 「適用」を押下し、「ソース」に「✅キー コンテナー」と表示されていたら成功です。
3. コードでのAPIキーの取得
- pythonの場合はosモジュールをimportし、os.environで環境変数として取得できます。
sample.py
import os
api_key = os.environ["API_KEY"]
4. おわりに
Web APIの利用において、APIキーなどの秘密情報をどのように管理するかは重要な問題になります。GitHubなどに直接的に秘密情報をコミットすると悪意のある第三者に悪用されるリスクが高まります。ネットで調べてみると実際に悪用されてしまった例も散見されました。そこで、本記事のようにKey Vaultなどのサービスを利用してAPIキーを管理することが推奨されます。
Discussion