Azure ロールベースのアクセス制御 (Azure RBAC) を使用して Azure Cognitive Search に接続する

Azure には、プラットフォームで実行されるすべてのサービスに対し、グローバルなロールベースのアクセス制御承認システムが用意されています。 Cognitive Search では、次のことができます。

  • 一般提供のロールをサービス管理に使用する。

  • インデックスの作成、読み込み、クエリなど、データ要求に新しいプレビュー ロールを使用します。

検索結果に対するユーザー アクセスごとに (行レベル セキュリティまたはドキュメントレベル セキュリティと呼ばれることもあります) はサポートされていません。 回避策としては、[セキュリティ フィルターの作成] を使用してユーザー ID 別に結果を整理し、要求者がアクセスしてはならないドキュメントを削除します。

組み込みロールには、一般公開のロールとプレビュー ロールが含まれます。 これらのロールが不十分な場合は、代わりにカスタム ロールを作成します。

Role 説明と可用性
[所有者] Azure ロールを割り当てる機能を含む、リソースへのフル アクセス。 サブスクリプション管理者は既定でメンバーになります。

(プレビュー) このロールには、データ プレーンの Search サービス共同作成者ロールと同じアクセス権があります。 これには、検索インデックスまたはインデックス ドキュメントのクエリを実行する機能を除く、すべてのデータ プレーン アクションへのアクセス権が含まれます。
Contributor ロールの割り当て、承認オプションの変更を除いて、所有者と同じアクセス レベル。

(プレビュー) このロールには、データ プレーンの Search サービス共同作成者ロールと同じアクセス権があります。 これには、検索インデックスまたはインデックス ドキュメントのクエリを実行する機能を除く、すべてのデータ プレーン アクションへのアクセス権が含まれます。
Reader (一般公開) 部分的なサービス情報への制限付きアクセス。 ポータルでは、閲覧者ロールはサービスの [概要] ページの [要点] セクションと [監視] タブで情報にアクセスできます。他のすべてのタブとページにはアクセスできません。

このロールは、サービス情報 (サービス名、リソース グループ、サービスの状態、場所、サブスクリプションの名前と ID、タグ、URL、価格レベル、レプリカ、パーティション、検索単位) にアクセスできます。 また、このロールは、サービス メトリック (検索の待ち時間、調整された要求の割合、1 秒あたりの平均クエリ数) にもアクセスできます。

このロールでは、API キー、ロールの割り当て、コンテンツ (インデックスまたは同意語マップ)、コンテンツ メトリック (使用されているストレージ、オブジェクトの数) にはアクセスできません。

(プレビュー) データ プレーンの RBAC プレビューを有効にすると、閲覧者ロールはサービス全体の読み取りアクセス許可を持ちます。 これにより、検索メトリック、コンテンツ メトリック (消費されたストレージ、オブジェクトの数)、データ プレーン リソース (インデックス、インデクサーなど) の定義を読み取ることができます。 閲覧者ロールは、API キーの読み取りやインデックス内のコンテンツの読み取りには引き続きアクセスできません。
Search Service Contributor (一般提供) このロールは共同作成者ロールと同じであり、コントロール プレーン操作に適用されます。

