여러 테넌트에서 고객 관리형 키 구성

메모

Azure AI 검색 Azure 포털, REST API 및 Azure SDK 통해 사용할 수 있습니다. 또한 엔터프라이즈 콘텐츠를 Microsoft Foundry 포털의 에이전트에 대해 재사용 가능한 사용 권한 인식 기술 자료로 변환하는 관리되는 기술 계층인 Foundry IQ를 뒷받침합니다.

Important

기능, 기능 또는 표시된 속성(미리 보기)은 서비스 수준 계약에 포함되지 않으며 프로덕션 워크로드에는 권장되지 않으며 일반적으로 사용 가능해지기 전에 변경되거나 제한될 수 있습니다. Azure AI 검색 미리 보기 용어는 독립 실행형 기능이든 일반 공급 기능의 일부이든 관계없이 모든 미리 보기 기능에 적용됩니다.

이 문서에서는 서비스 공급자가 자체 테넌트에서 Azure AI 검색 호스트하고 다중 테넌트 Microsoft Entra 애플리케이션을 사용하여 CMK(커스터머 관리형 키) 암호화를 사용하도록 설정하는 테넌트 간 시나리오를 설명합니다.

이 구성에서 고객은 자신의 테넌트에서 Azure Key Vault 사용하여 암호화 키를 관리합니다. 서비스 공급자는 이 키에 액세스할 수 없습니다.

필수 조건

  • 테넌트 A: 테넌트 및 Azure AI 검색 서비스 및 관련 개체(인덱스, 동의어 목록, 인덱서, 데이터 원본, 벡터라이저, 기술 세트)를 만드는 데 필요한 권한입니다. CMK(고객 관리형 키)를 지원하려면 기본 가격 책정 계층 이상이 필요합니다.

  • 역할 기반 액세스에 대한 검색 서비스를 구성합니다(보안 강화를 위해 권장되며 필수는 아님).

  • 테넌트 B: Azure Key Vault 해당 테넌트에 필요한 권한이 있는 별도의 고객 테넌트입니다.

    • Key Vault 기여자: 새 key vault 만들어야 하는 경우 이 역할이 필요합니다.
    • Microsoft Entra ID: 테넌트 간 CMK에 대해 서비스 공급자가 구성한 다중 테넌트 앱을 설치하려면 Microsoft Entra ID 앱 등록을 만들 수 있는 권한이 있어야 합니다. 일반적으로 애플리케이션 개발자 역할 또는 애플리케이션 관리자 또는 전역 관리자와 같은 더 높은 관리 역할이 필요합니다.
    • Key Vault Crypto Officer: key vault 새 키를 추가하려면 이 역할이 필요합니다.
    • Key Vault Crypto Service Encryption User: 서비스 주체에게 key vault 고객 관리형 키에 대한 액세스 권한을 부여하려면 설치된 다중 테넌트 애플리케이션에 대해 만든 서비스 주체에 이 역할을 할당해야 합니다. 이 작업을 수행하려면 사용자 액세스 관리자 권한이 있어야 합니다. 다음 아래에서 Enterprise applications\<installed multitenant application>\Manage\Properties\Object ID서비스 주체 GUID(개체 ID라고도 함)를 볼 수 있습니다.
  • 또한 Azure Key Vault 역할 기반 액세스를 위해 구성해야 합니다.

  • 요청을 보내기 위한 Azure CLI.

인증 방법 선택

다음 방법 중 하나를 사용하여 테넌트 간 시나리오에서 고객 관리형 키를 사용하도록 다중 테넌트 Microsoft Entra 애플리케이션을 구성할 수 있습니다.

  1. 페더레이션 ID 지원(미리 보기, 권장): UAMI(사용자 할당 관리 ID)를 사용하여 Microsoft Entra FIC(페더레이션 ID 자격 증명)를 구성합니다. 이 방법은 관리 ID 토큰을 사용하고 액세스 토큰으로 교환하여 수명이 긴 비밀이 필요하지 않으며 워크로드 ID 페더레이션 원칙에 부합합니다. 이 방법을 사용하려면 API 버전federatedIdentityClientId에 도입된 미리 보기 2026-05-01-preview 속성이 필요합니다.

  2. 클라이언트 비밀: 속성을 사용하여 클라이언트 암호를 구성합니다 accessCredentials . 이 방법은 보안성이 낮으며, 비밀 값을 주기적으로 교체하고 보호하기 위해 추가적인 관리가 필요합니다.

