次の方法で共有


Microsoft Graph を使用してMicrosoft Entra アプリケーションを管理する

Microsoft Entra アプリケーションを使用すると、Microsoft クラウド内のリソースに安全にアクセスできます。 Microsoft Graph には、これらのアプリケーションとそれに関連するサービス プリンシパルをプログラムで作成、構成、管理できる統合 API エンドポイントが用意されています。 この記事では、アプリの登録、プロパティの更新、アクセス許可の割り当て、資格情報の管理など、Microsoft Graph で一般的なアプリ管理タスクを自動化する方法について説明します。

前提条件

  • API 操作をテストするには、テナントでアプリケーションを作成および管理できるアカウントで Graph エクスプローラーにサインインします。

アプリケーションをMicrosoft Entra IDに登録する

必要な displayName プロパティを指定してアプリを作成します。 要求では、他のプロパティに既定値が使用されます。

最小特権委任アクセス許可: Application.ReadWrite.All

POST https://graph.microsoft.com/v1.0/applications
Content-type: application/json

{
  "displayName": "My application"
}

要求は、応答本文にアプリケーション オブジェクトを含む 201 Created 応答を返します。 アプリケーションは、テナント内のアプリに固有の ID と、Microsoft Entra ID エコシステムでグローバルに一意の appId を取得します。

アプリケーションのサービス プリンシパルを作成する

最小特権委任アクセス許可: Application.ReadWrite.All

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json

{
  "appId": "fc876dd1-6bcb-4304-b9b6-18ddf1526b62"
}

要求は、応答本文にサービス プリンシパル オブジェクトを含む 201 Created 応答を返します。

アプリケーションまたはサービス プリンシパル オブジェクトのアドレス指定

ID でアプリケーションまたはサービス プリンシパルを参照します。 この構文では、GET、PATCH、および DELETE HTTP メソッドがサポートされています。

https://graph.microsoft.com/v1.0/applications/{applicationObjectId}
https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalObjectId}

appIdでアプリケーションまたはサービス プリンシパルを参照します。 この構文では、GET、PATCH、および DELETE HTTP メソッドがサポートされています。

https://graph.microsoft.com/v1.0/applications(appId='appId')
https://graph.microsoft.com/v1.0/servicePrincipals(appId='appId')

PATCH メソッドを使用して 、uniqueName によってアプリケーション オブジェクトにアドレスを指定します。 このプロパティを使用して、一意の名前を持つアプリケーションが存在しない場合は作成するか、存在する場合は更新します。 この操作は Upsert と呼ばれます。

PATCH https://graph.microsoft.com/v1.0/applications(uniqueName='{uniqueName}')
Content-Type: application/json
Prefer: create-if-missing

{
  "displayName": "Display name"
}

アプリのその他の基本的なプロパティを構成する

最小特権委任アクセス許可: Application.ReadWrite.All

アプリの次の基本的なプロパティを設定します。

  • 分類用のタグを追加する (HideAppを使用してアプリをマイ アプリと Microsoft 365 Launcher から非表示にする)
  • ロゴ、利用規約、プライバシーに関する声明を追加する
  • 連絡先情報を保存する
PATCH https://graph.microsoft.com/v1.0/applications/0d0021e2-eaab-4b9f-a5ad-38c55337d63e/
Content-type: application/json

{
  "tags": [
      "HR",
      "Payroll",
      "HideApp"
  ],
  "info": {
      "logoUrl": "https://cdn.contoso.com/photo/2016/03/21/23/25/link-1271843_1280.png",
      "marketingUrl": "https://www.contoso.com/app/marketing",
      "privacyStatementUrl": "https://www.contoso.com/app/privacy",
      "supportUrl": "https://www.contoso.com/app/support",
      "termsOfServiceUrl": "https://www.contoso.com/app/termsofservice"
  },
  "web": {
      "homePageUrl": "https://www.contoso.com/",
      "logoutUrl": "https://www.contoso.com/frontchannel_logout",
      "redirectUris": [
          "https://localhost"
      ]
  },
  "serviceManagementReference": "Owners aliases: Finance @ contosofinance@contoso.com; The Phone Company HR consulting @ hronsite@thephone-company.com;"
}

アプリ上のすべてのロールが割り当てられているユーザーのみにサインインを制限します。

