역할 기반 액세스 제어를 사용하여 Azure AI 검색에 연결

Azure는 플랫폼에서 실행 중인 모든 서비스에 대해 글로벌 역할 기반 액세스 제어 권한 부여 시스템을 제공합니다. Azure AI 검색에서는 다음 용도로 Azure 역할을 사용할 수 있습니다.

  • 컨트롤 플레인 작업(Azure Resource Manager를 통한 서비스 관리 작업)

  • 인덱스 만들기, 로드, 쿼리와 같은 데이터 평면 작업.

검색 결과에 대한 사용자별 액세스(행 수준 보안 또는 문서 수준 보안이라고도 함)는 지원되지 않습니다. 해결 방법은 보안 필터를 사용하여 사용자 ID별로 결과를 트리밍하고 요청자가 액세스 권한이 없어야 하는 문서를 제거하는 것입니다.

참고 항목

용어에 대한 간단한 참고 사항입니다. 컨트롤 플레인관리 REST API 또는 이에 상응하는 클라이언트 라이브러리에서 지원되는 작업을 나타냅니다. 데이터 평면은 검색 서비스 엔드포인트에 대한 작업(예: 인덱싱 또는 쿼리) 또는 Search REST API 또는 동등한 클라이언트 라이브러리에 지정된 기타 작업을 나타냅니다.

다음 역할이 기본 제공됩니다. 이러한 역할이 충분하지 않으면 사용자 지정 역할을 만듭니다.

역할 평면 설명
소유자 컨트롤 & 데이터 Azure 역할을 할당하는 기능을 포함하여 검색 리소스의 컨트롤 플레인에 대한 모든 권한입니다. 소유자 역할만 인증 옵션을 사용하거나 사용하지 않도록 설정하거나 다른 사용자의 역할을 관리할 수 있습니다. 구독 관리자는 기본적으로 멤버입니다.

데이터 평면에서 이 역할은 Search Service 기여자 역할과 동일한 액세스 권한을 갖습니다. 여기에는 문서 쿼리 또는 인덱싱 기능을 제외한 모든 데이터 평면 작업에 대한 액세스가 포함됩니다.
기여자 컨트롤 & 데이터 역할을 할당하거나 인증 옵션을 변경하는 기능을 제외하고 소유자와 동일한 수준의 컨트롤 플레인 액세스 권한입니다.