메모

Azure Key Vault 및 Azure Key Vault 관리형 HSM은 고객 관리형 키에 대해 동일한 API 및 관리 인터페이스를 사용합니다. Azure Key Vault 지원되는 모든 작업은 Azure Key Vault 관리형 HSM에서도 지원됩니다.

테넌트 A에서 다중 테넌트 Microsoft Entra 애플리케이션 만들기

Azure CLI를 사용하여 요청을 보냅니다. Azure AI 검색 포함하는 서비스 공급자의 테넌트를 테넌트 A라고 합니다.

  1. 테넌트 ID를 가져옵니다. az account show --query tenantId --output tsv

  2. 테넌트 A에 로그인했는지 확인합니다. az login --tenant \<tenant-A-id\>

  3. 애플리케이션 등록을 만듭니다. az ad app create --display-name cross-tenant-auth --sign-in-audience AzureADMultipleOrgs

  4. 이 단계에서 앱 ID 출력을 저장합니다.

페더레이션 ID 지원 사용(미리 보기)

페더레이션 ID를 사용하여 테넌트 간 CMK 시나리오를 지원하려면 다음을 수행합니다.

  1. 서비스 공급자는 테넌트(테넌트 A)에서 AI Search 서비스를 구성합니다. 이 작업을 수행하는 방법에 대한 지침은 >Azure 포털에서 검색 서비스 만들기)를 참조하거나 Azure CLI az search service create 명령을 사용합니다.

  2. 서비스 공급자는 멀티테넌트 Microsoft Entra 앱 등록을 생성합니다. 이 작업을 수행하는 방법에 대한 지침은 Microsoft Entra ID 앱을 등록하는 방법 또는 Azure CLI 명령을 사용하는 방법: az 광고 앱 만들기을 참조하세요. 앱 등록을 완료하면 애플리케이션(클라이언트) ID를 기록합니다.

  3. 서비스 공급자는 사용자 할당 관리 ID를 설정합니다. 이 작업을 수행하는 방법에 대한 지침은 Azure Portal 또는 Azure CLI을 사용하여 사용자 할당 관리 ID 관리 관리를 참조하세요.

  4. 서비스 공급자는 사용자 할당 관리 ID를 앱에서 페더레이션 ID 자격 증명으로 구성합니다. 이 작업을 수행하는 방법에 대한 지침은 외부 ID 공급자를 신뢰하도록 앱 구성을 참조하세요.

  5. 서비스 공급자가 다중 테넌트 앱 ID를 공유하면 고객은 자신의 테넌트(테넌트 B)에서 서비스 공급자의 앱에 Key Vault에 대한 액세스 권한을 부여합니다. 테넌트 B에 앱을 설치하려면 다중 테넌트 앱 ID를 사용하여 서비스 주체를 만들어야 합니다. 서비스 주체를 만들려면 admin-consent URL을 생성하고 테넌트 전체 동의를 부여하거나 Azure CLI az ad sp 명령을 사용합니다.

  6. 고객이 사용할 Azure Key Vault가 아직 없는 경우 빠른 시작 - Azure Portal을 사용하여 Azure Key Vault 만들기 또는 빠른 시작 - Azure CLI를 사용하여 Azure Key Vault 만들기를 참조하세요. Key Vault는 서비스 공급자의 다중 테넌트 애플리케이션에 Key Vault Crypto Service Encryption 사용자 역할을 할당하여 권한을 부여하고, 권한 모델이 "Azure 역할 기반 액세스 제어(RBAC)"로 설정되어 있어야 합니다. 그러면 고객은 암호화 키를 만들 수 있습니다. 이 작업을 수행하는 방법에 대한 지침은 Azure RBAC 사용하여 Azure 키 자격 증명 모음에 액세스하는 애플리케이션에 대한 권한 부여를 참조하세요.

이러한 단계가 완료되면 서비스 공급자는 이제 다음을 수행합니다.

  • 고객 관리형 키에 대한 액세스 권한이 부여된 고객의 테넌트에 설치된 다중 테넌트 애플리케이션의 애플리케이션 ID입니다.

  • 다중 테넌트 애플리케이션에서 페더레이션 자격 증명으로 구성된 관리 ID입니다.

  • 고객의 키 보관소에 있는 키의 위치

