デーモン アプリケーションをセキュリティで保護する
この記事では、デーモン アプリケーションを Microsoft Azure Maps の信頼でき、セキュリティで保護された環境でホストする方法について説明します。
デーモン アプリケーションの例を次に示します。
- Azure Web ジョブ
- Azure Function App
- Windows サービス
- 実行中の信頼できるバックグラウンド サービス
Azure Maps の認証の詳細を表示する
Azure portal で Azure Maps アカウントの認証の詳細を表示するには:
Azure portal にサインインします。
Azure portal メニューに移動します。 [すべてのリソース] を選択し、Azure Maps アカウントを選択します。
左側のペインの [設定] で、 [認証] を選択します。
Azure Maps アカウントの作成時に、3 つの値が作成されます。 それらは、Azure Maps で次の 2 種類の認証をサポートするために使用されます。
- Microsoft Entra 認証:
Client ID
は、REST API 要求に使用されるアカウントを表します。Client ID
値は、アプリケーション構成に格納してから、Microsoft Entra 認証を使用する Azure Maps HTTP 要求を行う前に取得する必要があります。 - 共有キー認証:
Primary Key
およびSecondary Key
は、共有キー認証のサブスクリプション キーとして使用されます。 共有キー認証は、Azure Maps への各要求で、Azure Maps アカウントによって生成されたキーを渡す処理に依存しています。 キーを定期的に再生成することをお勧めします。 再生成中に現在の接続を維持するために、2 つのキーが用意されています。 1 つのキーを、もう一方を再生成しているときに使用できます。 キーを再生成したら、新しいキーを使用するように、このアカウントにアクセスするすべてのアプリケーションを更新する必要があります。 詳細については、「Azure Maps による認証」を参照してください
重要
運用アプリケーションの場合、Microsoft Entra ID と Azure ロールベースのアクセス制御 (Azure RBAC) を実装することをお勧めします。 Microsoft Entra の概念の概要については、「Azure Maps による認証」を参照してください。
シナリオ: Azure Key Vault を使用する共有キー認証
共有キー認証を使用するアプリケーションでは、キーを安全なストアに保管する必要があります。 このシナリオでは、アプリケーション キーをシークレットとして Azure Key Vault に安全に保管する方法について説明します。 アプリケーションでは、共有キーをアプリケーション構成に格納しないで、Azure Key Vault のシークレットとして取得できます。 キーの再生成を簡略化するために、アプリケーションでは一度に 1 つのキーを使用することをお勧めします。 アプリケーションでは、未使用のキーを再生成し、再生成されたキーを Azure Key Vault にデプロイして、引き続き 1 つのキーで現在の接続を維持することができます。 Azure Key Vault を構成する方法については、「Azure Key Vault 開発者ガイド」を参照してください。
重要
このシナリオでは、Azure Key Vault を介して Microsoft Entra ID に間接的にアクセスします。 ただし、Microsoft Entra 認証を直接使用することをお勧めしています。 Microsoft Entra ID を直接使用すると、共有キー認証の使用と Key Vault の設定に伴う複雑さの増大と運用上の要件の追加を回避できます。
以下の手順では、このプロセスの概要を示します。
- Azure Key Vault を作成します。
- アプリの登録またはマネージド ID を作成して、Microsoft Entra サービス プリンシパルを作成します。 作成されたプリンシパルは、Azure Key Vault へのアクセスを担当します。
- サービス プリンシパルに、Azure キー シークレット
get
アクセス許可へのアクセス権を割り当てます。 アクセス許可を設定する方法の詳細については、「Azure portal を使用して Key Vault アクセス ポリシーを割り当てる」を参照してください。 - 開発者に対して、シークレット
set
アクセス許可へのアクセス権を一時的に割り当てます。 - Key Vault シークレットに共有キーを設定し、デーモン アプリケーション用の構成としてシークレット ID を参照します。
- シークレットの
set
アクセス許可を削除します。 - Azure Key Vault から共有キー シークレットを取得するには、デーモン アプリケーションで Microsoft Entra 認証を実装します。
- 共有キーを使用して、Azure Maps REST API 要求を作成します。 以上で、デーモン アプリケーションで Key Vault から共有キーを取得することができます。
ヒント
アプリが Azure 環境でホストされている場合、マネージド ID を使用して、認証用のシークレットを管理するコストと複雑さを軽減することをお勧めします。 マネージド ID を設定する方法については、「チュートリアル: マネージド ID を使用して Key Vault を .NET の Azure Web アプリに接続する」を参照してください。
シナリオ: Microsoft Entra のロールベースのアクセス制御
Azure Maps アカウントが作成されると、Azure Maps の Client ID
の値が Azure portal の [認証の詳細] ページに表示されます。 この値は、REST API 要求に使用されるアカウントを表します。 この値をアプリケーション構成に格納し、HTTP 要求を行う前に取得する必要があります。 このシナリオの目的は、デーモン アプリケーションで Microsoft Entra ID に対する認証と、Azure Maps REST API の呼び出しを行うことができるようにすることです。
ヒント
マネージド ID コンポーネントのベネフィットが得られるように、Azure Virtual Machines、Virtual Machine Scale Sets、または App Services でホストすることをお勧めします。
Azure リソースでデーモンをホストする
Azure リソースで実行する場合、Azure マネージド ID を構成して、資格情報管理作業を低コストで最小限に抑えることができます。
アプリケーションによるマネージド ID へのアクセスを有効にするには、マネージド ID の概要に関するページを参照してください。
マネージド ID のベネフィットの一部は、次のとおりです。
- Azure システムで管理される X509 証明書の公開キー暗号化認証。
- クライアント シークレットではなく、X509 証明書を使用する Microsoft Entra セキュリティ。
- Azure によって、マネージド ID リソースに関するすべての証明書が管理および更新される。
- マネージド ID を使用すると、Azure Key Vault などのセキュリティで保護されたシークレット ストア サービスが不要になるため、資格情報の運用管理が簡略化される。
Azure 以外のリソースでデーモンをホストする
マネージド ID は、Azure 環境で実行されている場合にのみ使用できます。 そのため、デーモン アプリケーションへの Microsoft Entra アプリケーションの登録によって、サービス プリンシパルを構成する必要があります。
新しいアプリケーションの登録を作成する
アプリケーション登録を既に作成した場合は、「委任された API アクセス許可を割り当てる」に進みます。
新しいアプリケーションの登録を作成するには、次の手順に従います。
Azure portal にサインインします。
[Microsoft Entra ID] を選びます。
左側のウィンドウの [管理] で、 [アプリの登録] を選択します。
[+ 新規登録] タブを選択します。
[名前] を入力し、 [サポートされているアカウントの種類] を選択します。
[登録] を選択します。
委任された API アクセス許可を割り当てる
委任された API アクセス許可を Azure Maps に割り当てるには、次の手順に従います。
まだサインインしていない場合は、Azure portalにサインインします。
[Microsoft Entra ID] を選びます。
左側のウィンドウの [管理] で、 [アプリの登録] を選択します。
アプリケーションを選択します。
左側のメニューの [管理] で、 [API のアクセス許可] を選択します。
[アクセス許可の追加] を選択します。
[所属する組織で使用している API] タブを選択します。
検索ボックスに「Azure Maps」と入力します。
[Azure Maps] を選択します。
[Access Azure Maps](Azure Maps へのアクセス) チェック ボックスをオンにします。
[アクセス許可の追加] を選択します.
クライアント シークレットの作成または証明書の構成
サーバーまたはアプリケーションベースの認証をアプリケーションに実装するには、次の 2 つのオプションのいずれかを選択できます。
- 公開キー証明書をアップロードします。
- クライアント シークレットを作成します。
公開キー証明書のアップロード
公開キー証明書をアップロードするには、次の手順に従います。
左側のウィンドウの [管理] で、[証明書とシークレット] を選択します。
[証明書のアップロード] を選択します。
テキスト ボックスの右側にあるファイル アイコンを選択します。
.crt、 .cer、または .pem ファイルを選択し、 [追加] を選択します。
クライアント シークレットの作成
クライアント シークレットを作成するには、次の手順に従います。
左側のウィンドウの [管理] で、[証明書とシークレット] を選択します。
+ 新しいクライアント シークレットを選択します。
クライアント シークレットの説明を入力します。
[追加] を選択します。
シークレットをコピーして、Azure Key Vault などのサービスに安全に保管します。 シークレットは、この記事の「マネージド ID を使用してトークンを要求する」セクションでも使用します。
重要
証明書またはシークレットを安全に保管するには、「Azure Key Vault 開発者ガイド」を参照してください。 Microsoft Entra ID からトークンを取得するには、このシークレットを使用します。
Azure Maps に対するロールベースのアクセスをユーザーに許可する
Microsoft Entra グループまたはセキュリティ プリンシパルを 1 つまたは複数の Azure Maps ロール定義に割り当てることで、"Azure ロールベースのアクセス制御 (Azure RBAC)" を許可できます。
Azure Maps で使用できる Azure ロールの定義については、「組み込みの Azure Maps ロールの定義を表示する」のセクションを参照してください。
作成されたマネージド ID またはサービス プリンシパルに、使用可能な Azure Maps ロールを割り当てる方法の詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください
大量のユーザーの Azure Maps アプリとリソース アクセスを効率的に管理するには、「Microsoft Entra グループ」を参照してください。
重要
ユーザーがアプリケーションに対する認証を許可されるようにするには、まずそのユーザーを Microsoft Entra ID に作成する必要があります。 詳細については、Microsoft Entra ID を使用してユーザーを追加または削除するを参照してください。
ユーザーの大規模なディレクトリを効果的に管理する方法については、「Microsoft Entra ID」を参照してください。
警告
Azure Maps の組み込みロールの定義は、多くの Azure Maps REST API に対する非常に大きな承認アクセスを提供します。 API のアクセスを最小限に制限するには、カスタム ロールの定義を作成して、システム割り当て ID をカスタム ロールの定義に割り当てる方法に関する記事を参照してください。 これにより、アプリケーションが Azure Maps にアクセスするために必要な最小限の権限が有効になります。
マネージド ID を使用してトークンを要求する
ホスト リソース用にマネージド ID を構成したら、Azure SDK または REST API を使用して Azure Maps のトークンを取得します。 アクセス トークンを取得する方法については、アクセス トークンの取得に関するページを参照してください。
アプリケーションの登録を使用してトークンを要求する
アプリを登録して Azure Maps と関連付けた後、アクセス トークンを要求する必要があります。
アクセス トークンを要求するには、次の手順に従います。
まだサインインしていない場合は、Azure portalにサインインします。
[Microsoft Entra ID] を選びます。
左側のウィンドウの [管理] で、 [アプリの登録] を選択します。
アプリケーションを選択します。
[概要] ページが表示されます。 [アプリケーション (クライアント) ID] と [ディレクトリ (テナント) ID] をコピーします。
この記事では、bruno アプリケーションを使用してトークン要求を作成しますが、別の API 開発環境も使用できます。
bruno アプリを開き、[新しい要求] を選択して要求を作成します。
[新しい要求] ウィンドウで [種類] を [HTTP] に設定します。 要求の名前 (例: POST Token Request) を入力します。
[URL] ドロップダウン リストで [GET] HTTP メソッドを選択し、次の URL を入力します。
https://login.microsoftonline.com/{Tenant-ID}/oauth2/v2.0/token?response_type=token&grant_type=client_credentials&client_id={Client-ID}&client_secret={Client-Secret}&scope=https://atlas.microsoft.com/.default
Note
置換前のコード:
{Tenant-ID}
をディレクトリ (テナント) ID に{Client-ID}
をアプリケーション (クライアント) ID に{Client-Secret}
をクライアント シークレットに
実行ボタンを選択します
次の JSON 応答が表示されます。
{
"token_type": "Bearer",
"expires_in": 86399,
"ext_expires_in": 86399,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5PbzNaRHJPRFhFSzFq..."
}
認証フローの詳細については、Microsoft ID プラットフォーム上の OAuth 2.0 クライアント資格情報フローに関するページを参照してください
次のステップ
詳細な例については、以下をご覧ください。
Azure Maps アカウントにおける API 使用状況メトリックを確認します。
Microsoft Entra ID と Azure Maps を統合する方法を示すサンプルを確認します。