ブログ | NGINX

NGINX と Azure Active Directory による安全な API アクセス

NGINX-F5 水平黒タイプ RGB の一部
コーディ・グリーン サムネイル
コーディ・グリーン
2022年10月6日公開

API はアプリケーションの接続において重要な役割を果たしますが、攻撃に対しても脆弱です。 これまでのモノリシック アプリでは、セキュリティ保護すべきエントリ ポイントは 1 つしかありませんでした。 マイクロサービス アーキテクチャでは、単一のアプリが API 経由で接続された多数のマイクロサービスで構成されることが多く、各 API には数百のエンドポイントが存在する可能性があります。 これにより、API の潜在的な攻撃対象領域が大きくなり、新しい API が追加されるたびにセキュリティ境界にエントリ ポイントが作成されます。

API を保護するための戦略は数多くあります。 最も基本的なものの 1 つはアクセス制御です。 簡単に言えば、ユーザーの ID を検証し (認証、または AuthN)、ユーザーが特定のリソースにアクセスできることを確認する (承認、または AuthZ) 必要があります。 OpenID Connect (OIDC) の実装は、API に使用される最も一般的なアクセス制御アプローチの 1 つです。 F5 NGINX Management Suiteの一部であるAPI Connectivity Managerを使用すると、数分で起動して実行できます。

このチュートリアルでは、API Connectivity Manager とAzure Active Directory (Azure AD) を使用して JSON Web Token (JWT) 検証を設定し、OIDC ワークフローの承認部分を実行する方法を学習します。

OpenID Connect とは何ですか?

OpenID Connect (OIDC)は、 OAuth 2.0プロトコル上に構築された ID プロトコルです。 OIDC を使用すると、クライアントはエンドユーザーまたはデバイスの ID を検証できます。 これはアクセス制御の一部であり、認証と承認の両方が含まれます。

  • 認証は、ユーザーまたはデバイスが本人であることを確認する
  • 認証により、認証されたユーザーまたはデバイスがアクセスできる内容が決定されます。

このチュートリアルで使用する Azure AD を含め、OIDC にはさまざまな実装があります。 あるいは、API Connectivity Manager とともに、F5 BIG-IP Access Policy Manager (APM)、Okta、Auth0、Ping Identity などの他の OIDC ソリューションを使用することもできます。

始めるために必要なもの

次の前提条件を満たしていることを確認してください。

API Connectivity Manager にアクセスする必要がある場合は、NGINX Management Suite の 30 日間無料トライアルにサインアップできます。

Azure AD アプリケーションを作成する

ブラウザを開き、 Azure Portalにログインします。

左側のメニューで「アプリの登録」をクリックします。

Azure AD ポータル ホーム ページ

図1: Azure AD ポータル ホーム ページ

「新規登録」ボタンをクリックします。

Azure AD アプリ登録

図2: Azure AD アプリ登録

新しいアプリケーションを作成するには、名前リダイレクト URI を指定して、 「登録」ボタンをクリックします。 このデモでは、 Postman を活用するため、 Postman OIDC リダイレクト URIを使用します。

新しい Azure AD アプリを作成する

図3: 新しい Azure AD アプリを作成する

アプリが作成されたので、API へのアクセスを提供するための OAuth スコープを作成する必要があります。左側のメニューの[API を公開]リンクをクリックします。

APIを公開する

図4: APIを公開する

[スコープの追加]をクリックします。

スコープを追加する

図5: スコープを追加する

デフォルトのアプリケーション ID URI を受け入れるか、独自のアプリケーション ID URI を作成して、 [保存して続行]ボタンをクリックします。 独自のアプリケーション ID URI を作成する場合は、必要なドメインを Azure AD に登録する必要があります。

アプリケーションID URL

図6: アプリケーションID URL

このデモでは、範囲は Microsoft のに基づいています。 フォームに次の情報を入力し、 「スコープの追加」ボタンをクリックします。

スコープ名: 従業員.全員を読む
誰が同意できますか?: 管理者とユーザー
管理者の同意の表示名: 従業員記録への読み取り専用アクセス
管理者の同意の説明: すべての従業員データへの読み取り専用アクセスを許可します。
ユーザー同意の表示名: 従業員記録への読み取り専用アクセス
ユーザーの同意の説明: 従業員データへの読み取り専用アクセスを許可します。

スコープを追加する

図7: スコープを追加する

次に、クライアント アプリケーションを承認する必要があります。 これを行うには、クライアント ID を取得します。左側のメニューの[概要]リンクをクリックし、アプリケーション (クライアント) IDをコピーします

アプリケーションクライアントID

図8: アプリケーションクライアントID

「API の公開」リンクをもう一度クリックし、 「クライアント アプリケーションの追加」ボタンをクリックします。

クライアントアプリケーションを追加する

図9: クライアントアプリケーションを追加する

アプリケーション クライアント ID をクライアント ID フィールドに貼り付け、アプリケーション ID URI の横にあるチェックボックスをオンにします。次に、アプリケーションの追加ボタンをクリックします。

クライアントアプリケーションを追加する

図10: クライアントアプリケーションを追加する

次に、このデモでは、 Authorization Code Flowを使用して認証コードを活用するため、Postman にクライアント シークレットが必要になります。 左側のメニューの「証明書とシークレット」リンクをクリックし、 「新しいクライアント シークレット」ボタンをクリックします。

新しいクライアントシークレット

図11: 新しいクライアントシークレット

シークレットに名前を付け、有効期限をデフォルトのままにします。

秘密の名前

