Microsoft Entra 統合による安全なハイブリッド アクセス

Microsoft Entra ID では、アプリケーションのセキュリティを維持するのに役立つ最新の認証プロトコルがサポートされています。 ただし、多くのビジネス アプリケーションは保護された企業ネットワークの内部で動作し、レガシの認証方法が使用されているものもあります。 企業はゼロ トラスト戦略を立て、ハイブリッドおよびクラウド環境のサポートしているので、アプリを Microsoft Entra ID に接続し、レガシ アプリケーションに認証を提供するソリューションがあります。

詳細情報: ゼロ トラスト セキュリティ

Microsoft Entra ID では、最新のプロトコルがネイティブにサポートされています。

  • Security Assertion Markup Language (SAML)
  • Web サービス フェデレーション (WS-Fed)
  • OpenID Connect (OIDC)

Microsoft Entra アプリケーション プロキシでは、Kerberos とヘッダーベースの認証がサポートされています。 Secure Shell (SSH)、(Microsoft Windows NT LAN Manager) NTLM、ライトウェイト ディレクトリ アクセス プロトコル (LDAP)、Cookie などのその他のプロトコルはサポートされていません。 ただし、独立系ソフトウェア ベンダー (ISV) は、これらのアプリケーションを Microsoft Entra ID に接続するためのソリューションを作成できます。

ISV は、顧客がサービスとしてのソフトウェア (SaaS) アプリケーションを検出して、Microsoft Entra ID に移行するのを支援できます。 彼らはレガシの認証方法を使用するアプリを Microsoft Entra ID に接続することもできます。 顧客は Microsoft Entra ID に統合して、アプリ管理の簡素化とゼロ トラスト原則の実装を行うことができます。

ソリューションの概要

構築するソリューションには次のものを含めることができます。

  • アプリの検出 - 多くの場合、顧客は使用しているアプリケーションすべてを把握してはいません
    • アプリケーションの検出でアプリケーションを検出し、アプリと Microsoft Entra ID の統合を促進します
  • アプリの移行 - Microsoft Entra 管理センターを使用せずに、アプリを Microsoft Entra ID と統合するワークフローを作成します
    • 顧客が現在使用しているアプリを統合します
  • レガシ認証のサポート - レガシ認証方法とシングル サインオン (SSO) を使用してアプリを接続します
  • 条件付きアクセス - 顧客が Microsoft Entra 管理センターを使用せずに、ソリューション内のアプリに Microsoft Entra ポリシーを適用できるようにします

詳細情報: 条件付きアクセスとは

技術的な考慮事項と推奨事項については、以降のセクションを参照してください。

Azure Marketplace へのアプリケーションの発行

Azure Marketplace は、IT 管理者にとって信頼できるアプリケーション ソースです。 アプリケーションは Microsoft Entra ID と互換性があり、SSO をサポートしており、ユーザー プロビジョニングを自動化し、自動アプリ登録を使用して顧客テナントに統合します。

アプリケーションを Microsoft Entra ID と事前に統合して、SSO や自動プロビジョニングをサポートできます。 「Microsoft Entra アプリケーション ギャラリーでのアプリケーションの公開の要求を送信する」を参照してください。

信頼された発行元であると顧客がわかるように、確認済みの発行元になることをお勧めします。 「発行者の確認」を参照してください。

IT 管理者のシングル サインオンを有効にする

ソリューションに対する IT 管理者の SSO を有効にする方法はいくつかあります。 「シングル サインオンのデプロイを計画する」の SSO のオプションに関する記事を参照してください。

Microsoft Graph は OIDC/OAuth を使用しています。 顧客は OIDC を使用してソリューションにサインインします。 Microsoft Graph とやりとりするには、Microsoft Entra ID が発行する JSON Web トークン (JWT) を使用します。 「Microsoft ID プラットフォームでの OpenID Connect」を参照してください。

IT 管理者の SSO に SAML を使用するソリューションの場合、SAML トークンでソリューションと Microsoft Graph とのやり取りはできません。 IT 管理者の SSO には SAML を使用できますが、ソリューションで Microsoft Entra ID との OIDC 統合がサポートされている必要があります。これにより、Microsoft Entra ID から JWT を取得して、Microsoft Graph とのやりとりできます。 「Microsoft ID プラットフォームでの SAML プロトコルの使用方法」を参照してください。

次のいずれかの SAML アプローチを利用できます。