最小特権委任アクセス許可: Application.ReadWrite.All

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/89473e09-0737-41a1-a0c3-1418d6908bcd

{
    "appRoleAssignmentRequired": true
}

アプリにアクセス許可を割り当てる

アプリ オブジェクトの requiredResourceAccess プロパティを更新して、Microsoft Graph を使用してアクセス許可を割り当てます。 このメソッドは、Microsoft Entra 管理センターを使用するプログラムの代替手段です。 割り当てられているが付与されていないアクセス許可を削除しないように、既存のアクセス許可と新しいアクセス許可の両方を含めます。

アクセス許可を割り当てる、アクセス許可は付与されません。 microsoft Graph API を使用して、Microsoft Entra 管理センターまたはプログラムで管理者の同意を付与します。

最小特権委任アクセス許可: Application.ReadWrite.All

PATCH https://graph.microsoft.com/v1.0/applications/581088ba-83c5-4975-b8af-11d2d7a76e98
Content-Type: application/json

{
  "requiredResourceAccess": [
    {
      "resourceAppId": "00000002-0000-0000-c000-000000000000",
      "resourceAccess": [
        {
          "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
          "type": "Scope"
        },
        {
          "id": "3afa6a7d-9b1a-42eb-948e-1650a849e176",
          "type": "Role"
        }
      ]
    }
  ]
}

アプリ ロールを作成する

アプリケーション オブジェクトにアプリ ロールを作成する

アプリ ロールを追加または更新するには、要求に既存のすべてのロールを含めます。 既存のロールを省略すると、削除されます。

PATCH https://graph.microsoft.com/v1.0/applications/bbd46130-e957-4c38-a116-d4d02afd1057
Content-Type: application/json

{
  "appRoles": [
    {
      "allowedMemberTypes": [
          "User",
          "Application"
      ],
      "description": "Survey.Read",
      "displayName": "Survey.Read",
      "id": "7a9ddfc4-cc8a-48ea-8275-8ecbffffd5a0",
      "isEnabled": false,
      "origin": "Application",
      "value": "Survey.Read"
    }
  ]
}

所有者の管理

所有者のないサービス プリンシパル、または所有者が 1 つだけのサービス プリンシパルを特定する

最小特権委任アクセス許可: Application.ReadWrite.All

この要求では、$count が要求にあるため、ConsistencyLevel ヘッダーを eventual に設定する必要があります。 ConsistencyLevel$count の使用の詳細については、「ディレクトリ オブジェクトに対する高度なクエリ機能」を参照してください。

この要求は、フィルター条件に一致するアプリの数も返します。

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=owners/$count eq 0 or owners/$count eq 1&$count=true
ConsistencyLevel: eventual

アプリに所有者を割り当てる

最小特権委任アクセス許可: Application.ReadWrite.All

次の要求では、 8afc02cb-4d62-4dba-b536-9f6d73e9be26 はユーザーまたはサービス プリンシパルのオブジェクト ID です。

POST https://graph.microsoft.com/v1.0/applications/7b45cf6d-9083-4eb2-92c4-a7e090f1fc40/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}

サービス プリンシパルに所有者を割り当てる

最小特権委任アクセス許可: Application.ReadWrite.All

次の要求は、 appId を使用してサービス プリンシパルを参照します。 または、パターン ../servicePrincipals/{object ID}/owners/$refの オブジェクト ID を使用して参照することもできます。 dddddddd-9999-0000-1111-eeeeeeeeeeee は、ユーザーまたはサービス プリンシパルのオブジェクト ID です。

POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='00001111-aaaa-2222-bbbb-3333cccc4444')/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/dddddddd-9999-0000-1111-eeeeeeeeeeee"
}

サービス プリンシパルの機密性の高いプロパティをロックする

アプリ インスタンスロック機能を使用して、サービス プリンシパルの機密性の高いプロパティを未承認の変更から保護します。 次のプロパティをロックできます。

  • 使用の種類がSignまたはVerifyされている keyCredentials
  • passwordCredentials 使用の種類が Sign または Verify
  • tokenEncryptionKeyId プロパティ。

アプリ インスタンスロック機能は、マルチテナント アプリのアプリケーション オブジェクトの servicePrincipalLockConfiguration プロパティを使用して管理します。

サービス プリンシパルのすべての機密性の高いプロパティをロックするには

