관리 ID를 사용하여 다른 Azure 리소스에 검색 서비스 연결

시스템이 할당하거나 사용자 할당한 관리 ID 및 Azure 역할 할당을 사용하여 다른 Azure 리소스에 연결하도록 Azure AI Search 서비스를 구성할 수 있습니다. 관리 ID 및 역할 할당을 사용하면 연결 문자열 또는 코드에서 비밀 및 자격 증명을 전달할 필요가 없습니다.

필수 조건

  • 기본 계층 이상의 검색 서비스

  • 유효한 역할 할당이 있는 Microsoft Entra 로그인에서 들어오는 요청을 수락하는 Azure 리소스

지원되는 시나리오

Azure AI Search는 Azure 리소스에 대한 아웃바운드 연결에서 시스템이 할당하거나 사용자 할당한 관리 ID를 사용할 수 있습니다. 연결 문자열이 Microsoft Entra ID 인식 서비스 또는 애플리케이션의 고유한 리소스 ID인 경우 시스템 관리 ID가 표시됩니다. 사용자가 할당한 관리 ID는 "identity" 속성을 통해 지정됩니다.

검색 서비스는 Azure Storage를 인덱서 데이터 원본으로 사용하고, 디버그 세션, 보강 캐싱 및 지식 저장소에 대한 데이터 싱크로 사용합니다. 스토리지에 쓰기 저장하는 검색 기능의 경우 "역할 할당" 섹션에 설명된 대로 관리 ID에 기여자 역할 할당이 필요합니다.

시나리오 시스템 관리 ID 사용자가 할당한 관리 ID(미리 보기)
지원되는 Azure 데이터 원본에 대한 인덱서 연결1,3
고객 관리형 키를 위한 Azure Key Vault
디버그 세션(Azure Storage에서 호스트됨)1 아니요
보강 캐시(Azure Storage에서 호스트됨)1,2
지식 저장소(Azure Storage에서 호스트됨)1
사용자 지정 기술(Azure Functions 또는 동급에서 호스트됨)
Azure OpenAI 포함 기술
Azure OpenAI 벡터라이저

1 검색과 스토리지 간 연결의 경우 네트워크 보안 구성에 따라 사용할 수 있는 관리 ID 유형에 제약 조건이 적용됩니다. 신뢰할 수 있는 서비스 예외 또는 리소스 인스턴스 규칙을 통해 스토리지에 대한 동일한 지역 연결에 시스템 관리 ID만 사용할 수 있습니다. 자세한 내용은 네트워크로 보호되는 스토리지 계정에 대한 액세스를 참조하세요.

2 보강 캐시를 지정하는 한 가지 방법은 데이터 가져오기 마법사에 있습니다. 현재 이 마법사는 보강 캐시에 대한 관리 ID 연결 문자열을 허용하지 않습니다. 그러나 마법사가 완료되면 인덱서 JSON 정의에서 연결 문자열을 업데이트하여 시스템 또는 사용자가 할당한 관리 ID를 지정한 다음, 인덱서를 다시 실행할 수 있습니다.

3Azure 스토리지 계정에서 키 비활성화는 현재 데이터 소스로 사용되는 Azure 테이블에 대해 지원되지 않습니다. 관리 ID는 스토리지 키를 명시적으로 제공하지 않기 위해 사용되지만 AI 검색 서비스는 여전히 이 구현에 키를 사용합니다.

시스템 관리 ID 만들기

시스템 할당 관리 ID를 사용하도록 설정하면 Azure는 동일한 테넌트 및 구독 내에서 다른 Azure 서비스에 인증하는 데 사용할 수 있는 검색 서비스 ID를 만듭니다. 그런 다음, 인덱싱 중에 데이터 액세스를 허용하는 Azure RBAC(Azure 역할 기반 액세스 제어) 할당에서 이 ID를 사용할 수 있습니다.

시스템이 할당한 관리 ID는 검색 서비스에 고유하며 수명 동안 서비스에 바인딩됩니다.

  1. Azure Portal에 로그인하고 검색 서비스를 찾습니다.

  2. 설정에서 ID를 선택합니다.

  3. 시스템 할당 탭의 상태에서 켜기를 선택합니다.

  4. 저장을 선택합니다.

    Azure Portal의 ID 페이지 스크린샷

    저장 후에는 검색 서비스에 할당된 개체 식별자가 표시됩니다.

    시스템 ID 개체 식별자의 스크린샷