クライアント資格情報の付与タイプを使用します。これには、顧客がクライアント ID とシークレットを入力できるようにするソリューションが必要です。 ソリューションでは、この情報を格納する必要もあります。 Microsoft Entra ID から JWT を取得し、それを使用して Microsoft Graph とやりとりします。 「トークンを取得する」を参照してください。 Microsoft Entra テナントにアプリケーションの登録を作成する方法に関する顧客ドキュメントを用意することをお勧めします。 エンドポイント、URI、およびアクセス許可を含めてください。

Note

アプリケーションを IT 管理者またはユーザーの SSO に使用するには、事前に顧客 IT 管理者が自分のテナント内でそのアプリケーションに同意する必要があります。 「アプリケーションに対してテナント全体の管理者の同意を付与する」を参照してください。

認証フロー

ソリューションの認証フローでは、次のシナリオがサポートされています。

  • 顧客 IT 管理者がソリューションを管理するために SSO を使用してサインインする
  • 顧客 IT 管理者がソリューションを使用して、Microsoft Graph によってアプリケーションを Microsoft Entra ID と統合する
  • ユーザーが、ソリューションと Microsoft Entra ID で保護されたレガシ アプリケーションにサインインする

顧客 IT 管理者がソリューションにシングル サインオンする

顧客 IT 管理者がサインインする際、ソリューションでは SSO に SAML または OIDC を使用できます。 IT 管理者は Microsoft Entra 資格情報を使用してソリューションにサインインすることをお勧めします。これにより、現在のセキュリティ制御を使用できるようになります。 SAML または OIDC を介した SSO の場合は Microsoft Entra ID と統合します。

次の図は、ユーザー認証フローを示しています。

Diagram of an administrator redirected to Microsoft Entra ID to sign in, then redirected to the solution.

  1. IT 管理者が自分の Microsoft Entra 資格情報を使用してソリューションにサインインします
  2. ソリューションによって IT 管理者は SAML または OIDC サインイン要求と共に Microsoft Entra ID にリダイレクトされます
  3. Microsoft Entra によって IT 管理者は認証され、ソリューション内で認可される SAML トークンまたは JWT と共にソリューションにリダイレクトされます

IT 管理者がアプリケーションを Microsoft Entra ID と統合する

IT 管理者は、ソリューションを使用してアプリケーションを Microsoft Entra ID と統合します。このソリューションは、Microsoft Graph を使用してアプリケーションの登録と Microsoft Entra 条件付きアクセス ポリシーを作成します。

次の図は、ユーザー認証フローを示しています。

Diagram of interactions between the IT administrator, Microsoft Entra ID, your solution, and Microsoft Graph.

  1. IT 管理者が自分の Microsoft Entra 資格情報を使用してソリューションにサインインします
  2. ソリューションによって IT 管理者は SAML または OIDC サインイン要求と共に Microsoft Entra ID にリダイレクトされます
  3. Microsoft Entra によって IT 管理者は認証され、認可用の SAML トークンまたは JWT と共にソリューションにリダイレクトされます
  4. IT 管理者がアプリケーションを Microsoft Entra ID と統合すると、このソリューションは JWT で Microsoft Graph を呼び出してアプリケーションを登録するか、Microsoft Entra 条件付きアクセス ポリシーを適用します

ユーザーがアプリケーションにサインインする

ユーザーがアプリケーションにサインインするとき、OIDC または SAML を使用します。 Microsoft Graph または Microsoft Entra で保護された API とやりとりする必要があるアプリケーションは、OICD を使うように構成することをお勧めします。 この構成により、JWT が Microsoft Graph とのやり取りに適用されるようになります。 アプリケーションで Microsoft Graph、または Microsoft Entra で保護された API とやりとりする必要がない場合は、SAML を使用します。

次の図は、ユーザー認証フローを示しています。

Diagram of interactions between the user, Microsoft Entra ID, your solution, and the app.

  1. ユーザーがアプリケーションにサインインします
  2. ソリューションによってユーザーは SAML または OIDC サインイン要求と共に Microsoft Entra ID にリダイレクトされます
  3. Microsoft Entra によってユーザーは認証され、認可用の SAML トークンまたは JWT と共にソリューションにリダイレクトされます
  4. ソリューションでは、アプリケーション プロトコルを使用することで要求が許可されます

Microsoft Graph API