이러한 세 가지 매개 변수를 사용하여 서비스 공급자는 이제 Tenant A에서 Tenant B 저장된 고객 관리형 키로 암호화할 수 있는 Azure AI 검색 개체를 만들 수 있습니다. 새 검색 개체에서 고객 관리형 키를 구성하는 방법에 대한 지침은 Azure AI 검색 암호화된 데이터에 대한 고객 관리형 키 구성 참조하세요.

페더레이션 ID 교차 테넌트 CMK 구성의 유효성 검사

다중 테넌트 Microsoft Entra 애플리케이션을 구성하고 고객의 Key Vault 연결한 후 검색 서비스(테넌트 A)에서 테스트 개체를 만들어 설정을 확인합니다. 다음은 검색 서비스가 페더레이션 ID 인증을 사용하여 고객 관리형 키에 액세스할 수 있음을 확인하는 인덱스입니다.

  1. 고객 관리형 키를 사용하여 검색 서비스 및 새 인덱스 개체를 만드는 방법에 대한 지침은 Azure AI 검색 암호화된 데이터에 대한 고객 관리형 키 구성을 참조하세요.

  2. 인덱스 개체가 만들어지면 다음을 입력해야 합니다.

    • keyVaultUri: 고객의 URI 주소입니다.
    • keyVaultKeyName: 고객의 키 이름입니다.
    • keyVaultKeyVersion: 고객으로부터 받은 키 버전입니다.
    • userAssignedIdentity: 사용자의 테넌트에서 가져온 <subscription-id> 및 <resource-group>, 그리고 <identity-name>는 사용자 할당 관리 ID 이름입니다.
    • federatedIdentityClientId: 이 속성 값은 <application-client-id>다중 테넌트 애플리케이션(클라이언트) ID가 됩니다.
    {
      "name": "cross-tenant-cmk-test",
      "fields": [
        {
          "name": "id",
          "type": "Edm.String",
          "key": true
        }
      ],
      "encryptionKey": {
        "keyVaultUri": "https://<key-vault-name>.vault.azure.net/",
        "keyVaultKeyName": "<key-name>",
        "keyVaultKeyVersion": "<key-version>",
        "identity": {
          "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
          "userAssignedIdentity": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
          "federatedIdentityClientId": "<application-client-id>"
        }
      }
    }
    
  3. 요청을 전송하여 인덱스 GET 확인: GET https://<search-service>.search.windows.net/indexes/cross-tenant-cmk-test?api-version=2026-08-01-preview

요청이 성공하면 테넌트 간 CMK 구성이 올바르게 작동합니다.

키 액세스 오류로 인덱스 만들기가 실패하는 경우 다음을 확인합니다.

  • 사용자 할당 관리 ID가 올바르게 구성됨
  • 페더레이션 ID 자격 증명이 앱에서 설정됨
  • Key Vault 액세스 정책 또는 RBAC 역할 할당이 정확합니다.

클라이언트 암호 사용(페더레이션 ID를 사용하는 것이 옵션이 아닌 경우)

페더레이션 ID가 옵션이 아닌 경우 다중 테넌트 애플리케이션에 클라이언트 비밀을 추가하여 테넌트 간 CMK 시나리오를 지원할 수 있습니다.

  1. 테넌트 A의 다중 테넌트 애플리케이션에 클라이언트 비밀을 추가하려면 다음 명령을 실행합니다.

    az ad app credential reset --id <multitenant-app-id>

  2. 이 단계의 암호 출력을 저장합니다. 암호 출력은 Azure AI 검색에서 CMK를 설정하는 데 필요한 입력입니다.

  3. 클라이언트 암호가 만료되는 시기를 지정하려면 이 명령에 대한 종료 날짜 매개 변수를 지정할 수 있습니다.

    az ad app credential reset --id <multitenant-app-id> --end-date <end-date>

    종료 날짜 매개 변수는 ISO 8601 형식의 날짜를 허용합니다. 예: az ad app credential reset --id <multitenant-app-id> --end-date 2026-12-31.

다중 테넌트 애플리케이션에 대한 테넌트 B에서 서비스 주체 만들기

