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 (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 Portalにログインします。
左側のメニューで「アプリの登録」をクリックします。
図1: Azure AD ポータル ホーム ページ
「新規登録」ボタンをクリックします。
図2: Azure AD アプリ登録
新しいアプリケーションを作成するには、名前とリダイレクト URI を指定して、 「登録」ボタンをクリックします。 このデモでは、 Postman を活用するため、 Postman OIDC リダイレクト URIを使用します。
図3: 新しい Azure AD アプリを作成する
アプリが作成されたので、API へのアクセスを提供するための OAuth スコープを作成する必要があります。左側のメニューの[API を公開]リンクをクリックします。
図4: APIを公開する
[スコープの追加]をクリックします。
図5: スコープを追加する
デフォルトのアプリケーション ID URI を受け入れるか、独自のアプリケーション ID URI を作成して、 [保存して続行]ボタンをクリックします。 独自のアプリケーション ID URI を作成する場合は、必要なドメインを Azure AD に登録する必要があります。
図6: アプリケーションID URL
このデモでは、範囲は Microsoft の例に基づいています。 フォームに次の情報を入力し、 「スコープの追加」ボタンをクリックします。
スコープ名: 従業員.全員を読む
誰が同意できますか?: 管理者とユーザー
管理者の同意の表示名: 従業員記録への読み取り専用アクセス
管理者の同意の説明: すべての従業員データへの読み取り専用アクセスを許可します。
ユーザー同意の表示名: 従業員記録への読み取り専用アクセス
ユーザーの同意の説明: 従業員データへの読み取り専用アクセスを許可します。
図7: スコープを追加する
次に、クライアント アプリケーションを承認する必要があります。 これを行うには、クライアント ID を取得します。左側のメニューの[概要]リンクをクリックし、アプリケーション (クライアント) IDをコピーします。
図8: アプリケーションクライアントID
「API の公開」リンクをもう一度クリックし、 「クライアント アプリケーションの追加」ボタンをクリックします。
図9: クライアントアプリケーションを追加する
アプリケーション クライアント ID をクライアント ID フィールドに貼り付け、アプリケーション ID URI の横にあるチェックボックスをオンにします。次に、アプリケーションの追加ボタンをクリックします。
図10: クライアントアプリケーションを追加する
次に、このデモでは、 Authorization Code Flowを使用して認証コードを活用するため、Postman にクライアント シークレットが必要になります。 左側のメニューの「証明書とシークレット」リンクをクリックし、 「新しいクライアント シークレット」ボタンをクリックします。
図11: 新しいクライアントシークレット
シークレットに名前を付け、有効期限をデフォルトのままにします。
図12: 秘密の名前
次に、クライアント シークレットをコピーしてパスワード ボールトに保存し、後で使用するようにします。
図13: クライアントシークレット
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 ペイロードが提供されます。 その値をコピーする必要があります。
図14: Azure AD テナントの既知のエンドポイント
JWKS URI が取得できたので、API Connectivity Manager コンソールを開き、サービス プロキシの構成に移動します。 JSON Web Token アサーションポリシーの[ポリシーの追加]をクリックします。
図15: ゲートウェイ サービス プロキシ ポリシー
次に、Azure AD テナントの JKWS URI を[URI の場所]フィールドに貼り付けて、 [追加]ボタンをクリックします。
図16: JSON Web トークンアサーションポリシー
[保存して公開]ボタンをクリックして、このポリシーを API ゲートウェイ クラスターにプッシュします。
図17: サービスゲートウェイポリシー
それでおしまい! API Connectivity Manager インスタンスは、構成されたサービス ゲートウェイで JWT アサーションを実行するように構成されました。
ここで、セットアップをテストし、期待どおりに動作することを確認します。 開始するには、Azure AD アプリケーションから取得する必要があるものがいくつかあります。
OAuth スコープを取得するには、Azure ポータルを開き、アプリの登録ページに戻ります。 次に、左側のメニューの「API を公開」リンクをクリックし、スコープのコピーシンボルをクリックします。 この値を保存して、数分後に使用できるようにします。
図18: API スコープ
OAuth 認証およびトークン エンドポイントを取得するには、左側のメニューの[概要]リンクをクリックし、 [エンドポイント]ボタンをクリックします。 その後、認証エンドポイント URI とトークン エンドポイント URI をコピーします。
図19: Azure AD アプリケーション エンドポイント
図20: Azure AD アプリケーション エンドポイント URL
Postman を開き、 [環境]メニューをクリックします。 次に、 「環境の作成」リンクをクリックします。
図21: Postman 環境の作成
環境に名前を付け、初期値列と現在の値列に値 (前の手順で保存した値) を含む 6 つの変数を追加し、 [保存]ボタンをクリックします。
図22: Postman 環境変数
Postman で新しいタブを開き、次の手順に従います。
図23: 郵便配達員の依頼
図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 コンテンツにリダイレクトされます。"