isEnabledallPropertiestrueに設定されている場合、servicePrincipalLockConfiguration オブジェクトの他のプロパティがnullされている場合でも、サービス プリンシパルのすべての機密性の高いプロパティがロックされます。

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "allProperties": true
    }
}

サービス プリンシパルの特定の機密プロパティをロックするには

次の例では、サービス プリンシパルの keyCredentials プロパティと passwordCredentials プロパティをロックし、アプリ インスタンスロック機能を有効にします。

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "credentialsWithUsageSign": true,
        "credentialsWithUsageVerify": true
    }
}

アプリの信頼できる証明機関を構成する

テナント内のアプリの証明書資格情報の使用を、信頼された証明機関によって発行された証明書のみに制限できます。 このポリシーは、証明書をアプリに追加するときに適用され、既存の証明書がローテーションされない限り影響しません。 アプリは、証明書の資格情報をローテーションしようとすると、ポリシーの評価を経て、追加される資格情報が信頼された証明機関の制限に準拠していることを確認します。

手順 1: 信頼の証明書チェーンを作成する

最小特権委任アクセス許可: AppCertTrustConfiguration.Read.All最小特権Microsoft Entraロール:Application Administrator

POST https://graph.microsoft.com/beta/certificateAuthorities/certificateBasedApplicationConfigurations

{
    "displayName": "Trusted Certificate Chain of Trust for Contoso",
    "description": "The Trusted Certificate Chain of Trust containing a certificate chain used by app policy, to only allow application certificates from selected issuer.",
    "trustedCertificateAuthorities": [
        {
            "isRootAuthority": true,
            "certificate": "MIIFVjCCAz6gAwIBAgIQJdrL...UyNDIyNTcwM1owPDE …="
        },
        {
            "isRootAuthority": false,
            "certificate": QAAAAAAWjABAQsFADA8M...UyNDIyNTcwM1o …="
        }
    ]
}

要求は 200 OK 応答オブジェクトを返します。 応答には、信頼オブジェクトの証明書チェーンの ID が含まれます。 手順 2 で ID が使用 eec5ba11-2fc0-4113-83a2-ed986ed13743 と仮定します。

手順 2: 証明書の信頼チェーンをアプリケーション管理ポリシーに割り当てる

次のサンプルでは、前の手順で定義した中間証明機関によって発行された証明書のみをテナント内のアプリに追加できるようにポリシーを設定します。 applicationRestrictions>keyCredentials オブジェクトは、作成された ID を参照するtrustedCertificateAuthority値を持つ restrictionType を定義します。 このポリシーは既定のテナント レベルのアプリ管理ポリシーに適用されるため、テナントで作成されたすべてのアプリに適用され、アプリの証明書資格情報の一部として非準拠証明書の追加が拒否されます。

このポリシーにより、指定された中間証明機関の証明書のみをアプリに追加できます。 applicationRestrictions>keyCredentials オブジェクトは、作成された ID を参照して restrictionTypetrustedCertificateAuthorityに設定します。 このポリシーは、テナント内のすべてのアプリに適用され、準拠していない証明書は拒否されます。

最小特権委任アクセス許可: Policy.Read.ApplicationConfiguration最小特権Microsoft Entraロール:Security Administrator

PATCH https://graph.microsoft.com/v1.0/policies/defaultAppManagementPolicy

{
  "id": "d015220e-9789-4e8e-bbcc-270fe419229d",
  "description": "Lorem ipsum",
  "displayName": "Credential management policy",
  "isEnabled": true,
  "applicationRestrictions": {
    "passwordCredentials": [
      {
        "restrictionType": "passwordLifetime",
        "maxLifetime": "P14D",
        "restrictForAppsCreatedAfterDateTime": "2020-01-01T07:00:00Z"
      }
    ],
    "keyCredentials": [
      {
        "restrictionType": "certificateLifetime",
        "restrictForAppsCreatedAfterDateTime": "2020-01-01T10:37:00Z",
        "maxLifetime": "P90D"
      },
      {
        "restrictionType": "trustedCertificateAuthority",
        "certificateBasedApplicationConfigurationIds": [
          "eec5ba11-2fc0-4113-83a2-ed986ed13743"
        ],
        "restrictForAppsCreatedAfterDateTime": "2019-10-19T10:37:00Z"
      }
    ]
  }
}