사용자가 할당한 관리 ID 만들기(미리 보기)

사용자가 할당한 관리 ID는 Azure 리소스입니다. 다양한 애플리케이션 및 시나리오에 대한 개별 ID를 만들 수 있으므로 역할 할당에 더 세분성이 필요한 경우에 유용합니다.

Important

이 기능은 추가 사용 약관에 따라 공개 미리 보기로 제공됩니다. 사용자가 할당한 관리 ID는 현재 네트워크로 보호되는 스토리지 계정에 대한 연결에 지원되지 않습니다. 검색 요청에는 현재 공용 IP 주소가 필요합니다.

  1. Azure 포털

  2. + 리소스 생성를 선택합니다.

  3. “검색 서비스 및 마켓플레이스” 검색 창에서 “사용자가 할당한 관리 ID”를 검색한 다음, 만들기를 선택합니다.

    Azure Marketplace에서 사용자가 할당한 관리 ID 타일의 스크린샷

  4. 구독, 리소스 그룹 및 지역을 선택합니다. ID에 설명이 포함된 이름을 지정합니다.

  5. 만들기를 선택하고 리소스 배포가 완료될 때까지 기다립니다.

    다음 몇 단계에서는 사용자가 할당한 관리 ID를 검색 서비스에 할당합니다.

  6. 검색 서비스 페이지의 설정에서 ID를 선택합니다.

  7. 사용자 할당 탭에서 추가를 클릭합니다.

  8. 구독을 선택한 다음, 이전 단계에서 만든 사용자가 할당한 관리되는 리소스를 선택합니다.

방화벽 액세스 허용

Azure 리소스가 방화벽 뒤에 있는 경우 검색 서비스의 요청을 허용하는 인바운드 규칙이 있는지 확인합니다.

역할 할당

관리 ID는 Azure 리소스에 대한 권한을 결정하는 Azure 역할과 쌍을 이루어야 합니다.

  • 인덱서 데이터 연결 및 Azure Key Vault의 고객 관리형 키 액세스를 위해서는 데이터 읽기 권한자 권한이 필요합니다.

  • Azure Storage를 사용하여 지식 저장소에서 디버그 세션 데이터, 보강 캐싱 및 장기 콘텐츠 스토리지를 호스트하는 AI 보강 기능에는 기여자(쓰기) 권한이 필요합니다.

다음 단계는 Azure Storage에 대한 것입니다. 리소스가 Azure Cosmos DB 또는 Azure SQL인 경우 단계는 비슷합니다.

  1. Azure Portal에 로그인하고 검색 서비스가 액세스해야 하는 Azure 리소스를 찾습니다.

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

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

  4. 역할 페이지에서 검색 서비스에 필요한 역할을 선택합니다.

    작업 역할 할당
    인덱서를 사용한 Blob 인덱싱 Storage Blob 데이터 읽기 권한자 추가
    인덱서를 사용한 ADLS Gen2 인덱싱 Storage Blob 데이터 읽기 권한자 추가
    인덱서를 사용한 테이블 인덱싱 읽기 권한자 및 데이터 액세스 추가
    인덱서를 사용한 파일 인덱싱 읽기 권한자 및 데이터 액세스 추가
    지식 저장소에 쓰기 개체 및 파일 프로젝션을 위한 Storage Blob DataContributor와 테이블 프로젝션을 위한 읽기 권한자 및 데이터 액세스를 추가합니다.
    보강 캐시에 쓰기 Storage Blob 데이터 기여자 추가
    디버그 세션 상태 저장 Storage Blob 데이터 기여자 추가
    Azure OpenAI 포함 모델을 사용하여 데이터 포함(벡터화) Cognitive Services OpenAI 사용자 추가
  5. 멤버 페이지에서 관리 ID를 선택합니다.

  6. 멤버를 선택합니다 관리 ID 선택 페이지에서 구독을 선택한 다음, 서비스 유형으로 필터링한 후 서비스를 선택합니다. 관리 ID가 있는 서비스만 선택할 수 있습니다.

    역할 할당 마법사의 관리 ID 선택 창 스크린샷

  7. 검토 + 할당을 선택합니다.

연결 문자열 예제