데이터 평면에서 이 역할은 Search Service 기여자 역할과 동일한 액세스 권한을 갖습니다. 여기에는 문서 쿼리 또는 인덱싱 기능을 제외한 모든 데이터 평면 작업에 대한 액세스가 포함됩니다.
판독기 컨트롤 & 데이터 검색 메트릭, 콘텐츠 메트릭(사용된 스토리지, 개체 수) 및 데이터 평면 리소스(인덱서, 인덱서 등)의 개체 정의를 포함하여 전체 서비스에 대한 읽기 권한입니다. 그러나 API 키를 읽거나 인덱스 내의 콘텐츠를 읽을 수는 없습니다.
Search 서비스 기여자 컨트롤 & 데이터 개체 정의(인덱스, 별칭, 동의어 맵, 인덱서, 데이터 원본 및 기술 세트)에 대한 읽기/쓰기 권한입니다. 이 역할은 개체를 만드는 개발자와 검색 서비스 및 해당 개체를 관리하지만 인덱스 콘텐츠에 액세스할 수 없는 관리자를 위한 것입니다. 이 역할을 사용하여 인덱스 만들기/ 삭제/ 나열, 인덱스 정의 가져오기, 서비스 정보(통계 및 할당량) 가져오기, 분석기 테스트, 동의어 맵/인덱서/데이터 원본/기술 세트 만들기/관리를 수행합니다. 권한 목록은 Microsoft.Search/searchServices/*를 참조하세요.
검색 인덱스 데이터 기여자 데이터 인덱스의 콘텐츠에 대한 읽기-쓰기 권한입니다. 이 역할은 인덱스의 문서 컬렉션을 가져오거나 새로 고치거나 쿼리해야 하는 개발자 또는 인덱스 소유자를 위한 것입니다. 이 역할은 인덱스 만들기 또는 관리를 지원하지 않습니다. 기본적으로 이 역할은 검색 서비스의 모든 인덱스에 적용됩니다. 범위를 좁히려면 단일 인덱스에 대한 액세스 권한 부여를 참조하세요.
검색 인덱스 데이터 읽기 권한자 데이터 쿼리 인덱스 쿼리를 위한 읽기 전용 액세스입니다. 이 역할은 쿼리를 실행하는 앱 및 사용자를 위한 것입니다. 이 역할은 개체 정의에 대한 읽기 권한을 지원하지 않습니다. 예를 들어, 검색 인덱스 정의를 읽거나 검색 서비스 통계를 가져올 수 없습니다. 기본적으로 이 역할은 검색 서비스의 모든 인덱스에 적용됩니다. 범위를 좁히려면 단일 인덱스에 대한 액세스 권한 부여를 참조하세요.

참고 항목

Azure 역할 기반 액세스를 사용하지 않도록 설정해도 컨트롤 플레인(소유자, 기여자, 읽기 권한자)에 대한 기본 제공 역할을 계속 사용할 수 있습니다. 역할 기반 액세스를 사용하지 않도록 설정하면 해당 역할과 연결된 데이터 관련 권한만 제거됩니다. 데이터 평면 역할이 사용하지 않도록 설정된 경우 검색 서비스 기여자는 컨트롤 플레인 기여자와 동등합니다.

제한 사항

  • Azure 역할 기반 액세스 제어를 채택하면 일부 요청의 대기 시간이 증가할 수 있습니다. 요청에 사용되는 서비스 리소스(인덱스, 인덱서 등)와 서비스 주체의 각각의 고유한 조합은 권한 부여 확인을 트리거합니다. 이러한 권한 부여 검사는 요청에 최대 200밀리초의 대기 시간을 추가할 수 있습니다.

  • 요청이 다양한 서비스 주체에서 시작되는 경우는 드물며, 모든 다른 서비스 리소스(인덱스, 인덱서 등)를 대상으로 하므로 권한 부여 검사로 인해 제한이 발생할 수 있습니다. 제한은 검색 서비스 리소스와 서비스 주체의 고유한 조합이 1초 이내에 사용된 경우에만 발생합니다.

데이터 평면에 대한 역할 기반 액세스 구성

적용 대상: 검색 인덱스 데이터 기여자, 검색 인덱스 데이터 판독기, Search Service 기여자

이 단계에서는 OAuth2 액세스 토큰을 제공하는 데이터 요청에서 권한 부여 헤더를 인식하도록 검색 서비스를 구성합니다.

  1. Azure Portal에 로그인하고 Search Service 페이지를 엽니다.

  2. 왼쪽 탐색 창에서 를 선택합니다.

    인증 옵션이 있는 키 페이지의 스크린샷.

  3. API 액세스 제어 옵션을 선택합니다. 유연성을 원하거나 앱을 마이그레이션해야 하는 경우 둘 다 사용하는 것이 좋습니다.

    옵션 설명
    API 키 않습니다(기본값). 권한 부여를 위해 요청 헤더에 관리자 또는 쿼리 API 키가 필요합니다. 역할이 사용되지 않습니다.
    역할 기반 액세스 제어 다음 단계에서 설명하는 작업을 완료하려면 역할 할당의 멤버 자격이 필요합니다. 각 요청에는 인증 헤더가 필요합니다.
    모두 요청은 API 키 또는 역할 기반 액세스 제어를 사용하여 유효합니다.

변경 내용은 즉시 적용되지만 테스트하기 전에 몇 초 정도 기다립니다.

검색 서비스 작업 및 콘텐츠에 대한 모든 네트워크 호출은 선택한 옵션인 API 키, 전달자 토큰 또는 둘 다를 선택하는 경우 둘 중 하나를 준수합니다.

포털에서 역할 기반 액세스 제어를 사용하도록 설정하면 권한 부여가 실패할 경우 실패 모드는 “http401WithBearerChallenge”가 됩니다.

역할 할당

역할 할당은 모든 도구 및 클라이언트 라이브러리에서 누적되고 광범위하게 사용됩니다. 역할은 Azure 역할 기반 액세스 제어 설명서에 설명된 지원되는 접근 방식 중 하나를 사용하여 할당할 수 있습니다.

역할 할당을 관리하려면 소유자이거나 Microsoft.Authorization/roleAssignments/write 권한이 있어야 합니다.

포털의 역할 할당은 서비스 전체입니다. 단일 인덱스에 권한을 부여하려면 PowerShell 또는 Azure CLI를 대신 사용합니다.

  1. Azure Portal에 로그인합니다.

  2. 검색 서비스로 이동합니다.

  3. 왼쪽 탐색 창에서 액세스 제어(IAM)를 선택합니다.

  4. 추가>역할 할당 추가를 선택합니다.

    역할 할당 추가 메뉴가 열려 있는 액세스 제어(IAM) 페이지

  5. 적용 가능한 역할을 선택합니다.

    • 소유자
    • 기여자
    • 판독기
    • Search 서비스 참가자
    • 검색 인덱스 데이터 기여자
    • 검색 인덱스 데이터 읽기 권한자
  6. 멤버 탭에서 Microsoft Entra 사용자 또는 그룹 ID를 선택합니다.

  7. 검토 + 할당 탭에서 검토 + 할당을 선택하여 역할을 할당합니다.

역할 할당 테스트

클라이언트를 사용하여 역할 할당을 테스트합니다. 역할은 구독 또는 리소스 그룹으로 범위가 지정된 누적 및 상속된 역할이므로 리소스(검색 서비스) 수준에서 삭제하거나 거부할 수 없습니다.

액세스를 테스트하기 전에 클라이언트 애플리케이션을 Microsoft Entra ID로 등록하고 역할 할당이 있는지 확인합니다.

  1. Azure Portal에 로그인합니다.

  2. 검색 서비스로 이동합니다.

  3. 개요 페이지에서 인덱스 탭을 선택합니다.

    • 검색 서비스 기여자는 모든 개체를 보고 만들 수 있지만 문서를 로드하거나 인덱스를 쿼리할 수는 없습니다. 권한을 확인하려면 검색 인덱스를 만듭니다.

    • 검색 인덱스 데이터 기여자는 문서를 로드하고 쿼리할 수 있습니다. 권한을 확인하려면 검색 탐색기를 사용하여 문서를 쿼리합니다. 데이터 가져오기 마법사 외부의 포털에는 문서 로드 옵션이 없습니다. 마법사에서는 개체도 만들기 때문에 검색 서비스 기여자와 검색 인덱스 데이터 기여자가 필요합니다.

    • 검색 인덱스 데이터 읽기 권한자는 인덱스를 쿼리할 수 있습니다. 권한을 확인하려면 검색 탐색기를 사용합니다. 쿼리를 보내고 결과를 볼 수 있어야 하지만 인덱스 정의를 볼 수는 없습니다.

현재 사용자로 테스트

이미 Search Service의 기여자 또는 소유자인 경우 Azure AI 검색에 대한 인증을 위해 사용자 ID에 대한 전달자 토큰을 제시할 수 있습니다.

  1. Azure CLI를 사용하여 현재 사용자에 대한 전달자 토큰을 가져옵니다.

    az account get-access-token --scope https://search.azure.com/.default
    

    또는 PowerShell을 사용하여 다음을 수행합니다.

    Get-AzAccessToken -ResourceUrl https://search.azure.com
    
  2. Visual Studio Code의 새 텍스트 파일에서 다음 변수를 붙여넣습니다.

    @baseUrl = PASTE-YOUR-SEARCH-SERVICE-URL-HERE
    @index-name = PASTE-YOUR-INDEX-NAME-HERE
    @token = PASTE-YOUR-TOKEN-HERE
    
  3. 붙여넣은 다음 액세스를 확인하는 요청을 보냅니다. 다음은 Hotels-quickstart 인덱스를 쿼리하는 것임

    POST https://{{baseUrl}}/indexes/{{index-name}}/docs/search?api-version=2023-11-01 HTTP/1.1
      Content-type: application/json
      Authorization: Bearer {{token}}
    
        {
             "queryType": "simple",
             "search": "motel",
             "filter": "",
             "select": "HotelName,Description,Category,Tags",
             "count": true
         }
    

단일 인덱스 액세스 권한 부여

어떤 시나리오에서는 인덱스 같은 단일 리소스에 대한 애플리케이션의 액세스를 제한하고자 할 수 있습니다.

포털은 현재 이 세분성 수준에서 역할 할당을 지원하지 않지만 PowerShell 또는 Azure CLI를 사용하여 수행할 수 있습니다.

PowerShell에서 New-AzRoleAssignment를 사용하여 Azure 사용자 또는 그룹 이름과 할당 범위를 제공합니다.

  1. AzureAzureAD 모듈을 로드하고 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을 사용하여 사용자 지정 역할 만들기 또는 업데이트에서 파생됩니다. 기존 역할에서 복제는 검색 서비스 페이지에서 지원됩니다.

이러한 단계에서는 이름별로 인덱스 나열을 포함하도록 검색 쿼리 권한을 보강하는 사용자 지정 역할을 만듭니다. 일반적으로 인덱스 나열은 관리 기능으로 간주됩니다.

  1. Azure Portal에서 검색 서비스로 이동합니다.

  2. 왼쪽 탐색 창에서 액세스 제어(IAM)를 선택합니다.

  3. 작업 모음에서 역할을 선택합니다.

  4. 검색 인덱스 데이터 읽기 권한자(또는 다른 역할)를 마우스 오른쪽 단추로 클릭하고 복제를 선택하여 사용자 지정 역할 만들기 마법사를 엽니다.

  5. 기본 탭에서 “검색 인덱스 데이터 탐색기”와 같은 사용자 지정 역할의 이름을 입력하고 다음을 선택합니다.

  6. 사용 권한 탭에서 사용 권한 추가를 선택합니다.

  7. 사용 권한 추가 탭에서 Microsoft Search 타일을 검색한 다음, 선택합니다.

  8. 사용자 지정 역할의 사용 권한을 설정합니다. 페이지 맨 위에서 기본 작업 선택을 사용합니다.

    • Microsoft.Search/operations에서 읽기: 사용 가능한 모든 작업 나열을 선택합니다.
    • Microsoft.Search/searchServices/indexes에서 읽기: 인덱스 읽기를 선택합니다.
  9. 동일한 페이지에서 데이터 작업으로 전환하고 Microsoft.Search/searchServices/indexes/documents에서 읽기: 문서 읽기를 선택합니다.

    JSON 정의는 다음 예제와 유사합니다.

    {
     "properties": {
         "roleName": "search index data explorer",
         "description": "",
         "assignableScopes": [
             "/subscriptions/0000000000000000000000000000000/resourceGroups/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 키 인증 사용 안 함

Search Service 기여자, 검색 인덱스 데이터 기여자 및 검색 인덱스 데이터 판독기 역할 및 Microsoft Entra 인증을 사용하는 경우 서비스에서 키 액세스 또는 로컬 인증을 사용하지 않도록 설정할 수 있습니다. API 키를 사용하지 않도록 설정하면 검색 서비스가 헤더에서 API 키를 전달하는 모든 데이터 관련 요청을 거부합니다.

참고 항목

관리자 API 키는 삭제하지는 않고 비활성화만 할 수 있습니다. 쿼리 API 키는 삭제할 수 있습니다.

기능을 사용하지 않도록 설정하려면 소유자 또는 기여자 권한이 필요합니다.

키 기반 인증을 사용하지 않도록 설정하려면 Azure Portal 또는 관리 REST API를 사용합니다.

  1. Azure Portal에서 검색 서비스로 이동합니다.

  2. 왼쪽 탐색 창에서 를 선택합니다.

  3. 역할 기반 액세스 제어를 선택합니다.

변경 내용은 즉시 적용되지만 테스트하기 전에 몇 초 정도 기다립니다. 소유자, 서비스 관리자 또는 공동 관리자의 구성원으로 역할을 할당할 수 있는 권한이 있다고 가정하면 포털 기능을 사용하여 역할 기반 액세스를 테스트할 수 있습니다.

조건부 액세스

다단계 인증과 같은 조직 정책을 적용해야 하는 경우 Microsoft Entra 조건부 액세스를 권장합니다.

Azure AI 검색에 대한 조건부 액세스 정책을 사용하도록 설정하려면 다음 단계를 따릅니다.

  1. Azure Portal에 로그인합니다.

  2. Microsoft Entra 조건부 액세스를 검색합니다.

  3. 정책을 선택합니다.

  4. 새 정책을 선택합니다.

  5. 정책의 클라우드 앱 또는 작업 섹션에서 정책 설정 방법에 따라 Azure AI 검색을 클라우드 앱으로 추가합니다.

  6. 정책의 나머지 매개 변수를 업데이트합니다. 예를 들어 이 정책이 적용되는 사용자 및 그룹을 지정합니다.

  7. 정책을 저장합니다.

Important

검색 서비스에 관리 ID가 할당된 경우 특정 검색 서비스가 조건부 액세스 정책의 일부로 포함되거나 제외될 수 있는 클라우드 앱으로 표시됩니다. 조건부 액세스 정책은 특정 검색 서비스에 적용할 수 없습니다. 대신 일반 Azure AI 검색 클라우드 앱을 선택해야 합니다.

역할 기반 액세스 제어 문제 해결

인증에 역할 기반 액세스 제어를 사용하는 애플리케이션을 개발할 때 몇 가지 일반적인 문제가 발생할 수 있습니다.

  • 권한 부여 토큰이 관리 ID에서 제공되었고 적절한 권한이 최근에 할당된 경우 이러한 권한 할당이 적용되는 데 몇 시간이 걸릴 수 있습니다.
  • 검색 서비스의 기본 구성은 키 기반 인증 전용입니다. 기본 키 설정을 둘 다 또는 역할 기반 액세스 제어로 변경하지 않은 경우 역할 기반 인증을 사용하는 모든 요청이 기본 권한에 관계없이 자동으로 거부됩니다.