Azure Key Vault를 포함하고 있는 테넌트 B를 참조합니다. 테넌트 A의 다중 테넌트 애플리케이션에 대해 테넌트 B에서 서비스 주체를 만듭니다.

  1. 테넌트 B에 로그인합니다.

    az login --tenant <tenant-B-id>

  2. 첫 번째 단계의 다중 테넌트 앱 ID 출력을 사용하여 서비스 주체를 만듭니다.

    az ad sp create --id <multitenant-app-id>

    이 서비스 주체는 테넌트 A의 다중 테넌트 애플리케이션 인스턴스입니다. 테넌트 B의 이 서비스 주체에 할당된 역할은 테넌트 A의 다중 테넌트 애플리케이션에도 할당됩니다.

  3. 다음 명령에서 "appOwnerOrganizationId"를 검토하여 테넌트 A와 B 사이의 링크를 확인합니다.

    az ad sp show --id <multitenant-app-id>

    이 명령은 JSON에 서비스 주체 세부 정보를 표시합니다. 출력에서 "appOwnerOrganizationId" 필드를 찾아 테넌트 A의 ID와 일치하는지 확인합니다.

  4. 이 단계에서 서비스 주체의 개체 ID( "id" 필드에서)를 저장합니다. 개체 ID는 Azure AI 검색에서 CMK를 설정하는 데 필요한 입력입니다.

  5. Azure Key Vault의 리소스 ID를 가져옵니다.

    az keyvault show --name <key-vault-name> --query id --output tsv

  6. 테넌트 B의 키 볼트에 새 서비스 주체에게 Key Vault Crypto Service Encryption User 역할을 할당합니다.

    az role assignment create --assignee <service-principal-object-id> --role "Key Vault Crypto Service Encryption User" --scope <key-vault-resource-id>

    이 할당의 예는 다음과 같을 수 있습니다.

    az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 --role "Key Vault Crypto Service Encryption User" --scope /subscriptions/87654321-4321-4321-4321-210987654321/resourceGroups/myKeyVaultRG/providers/Microsoft.KeyVault/vaults/myCompanyKeyVault

클라이언트 비밀 테넌트 간 CMK 구성 유효성 검사

다중 테넌트 Microsoft Entra 애플리케이션을 구성하고 고객의 Key Vault 연결한 후 검색 서비스(테넌트 A)에서 테스트 개체를 만들어 설정을 확인합니다. 이 예제에서는 검색 서비스가 클라이언트 암호를 사용하여 고객 관리형 키에 액세스할 수 있음을 확인하는 인덱스 만들기입니다.

  1. 고객 관리형 키를 사용하여 검색 서비스 및 새 인덱스 개체를 만드는 방법에 대한 지침은 Azure AI 검색 암호화된 데이터에 대한 고객 관리형 키 구성을 참조하세요.

  2. Azure 포털을 사용하여 인덱스 추가 및 이 JSON을 제공하거나 REST 클라이언트를 사용하여 Create Index 요청을 보낼 수 있습니다. 인덱스 개체가 만들어지면 다음을 입력해야 합니다.

    • keyVaultUri: 고객의 URI 주소입니다.
    • keyVaultKeyName: 고객의 키 이름입니다.
    • keyVaultKeyVersion: 고객으로부터 받은 키 버전입니다.
    • accessCredentials: applicationId은 00001111-aaaa-2222-bbbb-3333cccc4444와 같은 것이고, applicationSecret은 방금 만든 값입니다.
{
  "name": "cross-tenant-cmk-test",
  "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        }
      ],
 "encryptionKey": {
        "keyVaultUri": "https://<key-vault-name>.vault.azure.net/",
        "keyVaultKeyName": "<key-name>",
        "keyVaultKeyVersion": "<key-version>",
    "accessCredentials": {
      "applicationId": "<application-client-id>",
      "applicationSecret": "<application-client-secret>"
    }
  }
}

인덱스가 성공적으로 생성되었는지 확인합니다.

GET https://<search-service>.search.windows.net/indexes/cross-tenant-cmk-test?api-version=2026-04-01

키를 회전하거나 관리하는 방법에 대한 자세한 내용은 데이터 암호화에 대한 고객 관리형 키 구성을 참조하세요.