次の方法で共有


Azure Identity ライブラリを使用して Azure サービスに Go アプリを認証する

アプリでは、Azure ID ライブラリを使用して Microsoft Entra ID に対する認証を行うことができます。この ID は、Azure サービスとリソースへのアクセスを許可します。 この認証要件は、アプリが Azure にデプロイされているか、オンプレミスでホストされているか、開発者ワークステーションでローカルに実行されているかに関係なく適用されます。 以降のセクションでは、Azure SDK クライアント ライブラリを使用する際に、さまざまな環境で Microsoft Entra ID に対してアプリを認証するための推奨される方法について説明します。

Microsoft Entra ID を使用したトークンベースの認証は、接続文字列やキーベースのオプションを使用するのではなく、Azure にアプリを認証するための推奨される方法です。 Go 用 Azure Identity クライアント モジュールは、トークンベースの認証を提供し、アプリがローカル、Azure、またはオンプレミス サーバーのどちらで実行されているかに関係なく、アプリが Azure リソースに対して認証できるようにします。

トークン ベースの認証の利点

トークンベースの認証は、接続文字列よりも次の利点を提供します。

  • トークンベースの認証では、Azure リソースへのアクセスを意図した特定のアプリのみがこれを行うことができますが、接続文字列を持つすべてのアプリは Azure リソースに接続できます。
  • トークンベースの認証を使用すると、アプリで必要な特定のアクセス許可のみに Azure リソース アクセスをさらに制限できます。 この方法は、 最小特権の原則に従います。 これに対し、接続文字列は Azure リソースに対する完全な権限を付与します。
  • トークン ベースの認証に マネージド ID を 使用する場合、Azure は管理機能を自動的に処理するため、シークレットのセキュリティ保護やローテーションなどのタスクについて心配する必要はありません。 この機能により、侵害される可能性のある接続文字列やアプリケーション シークレットがないため、アプリの安全性が高くなります。
  • 接続文字列は機能的には資格情報と同等であり、偶発的な漏洩を防ぐために特別な処理が必要です。 それらを安全に (たとえば Azure Key Vault に) 格納し、アプリケーションにハードコーディングしたり、ソース管理にコミットしたりしないでください。 Microsoft Secure Future Initiative (SFI) では、接続文字列と同様の有効期間の長いシークレットを使用することは禁止されています。これは、慎重に管理されていない場合にアプリケーションを侵害するために使用できるためです。
  • Azure ID ライブラリは、Microsoft Entra トークンを取得して管理します。

接続文字列の使用を、トークン ベースの認証がオプションではないシナリオ、初期の概念実証アプリ、または運用環境や機密データにアクセスしない開発プロトタイプに限定します。 可能な場合は、Azure Id ライブラリの資格情報の種類を使用して、Azure リソースに対する認証を行います。

異なる環境での認証

アプリが Azure リソースに対する認証に使用するトークン ベースの認証の種類は、アプリの実行場所によって異なります。 次の図は、さまざまなシナリオと環境に関するガイダンスを示しています。

アプリの実行場所に応じて、推奨されるトークンベースの認証戦略を示す図です。

アプリの使用環境によってお勧めの認証方法が異なります。

  • Azure でホスト: アプリは、マネージド ID を使用して Azure リソースに対して認証する必要があります。 詳細については、 サーバー環境での認証を参照してください。
  • 開発中にローカルで実行する: アプリは、ローカル開発用のアプリケーション サービス プリンシパルまたは開発者の Azure 資格情報を使用して Azure に対して認証できます。 詳細については、 ローカル開発時の認証を参照してください。
  • オンプレミスでホストされる: アプリは、アプリケーション サービス プリンシパルを使用して、または Azure Arc の場合はマネージド ID を使用して Azure リソースに対して認証する必要があります。 詳細については、 サーバー環境での認証を参照してください。

Azure でホストされるアプリの認証

Azure でアプリをホストする場合、資格情報を管理しなくても、マネージド ID を使用して Azure リソースに対する認証を行うことができます。 マネージド ID には、ユーザー割り当て ID とシステム割り当て ID の 2 種類があります。

ユーザー割り当てマネージド ID を使用する

ユーザー割り当てマネージド ID は、スタンドアロンの Azure リソースとして作成します。 1 つ以上の Azure リソースに割り当てて、それらのリソースが同じ ID とアクセス許可を共有できるようにします。 ユーザー割り当てマネージド ID を使用して認証するには、ID を作成して Azure リソースに割り当て、クライアント ID、リソース ID、またはオブジェクト ID を指定して、認証にこの ID を使用するようにアプリを構成します。

システム割り当てマネージド ID を使用する

システム割り当てマネージド ID は、Azure リソースで直接有効にします。 ID はそのリソースのライフサイクルに関連付けられ、リソースが削除されると自動的に削除されます。 システム割り当てマネージド ID を使用して認証するには、Azure リソースで ID を有効にしてから、認証にこの ID を使用するようにアプリを構成します。

ローカル開発時の認証

ローカル開発時には、開発者の資格情報またはサービス プリンシパルを使用して、Azure リソースに対して認証を行うことができます。 この認証方法を使用すると、アプリの認証ロジックを Azure にデプロイせずにテストできます。

開発者の資格情報を使用する

独自の Azure 資格情報を使用して、ローカル開発時に Azure リソースに対する認証を行うことができます。 通常は、Azure CLI などの開発ツールを使用します。これにより、Azure サービスにアクセスするために必要なトークンをアプリに提供できます。 この方法は便利ですが、開発目的でのみ使用してください。

サービス プリンシパルを使用する

アプリを表すために Microsoft Entra テナントにサービス プリンシパルを作成し、それを使用して Azure リソースに対する認証を行います。 ローカル開発時にサービス プリンシパルの資格情報を使用するようにアプリを構成できます。 この方法は、開発者の資格情報を使用するよりも安全であり、運用環境でのアプリの認証方法に近いです。 ただし、シークレットが必要なため、マネージド ID を使用するよりも理想的ではありません。

オンプレミスでホストされているアプリの認証

オンプレミスでホストされているアプリの場合は、サービス プリンシパルを使用して Azure リソースに対する認証を行うことができます。 この方法では、Microsoft Entra ID でサービス プリンシパルを作成し、必要なアクセス許可を割り当て、資格情報を使用するようにアプリを構成します。 この方法を使用すると、オンプレミス アプリは Azure サービスに安全にアクセスできます。