次の API を使用することをお勧めします。 Microsoft Entra ID を使用して、委任されたアクセス許可またはアプリケーションのアクセス許可を構成します。 このソリューションには、委任されたアクセス許可を使用します。

  • アプリケーション テンプレート API - Azure Marketplace で、この API を使用して一致するアプリケーション テンプレートを見つけます
    • 必要なアクセス許可: Application.Read.All
  • アプリケーションの登録 API - ユーザーがソリューションでセキュリティ保護されたアプリケーションにサインインするために OIDC または SAML アプリケーションの登録を作成します
    • 必要なアクセス許可: Application.Read.All、Application.ReadWrite.All
  • サービス プリンシパル API: アプリを登録した後、サービス プリンシパル オブジェクトを更新して、SSO プロパティを設定します
    • 必要なアクセス許可: Application.ReadWrite.All、Directory.AccessAsUser.All、AppRoleAssignment.ReadWrite.All (割り当て用)
  • 条件付きアクセス API - Microsoft Entra 条件付きアクセス ポリシーをユーザー アプリケーションに適用します
    • 必要なアクセス許可: Policy.Read.All、Policy.ReadWrite.ConditionalAccess、Application.Read.All

詳細情報: Microsoft Graph API を使用する

Microsoft Graph API のシナリオ

アプリケーションの登録の実装、レガシ アプリケーションの接続、条件付きアクセス ポリシーの有効化を行うには、次の情報を使用します。 管理者の同意の自動化、トークン署名証明書の取得、ユーザーとグループの割り当てについて説明します。

Microsoft Graph API を使用してアプリを Microsoft Entra ID に登録する

Azure Marketplace 内のアプリを追加する

顧客が使用する一部のアプリケーションは、Azure Marketplace にあります。 顧客のテナントにアプリケーションを追加するソリューションを作成できます。 Microsoft Graph API で次の例を使用して、Azure Marketplace を検索してテンプレートを見つけます。

Note

アプリケーション テンプレート API では、表示名の大文字と小文字は区別されます。

Authorization: Required with a valid Bearer token
Method: Get

https://graph.microsoft.com/v1.0/applicationTemplates?$filter=displayname eq "Salesforce.com"

API 呼び出しから一致するものが見つかったら、ID を取得します。 次の API 呼び出しを行い、JSON 本文内にアプリケーションの表示名を指定します。

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/cd3ed3de-93ee-400b-8b19-b61ef44a0f29/instantiate
{
    "displayname": "Salesforce.com"
}

API 呼び出しを行った後、サービス プリンシパル オブジェクトを生成します。 今後の API 呼び出しで使用するアプリケーション ID とサービス プリンシパル ID を取得します。

SAML プロトコルとログイン URL を指定して、サービス プリンシパル オブジェクトに対して PATCH を実行します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "preferredSingleSignOnMode":"saml",
    "loginURL": "https://www.salesforce.com"
}

リダイレクト URI と識別子 URI を指定して、アプリケーション オブジェクトに対して PATCH を実行します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/54c4806b-b260-4a12-873c-967116983792
{
    "web": {
    "redirectUris":["https://www.salesforce.com"]},
    "identifierUris":["https://www.salesforce.com"]
}

Azure Marketplace にないアプリを追加する

Azure Marketplace に一致するものがない場合や、カスタム アプリケーションを統合する場合は、テンプレート ID 8adf8e6e-67b2-4cf2-a259-e3dc5476c621 を使用して Microsoft Entra ID にカスタム アプリケーションを登録します。 そして、次の API 呼び出しを行い、JSON 本文内にアプリケーション表示名を指定します。

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/8adf8e6e-67b2-4cf2-a259-e3dc5476c621/instantiate
{
    "displayname": "Custom SAML App"
}

API 呼び出しを行った後、サービス プリンシパル オブジェクトを生成します。 今後の API 呼び出しで使用するアプリケーション ID とサービス プリンシパル ID を取得します。

SAML プロトコルとログイン URL を指定して、サービス プリンシパル オブジェクトに対して PATCH を実行します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "preferredSingleSignOnMode":"saml",
    "loginURL": "https://www.samlapp.com"
}

リダイレクト URI と識別子 URI を指定して、アプリケーション オブジェクトに対して PATCH を実行します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/54c4806b-b260-4a12-873c-967116983792
{
    "web": {
    "redirectUris":["https://www.samlapp.com"]},
    "identifierUris":["https://www.samlapp.com"]
}

Microsoft Entra シングル サインオンの使用

SaaS アプリケーションが Microsoft Entra ID に登録されたら、アプリケーションで ID プロバイダー (IdP) として Microsoft Entra ID の使用を開始する必要があります。

レガシ認証を使用してアプリを Microsoft Entra ID に接続する