(プレビュー) データ プレーンの RBAC プレビューを有効にすると、Microsoft.Search/searchServices/* で定義されたインデックス、シノニム マップ、インデクサー、データ ソース、スキルセットに対するすべてのデータ プレーン アクションへのフル アクセスも提供されます。 このロールでは、検索インデックスやインデックス ドキュメントにクエリを実行するためのアクセス権限が付与されません。 このロールは、検索サービスとそのオブジェクトを管理する必要がある検索サービス管理者を対象としています。ただし、オブジェクト データを表示またはアクセスすることはできません。

共同作成者と同様、このロールのメンバーは、ロール割り当ての作成または管理をすることも、承認オプションを変更することもできません。 このロールのプレビュー機能を使用するには、この記事で説明されているように、サービスでプレビュー機能を有効にする必要があります。
検索インデックス データ共同作成者 (プレビュー) 検索サービスですべてのインデックス内のコンテンツに対するデータ プレーンのフル アクセスを提供します。 このロールは、インデックスのドキュメント コレクションのインポート、更新、またはクエリを行う必要がある開発者またはインデックス所有者向けです。
検索インデックス データ閲覧者 (プレビュー) 検索サービスで検索インデックスへの読み取り専用のデータ プレーン アクセスを提供します。 このロールは、クエリを実行するアプリおよびユーザー向けです。

Note

Azure リソースの操作には、コントロール プレーンとデータ プレーンのカテゴリの概念があります。 Cognitive Search では、"コントロール プレーン" は、Management REST API または同等のクライアント ライブラリでサポートされる操作を意味します。 "データ プレーン" は、インデックス作成やクエリなどの検索サービス エンドポイントに対する操作、または Search REST API または同等のクライアント ライブラリで指定されるその他の操作を意味します。

プレビュー機能と制限

  • データ プレーン操作 (インデックスの作成やインデックスへのクエリ実行など) のロールベースのアクセス制御は現在、パブリック プレビュー段階にあり、追加使用条件の下で使用できます。

  • Azure RBAC プレビューを使う場合、リージョン、レベル、または料金の制限はありませんが、検索サービスは Azure パブリック クラウド内に存在する必要があります。 プレビューは、Azure Government、Azure Germany、または Azure China 21Vianet では利用できません。

  • Azure サブスクリプションを新しいテナントに移行する場合は、Azure RBAC プレビューを再度有効にする必要があります。

  • ロールベースのアクセス制御を採用すると、一部の要求の待機時間が長くなる可能性があります。 要求で使われるサービス リソース (インデックス、インデクサーなど) とサービス プリンシパルの一意の組み合わせごとに、認可チェックがトリガーされます。 これらの認可チェックにより、最大 200 ミリ秒の待機時間が要求に追加されます。

  • まれに、多数の異なるサービス プリンシパルから要求が送信され、すべてが異なるサービス リソース (インデックス、インデクサーなど) を対象としている場合、認可チェックによって調整が発生する可能性があります。 調整が発生するのは、検索サービス リソースとサービス プリンシパルの一意の組み合わせが 1 秒間に何百も使われた場合のみです。

  • ロールベースのアクセス制御は、Azure portalおよび次の検索クライアントでサポートされています。

データ プレーンのロールベースのアクセスを構成する

適用対象: Search インデックス データ共同作成者、Search インデックス データ閲覧者、Search サービス共同作成者

この手順では、OAuth2 アクセス トークンを提供するデータ要求の承認ヘッダーを認識するように検索サービスを構成します。

  1. Azure portal にサインインし、検索サービス ページを開きます。

  2. 左側のナビゲーション ペインで [キー] を選択します。

    認証オプションを含む [キー] ページのスクリーンショット。

  3. API アクセス制御オプションを選択します。 柔軟性が必要な場合、またはアプリを移行する必要がある場合 は、両方 をお勧めします。

    オプション 状態 説明
    API キー 一般提供 (既定値) 承認するには、要求ヘッダーに管理者またはクエリの API キーが必要です。 ロールは使用されません。
    ロールベースのアクセス制御 プレビュー 次のステップで説明するように、タスクを完了するには、ロール割り当てのメンバーシップが必要です。 また、Authorization ヘッダーも必要です。
    両方 プレビュー 要求は、API キーまたはロールベースのアクセス制御を使用して有効です。

変更はすぐに有効ですが、テストの前に数秒待ちます。

検索サービスの操作とコンテンツに対するすべてのネットワーク呼び出しでは、選択したオプション (API キー、ベアラー トークン、または [両方] を選択した場合のいずれか) が考慮されます。

ポータルでロールベースのアクセス制御を有効にすると、承認が失敗した場合、エラー モードは "http401WithBearerChallenge" になります。

ロールの割り当て

ロールの割り当ては、すべてのツールとクライアント ライブラリ全体に累積され、広く適用されます。 ロールは、Azure のロールベースのアクセス制御のドキュメントで説明されている、サポートされている方法のいずれかを使用して割り当てることができます。

ロールの割り当てを管理するには、所有者であるか、Microsoft.Authorization/roleAssignments/write アクセス許可を持っている必要があります。

ポータルでのロールの割り当ては、サービス全体です。 単一のインデックスにアクセス許可を付与する場合は、代わりに PowerShell または Azure CLI を使用します。

  1. Azure Portalを開きます。

  2. お使いの検索サービスに移動します。

  3. 左側のナビゲーション ペインで [アクセス制御 (IAM)] を選択します。

  4. [+ 追加]>[ロール割り当ての追加] の順に選択します。

    [ロールの割り当ての追加] メニューが開いている [アクセス制御 (IAM)] ページ。

  5. 該当するロールを選びます。

    • 所有者
    • Contributor
    • Reader
    • 検索サービス共同作成者 (データ プレーン要求のプレビュー)
    • Search インデックス データ共同作成者 (プレビュー)
    • Search インデックス データ閲覧者 (プレビュー)
  6. [メンバー] タブで Azure AD ユーザーまたはグループの ID を選びます。

  7. [確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。

ロールの割り当てをテストする

ロールをテストするとき、ロールは累積的であり、サブスクリプションまたはリソース グループを対象範囲とする継承されたロールは、リソース (検索サービス) レベルでは削除または拒否できないことに注意してください。

  1. Azure Portalを開きます。

  2. お使いの検索サービスに移動します。

  3. [概要] ページで、 [インデックス] タブを選択します。

    • 共同作成者ロールのメンバーは、任意のオブジェクトを表示および作成できますが、検索エクスプローラーを使用してインデックスに対してクエリを実行することはできません。

    • Search インデックス データ閲覧者のメンバーは、Search エクスプローラーを使用してインデックスのクエリを実行できます。 任意の API バージョンを使用して、アクセスを確認できます。 クエリを発行し、結果を表示できるようにする必要がありますが、インデックス定義を表示できる必要はありません。

    • Search インデックス データ共同作成者のメンバーは、 [新しいインデックス] を選択して、新しいインデックスを作成できます。 新しいインデックスを保存すると、サービスに対する書き込みアクセス権が検証されます。

1 つのインデックスへのアクセスを許可する

シナリオの一部では、アプリケーションでアクセスできる範囲を単一のリソース (インデックスなど) に制限することが必要になる場合があります。

ポータルでは現在、このレベルの細分性でロールの割り当てはサポートされていませんが、 PowerShell または Azure CLI を使用して実行できます。

PowerShell では、New-AzRoleAssignment を使って、Azure のユーザーまたはグループの名前と、割り当てのスコープを指定します。

  1. Azure および AzureAD モジュールを読み込み、Azure アカウントに接続します。

    Import-Module -Name Az
    Import-Module -Name AzureAD
    Connect-AzAccount
    
  2. 個々のインデックスにスコープを設定したロールの割り当てを追加します。

    New-AzRoleAssignment -ObjectId <objectId> `
        -RoleDefinitionName "Search Index Data Contributor" `
        -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Search/searchServices/<search-service>/indexes/<index-name>"
    

カスタム ロールを作成する

組み込みロールに適切なアクセス許可の組み合わせがない場合は、カスタム ロールを作成して必要な操作をサポートすることができます

この例では、検索インデックス データ閲覧者を複製し、名前でインデックスを一覧表示する権限を追加します。 通常、検索サービスのインデックスを一覧表示することは管理者の権利とされています。

次の手順は、「Azure portal を使用して Azure カスタム ロールを作成または更新する」から派生したものです。 検索サービス ページでは、既存のロールからの複製がサポートされています。

次の手順では、インデックスを名前で一覧表示する権限を追加して検索クエリの権限を増強したカスタム ロールを作成します。 通常、インデックスの一覧表示は管理者用の機能とされています。

  1. Azure portal で検索サービスに移動します。

  2. 左側のナビゲーション ペインで [アクセス制御 (IAM)] を選択します。

  3. アクション バーで、[ロール] を選択します。

  4. [検索インデックス データ閲覧者] (または別のロール) を右クリックし、[複製] を選択して [カスタム ロールを作成する] ウィザードを開きます。

  5. [基本] タブでカスタム ロールの名前 ("Search Index Data Explorer" など) を指定し、[次へ] をクリックします。

  6. [アクセス許可] タブで [アクセス許可の追加] を選択します。

  7. [アクセス許可の追加] タブで、Microsoft Search タイルを検索して選択します。

  8. カスタム ロールのアクセス許可を設定します。 ページの上部で、既定の [アクション] の選択を使用して以下を行います。

    • Microsoft.Search/operations で、[Read : List all available operations](読み取り: 使用可能なすべての操作を一覧表示する) を選択します。
    • Microsoft.Search/searchServices/indexes で、[Read: Read Index](読み取り: インデックスの読み取り) を選択します。
  9. 同じページの [データ アクション] に切り替え、Microsoft.Search/searchServices/indexes/documents で [Read : Read Documents](読み取り: ドキュメントの読み取り) を選択します。

    JSON の定義は、次の例のようになります。

    {
     "properties": {
         "roleName": "search index data explorer",
         "description": "",
         "assignableScopes": [
             "/subscriptions/a5b1ca8b-bab3-4c26-aebe-4cf7ec4791a0/resourceGroups/heidist-free-search-svc/providers/Microsoft.Search/searchServices/demo-search-svc"
         ],
         "permissions": [
             {
                 "actions": [
                     "Microsoft.Search/operations/read",
                     "Microsoft.Search/searchServices/indexes/read"
                 ],
                 "notActions": [],
                 "dataActions": [
                     "Microsoft.Search/searchServices/indexes/documents/read"
                 ],
                 "notDataActions": []
             }
         ]
       }
     }
    
  10. [確認および作成] を選択してロールを作成します。 これで、ユーザーとグループをロールに割り当てることがきるようになりました。

API キー認証を無効にする

API キーは削除できませんが、検索サービス共同作成者、検索インデックス データ共同作成者、検索インデックス データ閲覧者の各ロールと、Azure AD 認証を使用している場合は、サービスで無効にできます。 API キーを無効にすると、ヘッダーで API キーを渡すデータ関連のすべての要求を検索サービスが拒否します。

機能を無効にするには、所有者または共同作成者のアクセス許可が必要です。

キーベースの認証を無効にするには、Azure portal または Management REST API を使用します。

  1. Azure portal で検索サービスに移動します。

  2. 左側のナビゲーション ウィンドウで、[キー] を選択します。

  3. [ロールベースのアクセス制御] を選択します。

変更はすぐに有効ですが、テストの前に数秒待ちます。 所有者、サービス管理者、または共同管理者のメンバーとしてロールを割り当てるアクセス許可があると仮定すると、ポータル機能を使用してロールベースのアクセスをテストできます。

条件付きアクセス

条件付きアクセスは、組織のポリシーを適用するために Azure Active Directory で使われるツールです。 条件付きアクセス ポリシーを使用すると、必要な場合は適切なアクセス制御を適用して組織のセキュリティを維持することができます。 ロールベースのアクセス制御を使用して Azure Cognitive Search サービスにアクセスすると、条件付きアクセスにより、組織ポリシーを適用することができます。

Azure Cognitive Search の条件付きアクセス ポリシーを有効にするには、次の手順を実行します。

  1. Azure portal にサインインします。

  2. Azure AD 条件付きアクセスを探します。

  3. [ポリシー] を選択します。

  4. [新しいポリシー] を選択します。

  5. ポリシーの [クラウド アプリまたは操作] セクションで、ポリシーの設定方法に応じて、クラウド アプリとして Azure Cognitive Search を追加します。

  6. ポリシーの残りのパラメーターを更新します。 たとえば、このポリシーを適用するユーザーとグループを指定します。

  7. ポリシーを保存します。

重要

検索サービスにマネージド ID が割り当てられている場合、その検索サービスは、条件付きアクセス ポリシーの一部として含めたり、除外したりすることができるクラウド アプリとして表示されます。 条件付きアクセス ポリシーを特定の検索サービスに適用することはできません。 代わりに、一般的な Azure Cognitive Search クラウド アプリを選択してください。