검색 서비스의 관리 ID가 정의되고 역할 할당이 제공되면 다른 Azure 리소스의 고유 리소스 ID를 사용하도록 아웃바운드 연결을 수정할 수 있습니다. 다음은 다양한 시나리오에 대한 연결 문자열의 몇 가지 예입니다.

Blob 데이터 원본(시스템):

인덱서 데이터 원본에는 데이터 원본에 대한 연결 방법을 결정하는 "credentials" 속성이 포함되어 있습니다. 다음 예에서는 스토리지 계정의 고유 리소스 ID를 지정하는 연결 문자열을 보여 줍니다. Microsoft Entra ID는 검색 서비스의 시스템 관리 ID를 사용하여 요청을 인증합니다. 연결 문자열에는 컨테이너가 포함되지 않습니다. 데이터 원본 정의에서 컨테이너 이름은 연결 문자열이 아닌 "container" 속성(표시되지 않음)에 지정됩니다.

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    }

Blob 데이터 원본(사용자):

Azure Storage에 대한 검색 요청을 현재 미리 보기 상태인 사용자가 할당한 관리 ID에서 수행할 수도 있습니다. 검색 서비스 사용자 ID는 "identity" 속성에 지정됩니다. 포털 또는 REST API 미리 보기 버전 2021-04-30-Preview를 사용하여 ID를 설정할 수 있습니다.

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    },
  . . .
"identity": {
    "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
    "userAssignedIdentity": "/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{user-assigned-managed-identity-name}"
  }

지식 저장소:

지식 저장소 정의에는 Azure Storage에 대한 연결 문자열이 포함됩니다. Azure Storage에서 지식 저장소는 Blob 및 테이블로 프로젝션을 만듭니다. 연결 문자열은 스토리지 계정의 고유한 리소스 ID입니다. 문자열은 경로의 컨테이너나 테이블을 포함하지 않습니다. 이는 연결 문자열이 아닌 포함된 프로젝션 정의에 정의되어 있습니다.

"knowledgeStore": {
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/storage-account-name};"
}

보강 캐시:

인덱서는 캐시된 보강에 사용되는 컨테이너를 만들고, 사용하고, 기억합니다. 캐시 연결 문자열에 컨테이너를 포함할 필요는 없습니다. 포털에서 검색 서비스의 ID 페이지에서 개체 ID를 찾을 수 있습니다.

"cache": {
  "enableReprocessing": true,
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
}

디버그 세션:

디버그 세션은 포털에서 실행되며 사용자가 세션을 시작할 때 연결 문자열을 사용합니다. 다음 예제와 유사한 문자열을 붙여넣을 수 있습니다.

"ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}/{container-name};",

사용자 지정 기술:

사용자 지정 기술은 사용자 지정 코드를 호스트하는 Azure 함수 또는 앱의 엔드포인트를 대상으로 합니다. 엔드포인트는 사용자 지정 기술 정의에 지정됩니다. "authResourceId"가 있으면 검색 서비스에 관리 ID를 사용하여 연결하도록 지시하고, 속성에 있는 대상 함수 또는 앱의 애플리케이션 ID를 전달합니다.

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "description": "A custom skill that can identify positions of different phrases in the source text",
  "uri": "https://contoso.count-things.com",
  "authResourceId": "<Azure-AD-registered-application-ID>",
  "batchSize": 4,
  "context": "/document",
  "inputs": [ ... ],
  "outputs": [ ...]
}

Azure OpenAI 포함 기술Azure OpenAI 벡터라이저:

AI Search의 Azure OpenAI 포함 기술 및 벡터라이저는 포함 모델을 호스팅하는 Azure OpenAI 서비스의 엔드포인트를 대상으로 합니다. 엔드포인트는 Azure OpenAI 포함 기술 정의 및/또는 Azure OpenAI 벡터라이저 정의에서 지정됩니다. 시스템 관리 ID는 구성된 경우와 "apikey" 및 "authIdentity"가 비어 있는 경우 사용됩니다. "authIdentity" 속성은 사용자 할당 관리 ID에만 사용됩니다.

{
  "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
  "description": "Connects a deployed embedding model.",
  "resourceUri": "https://url.openai.azure.com/",
  "deploymentId": "text-embedding-ada-002",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "embedding"
    }
  ]
}
 "vectorizers": [
    {
      "name": "my_azure_open_ai_vectorizer",
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://url.openai.azure.com",
        "deploymentId": "text-embedding-ada-002"
      }
    }
  ]

참고 항목