ソリューションにより、サポートされていないアプリケーションでも、顧客が SSO と Microsoft Entra 機能を使用できるようにすることが可能です。 レガシ プロトコルによるアクセスを許可するには、アプリケーションで Microsoft Entra ID を呼び出してユーザーを認証し、Microsoft Entra 条件付きアクセス ポリシーを適用します。 コンソールからこの統合を有効にしてください。 ソリューションと Microsoft Entra ID の間で SAML または OIDC アプリケーションの登録を作成します。

SAML のアプリケーションの登録を作成する

カスタム アプリケーション テンプレート ID の 8adf8e6e-67b2-4cf2-a259-e3dc5476c621 を使用します。 そして、次の API 呼び出しを行い、JSON 本文内に表示名を指定します。

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/8adf8e6e-67b2-4cf2-a259-e3dc5476c621/instantiate
{
    "displayname": "Custom SAML App"
}

API 呼び出しを行った後、サービス プリンシパル オブジェクトを生成します。 今後の API 呼び出しで使用するアプリケーション ID とサービス プリンシパル ID を取得します。

SAML プロトコルとログイン URL を指定して、サービス プリンシパル オブジェクトに対して PATCH を実行します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "preferredSingleSignOnMode":"saml",
    "loginURL": "https://www.samlapp.com"
}

リダイレクト URI と識別子 URI を指定して、アプリケーション オブジェクトに対して PATCH を実行します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/54c4806b-b260-4a12-873c-967116983792
{
    "web": {
    "redirectUris":["https://www.samlapp.com"]},
    "identifierUris":["https://www.samlapp.com"]
}

OIDC のアプリケーションの登録を作成する

カスタム アプリケーション向けテンプレート ID の 8adf8e6e-67b2-4cf2-a259-e3dc5476c621 を使用します。 次の API 呼び出しを行い、JSON 本文内に表示名を指定します。

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/applicationTemplates/8adf8e6e-67b2-4cf2-a259-e3dc5476c621/instantiate
{
    "displayname": "Custom OIDC App"
}

API 呼び出しから、今後の API 呼び出しで使用するアプリケーション ID とサービス プリンシパル ID を取得します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: application/json

https://graph.microsoft.com/v1.0/applications/{Application Object ID}
{
    "web": {
    "redirectUris":["https://www.samlapp.com"]},
    "identifierUris":["[https://www.samlapp.com"],
    "requiredResourceAccess": [
    {
        "resourceAppId": "00000003-0000-0000-c000-000000000000",
        "resourceAccess": [
        {
            "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182",
            "type": "Scope"
        },
        {
            "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
            "type": "Scope"
        },
        {
            "id": "37f7f235-527c-4136-accd-4a02d197296e",
            "type": "Scope"
        }]
    }]
}

Note

resourceAccess ノード内の API のアクセス許可により、そのアプリケーションに openid、User.Read、offline_access アクセス許可 (これはサインインを有効にします) が付与されます。 「Microsoft Graph のアクセス許可の概要」を参照してください。

条件付きアクセス ポリシーを適用する

顧客とパートナーは Microsoft Graph API を使用して、条件付きアクセス ポリシーをアプリケーションごとに作成したり、適用したりできます。 パートナーの場合、顧客は Microsoft Entra 管理センターを使用せずにソリューションからこれらのポリシーを適用できます。 Microsoft Entra 条件付きアクセス ポリシーを適用するには、次の 2 つのオプションがあります。

条件付きアクセス ポリシーを使用する

条件付きアクセス ポリシーの一覧を取得するには、次のクエリを実行します。 変更するポリシー オブジェクト ID を取得します。

Authorization: Required with a valid Bearer token
Method:GET

https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies

そのポリシーに対して PATCH を実行するには、JSON 本文内の includeApplications のスコープにそのアプリケーション オブジェクト ID を含めます。

Authorization: Required with a valid Bearer token
Method: PATCH

https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies/{policyid}
{
    "displayName":"Existing Conditional Access Policy",
    "state":"enabled",
    "conditions": 
    {
        "applications": 
        {
            "includeApplications":[
                "00000003-0000-0ff1-ce00-000000000000", 
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ] 
        }
    },
    "grantControls": 
    {
        "operator":"OR",
        "builtInControls":[
            "mfa"
        ]
    }
}

新しい条件付きアクセス ポリシーを作成する

JSON 本文内の includeApplications のスコープにそのアプリケーション オブジェクト ID を追加します。

Authorization: Required with a valid Bearer token
Method: POST

https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies/
{
    "displayName":"New Conditional Access Policy",
    "state":"enabled",
    "conditions": 
    {
        "applications": {
            "includeApplications":[
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ]
        }
    },
    "grantControls": {
        "operator":"OR",
        "builtInControls":[
            "mfa"
        ]
    }
}