図12: 秘密の名前

次に、クライアント シークレットをコピーしてパスワード ボールトに保存し、後で使用するようにします。

クライアントシークレット

図13: クライアントシークレット

API 接続マネージャーで JWT アサーションを構成する

Azure AD アプリケーションが構成されたので、API Connectivity Manager で API ゲートウェイ クラスターを設定し、定義したサービスに対して JSON Web トークン アサーションを実行できます。 この手順では、Azure AD テナントのJSON Web Key (JWK) セットの URI を決定する必要があります。

JWKS URIは以下から取得できます。 Azure AD テナントの既知のエンドポイント:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration

このページでは、 jwks_uriキーを含む JSON ペイロードが提供されます。 その値をコピーする必要があります。

Azure AD テナントの既知のエンドポイント

図14: Azure AD テナントの既知のエンドポイント

JWKS URI が取得できたので、API Connectivity Manager コンソールを開き、サービス プロキシの構成に移動します。 JSON Web Token アサーションポリシーの[ポリシーの追加]をクリックします。

ゲートウェイ サービス プロキシ ポリシー

図15: ゲートウェイ サービス プロキシ ポリシー

次に、Azure AD テナントの JKWS URI を[URI の場所]フィールドに貼り付けて、 [追加]ボタンをクリックします。

JSON Web トークンアサーションポリシー

図16: JSON Web トークンアサーションポリシー

[保存して公開]ボタンをクリックして、このポリシーを API ゲートウェイ クラスターにプッシュします。

サービスゲートウェイポリシー

図17: サービスゲートウェイポリシー

それでおしまい! API Connectivity Manager インスタンスは、構成されたサービス ゲートウェイで JWT アサーションを実行するように構成されました。

Postman によるテスト

ここで、セットアップをテストし、期待どおりに動作することを確認します。 開始するには、Azure AD アプリケーションから取得する必要があるものがいくつかあります。

  • アプリケーション クライアント シークレット (以前に保存したもの)
  • OAuth スコープ
  • OAuth 認証エンドポイント
  • OAuth トークンエンドポイント

OAuth スコープを取得するには、Azure ポータルを開き、アプリの登録ページに戻ります。 次に、左側のメニューの「API を公開」リンクをクリックし、スコープのコピーシンボルクリックします。 この値を保存して、数分後に使用できるようにします。

API スコープ

図18: API スコープ

OAuth 認証およびトークン エンドポイントを取得するには、左側のメニューの[概要]リンクをクリックし、 [エンドポイント]ボタンをクリックします。 その後、認証エンドポイント URI とトークン エンドポイント URI をコピーします。

Azure AD アプリケーション エンドポイント

図19: Azure AD アプリケーション エンドポイント

Azure AD アプリケーション エンドポイント URL

図20: Azure AD アプリケーション エンドポイント URL

Postman を開き、 [環境]メニューをクリックします。 次に、 「環境の作成」リンクをクリックします。

Postman 環境の作成

図21: Postman 環境の作成

環境に名前を付け、初期値列と現在の値列に値 (前の手順で保存した値) を含む 6 つの変数を追加し、 [保存]ボタンをクリックします。

  • クライアントID : Azure AD アプリケーションのクライアント ID
  • クライアントシークレット: Azure AD アプリケーションのクライアント シークレット
  • 認証URL : Azure AD テナントの OAuth 認証 URL
  • トークンURL : Azure AD テナントの OAuth トークン URL
  • テナントID : Azure AD ディレクトリ (テナント) ID
  • 範囲: Azure AD アプリケーションの API スコープとアプリケーション ID URL

Postman 環境変数

図22: Postman 環境変数

Postman で新しいタブを開き、次の手順に従います。

  • 右上の環境をACMに変更します
  • アドレスバーにAPI URLを追加します
  • 認証タブをクリックします
  • タイプをOAuth 2.0に変更します
  • Auth 構成を下にスクロールし、次の変数を設定します。
    • 認証 URL: {{auth_url}}
    • アクセストークン URL: {{token_url}}
    • クライアント ID: {{client_id}}
    • クライアントシークレット: {{client_secret}}
  • 「新しいアクセストークンを取得」ボタンをクリックします

郵便配達員の依頼

図23: 郵便配達員の依頼

Postman 認証設定

図24: Postman 認証設定

ブラウザ ウィンドウが開き、Azure AD 資格情報を使用してログインするように求められます。 認証に成功すると、Postman にリダイレクトされ、次のウィンドウが表示されます。 「トークンの使用」ボタンをクリックします。

郵便配達員使用トークン

図25: 郵便配達員使用トークン

OAuth アクセス トークンを取得したので、ようやく API 呼び出しを行うことができます。 [保存]ボタンをクリックし、 [送信]ボタンをクリックします。

すべてが正しく構成されている場合は、200 OK 応答が表示されます。

郵便配達員のリクエスト成功

図26: 郵便配達員のリクエスト成功

結論

これで、API Connectivity Manager が Azure AD OAuth アクセス トークンを使用して API を保護するようになりました。 次の手順では、追加の OAuth スコープを追加し、API Connectivity Manager で API ゲートウェイ クラスターを構成して、それらのスコープを保護された API に渡します。ただし、これは別の投稿で説明するトピックです。

今すぐ始めましょう

API Connectivity Manager とInstance Managerを含むNGINX Management Suite の30 日間無料トライアルを開始します。

この投稿のバージョンは、最初にcodygreen.comに掲載されました。 著者の許可を得て編集し、ここに転載します。


「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"