アクセスAAD保護Azure関数


資源確保は本当に重要です.あなたがAPIや他のウェブサイトを作成し、公開インターネットに公開するときは、あなたのエンドポイントを保護する必要があります.
IP制限はエンドポイントにアクセスできるクライアントを制限する一般的な方法です.しかし、クライアントがどこからでもあなたのサービスにアクセスするので、最近クライアントのすべての公共のIPを管理するのは、より難しくなっています.
マイクロソフトAzureで、Azure Active Directory(AAD)は、OAuth 2.0、OpenID Connect、SAMLなどを通してあなたのAPI/ウェブを保護します.あなたがAzureウェブApps/Azure機能のようなPAASを使うとき、ちょうど特徴を回すことはあなたにあなたの終点を保護させました.
ApacheでAADでAPIを保護し、アクセスする方法を説明します.

必要条件


Azure Active Directory(AAD)が何であるかについて、このポストは説明しません.それに興味があるなら、あなたはこれをチェックすることができます.
  • Application and service principal objects in Azure Active Directory
  • Azure Web AppsやAzure関数を作成していない場合は、最初にそれらを作成することをお勧めします.
  • Quickstart: Create an ASP.NET Core web app in Azure
  • Quickstart: Create a function in Azure using Visual Studio Code
  • Azure関数を作成する


    まず最初に、APIをホストするAzureリソースを作成する必要があります.
    Httptrigger関数を作成するQuickstart: Create a function in Azure using Visual Studio Code .
    あなた自身のAPIを数分で公開できます.
    Atureにhttptrigger関数を展開した後、curlコマンドから呼び出します.Postman またはHTTPリクエストを作成する他のツール.
    認証レベルが設定されている場合function , 機能キーを使用してAPIを呼び出すことができますcode=xxxx クエリパラメータまたはx-functions-key: xxxx リクエストヘッダで.
    詳細についてはAzure Functions HTTP trigger .

    1 .成功した郵便配達人要請

    認証を有効にする


    開発やステージング環境では、関数のアプリケーションを保護するためにファンクションキーを使用することができます.しかし、生産では、機能を呼び出すすべてのクライアントにキーを配布するときに確実に機能キーを管理することは困難です.
    一度キーが漏れている場合は、すべてのアプリケーションの設定を変更する必要があります.
    あなたのアプリケーションを確保し、認証/認証を管理するには、Azureアクティブディレクトリ(AAD)を使用することができます.
    Aadは、各アプリケーションで一意のIDを割り当て、それぞれの認証が記録されます.
    Azure Webアプリケーション/Azure機能では、AzureポータルまたはコマンドからAAD認証機能を有効にすることができます.
    AAd AuthはAzure関数のLinux消費プランには利用できません.
    参照Configure your App Service or Azure Functions app to use Azure AD login .

    This feature is currently not available on Linux Consumption plan for Azure Functions


    あなたの関数のアプリの機能を有効にした後HTTP 401 unauthrized AADがあなたの終点を保護するので.

    2 .機能をアプリケーションに不正な要求

    認証トークン


    AADの保護された関数のアプリにアクセスするためには、関数のアプリケーションのAADからのアクセストークンを取得する必要があります.
    API呼び出しの場合はBearer トークンAuthroization ヘッダ.
    Aadでクライアントアプリケーションを作成して、アプリケーションを認証する必要があります.
    あなたが使うならばAzure CLI , 以下のようなテストのクライアントAADアプリケーションを作成することができます.
    az ad sp create-for-rbac -n "TestAuthClientApp"
    
    結果をJSONとして出力します.ストアユアappId and password 関数のアプリケーションを認証する.

    イチジク3 .ACLU CLI結果
    関数のアプリケーションのアクセストークンを取得するには、Azureポータルからターゲットとしてコピー機能アプリAADのIDをコピーします.
    あなたは[認証/承認]ブレードからチェックすることができます.

    イチジク4 .機能アプリID
    呼び出しhttps://login.microsoftonline.com/<Your AAD Tenant ID>/oauth2/token アクセストークンを取得するには
    curlを使用する場合は、以下のコマンドを実行します.
    curl -X POST https://login.microsoftonline.com/<TENANT ID>/oauth2/token  \
      -F grant_type=client_credentials \
      -F resource=<Web App CLIENT ID> \
      -F client_id=<Client Application ID> \
      -F client_secret=<SECRET>
    

    機能アプリケーションを要求する前に、関数のアプリケーションのためのAADのアプリの設定を変更する必要があります.チェックAccess tokens プログラムを得るaccess_token 明示的な付与の流れを伴う.

    トークンでリクエスト機能アプリ


    機能アプリと要求Authroization:Bearer xxxx ヘッダー間の空白を必要とするヘッダーBearer and token その後、取得する必要がありますHTTP 200 OK .
    これで、関数authレベルを0から設定できますfunction to anonymous AADはAPIを保護するので.

    次のステップ


    今、あなたはAADでAPIを保護します.しかし、まだAADクライアントアプリケーションの資格情報を管理する必要があります.より安全な方法は、機能アプリが秘密なしでAzureサービスを認証するのを可能にするマネージアイデンティティを使用することです.
    マネージIDが有効になっているWebアプリケーションや機能アプリケーションなどの特定のサービスでコードが実行されている場合、Azureは自動的に認証を管理します.
    What are managed identities for Azure resources?