新しい Microsoft Entra 条件付きアクセス ポリシーを作成する場合は、「条件付きアクセス: プログラムによるアクセス」を参照してください。

#Policy Template for Requiring Compliant Device

{
    "displayName":"Enforce Compliant Device",
    "state":"enabled",
    "conditions": {
        "applications": {
            "includeApplications":[
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ]
        }
    },
    "grantControls": {
        "operator":"OR",
        "builtInControls":[
            "compliantDevice",
            "domainJoinedDevice"
        ]
    }
}

#Policy Template for Block

{
    "displayName":"Block",
    "state":"enabled",
    "conditions": {
        "applications": {
            "includeApplications":[
                "{Application Object ID}"
            ]
        },
        "users": {
            "includeUsers":[
                "All"
            ] 
        }
    },
    "grantControls": {
        "operator":"OR",
        "builtInControls":[
            "block"
        ]
    }
}

顧客がソリューションから Microsoft Entra ID にアプリケーションを追加している場合は、Microsoft Graph を使用して管理者の同意を自動化できます。 API 呼び出しで作成したアプリケーション サービス プリンシパル オブジェクト ID と、顧客のテナントからの Microsoft Graph のサービス プリンシパル オブジェクト ID が必要です。

次の API 呼び出しを行って、Microsoft Graph のサービス プリンシパル オブジェクト ID を取得します。

Authorization: Required with a valid Bearer token
Method:GET

https://graph.microsoft.com/v1.0/serviceprincipals/?$filter=appid eq '00000003-0000-0000-c000-000000000000'&$select=id,appDisplayName

管理者の同意を自動化するには、次の API 呼び出しを行います。

Authorization: Required with a valid Bearer token
Method: POST
Content-type: application/json

https://graph.microsoft.com/v1.0/oauth2PermissionGrants
{
    "clientId":"{Service Principal Object ID of Application}",
    "consentType":"AllPrincipals",
    "principalId":null,
    "resourceId":"{Service Principal Object ID Of Microsoft Graph}",
    "scope":"openid user.read offline_access}"
}

トークン署名証明書を取得する

トークン署名証明書の公開部分を取得するには、そのアプリケーションの Microsoft Entra メタデータ エンドポイントから GET を使用します。

Method:GET

https://login.microsoftonline.com/{Tenant_ID}/federationmetadata/2007-06/federationmetadata.xml?appid={Application_ID}

ユーザーとグループの割り当て

アプリケーションを Microsoft Entra ID に発行した後、アプリをユーザーとグループに割り当てて、マイ アプリ ポータルに表示されるようにすることができます。 この割り当ては、アプリケーションを作成したときに生成されたサービス プリンシパル オブジェクトに対するものです。 「マイ アプリ ポータルの概要」を参照してください。

アプリケーションが関連付けられている可能性がある AppRole インスタンスを取得します。 通常、SaaS アプリケーションにはさまざまな AppRole インスタンスが関連付けられています。 通常、カスタム アプリケーションには既定の AppRole インスタンスが 1 つあります。 割り当てる AppRole インスタンス ID を取得します。

Authorization: Required with a valid Bearer token
Method:GET

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27

Microsoft Entra ID から、アプリケーションに割り当てるユーザーまたはグループのオブジェクト ID を取得します。 前述の API 呼び出しからアプリ ロール ID を取得し、サービス プリンシパルに対する PATCH 本文と共に送信します。

Authorization: Required with a valid Bearer token
Method: PATCH
Content-type: servicePrincipal/json

https://graph.microsoft.com/v1.0/servicePrincipals/3161ab85-8f57-4ae0-82d3-7a1f71680b27
{
    "principalId":"{Principal Object ID of User -or- Group}",
    "resourceId":"{Service Principal Object ID}",
    "appRoleId":"{App Role ID}"
}

パートナーシップ

ネットワークおよびデリバリー コントローラーを使用しながらレガシ アプリケーションの保護を促進するために、Microsoft は次のアプリケーション デリバリー コントローラー (ADC) プロバイダーとパートナーシップを結んでいます。

次の VPN ソリューション プロバイダーは Microsoft Entra ID と接続して、SSO や多要素認証 (MFA) などの最新の認証および認可方法を利用できるようにします。

次の SDP (Software Defined Perimeter) ソリューション プロバイダーは、SSO や MFA などの認証および認可方法を利用できるように Microsoft Entra ID と接続します。