관리 ID를 사용하여 인증

적용 대상: 모든 API Management 계층

authentication-managed-identity 정책을 사용하여 관리 ID를 사용하는 백 엔드 서비스를 인증합니다. 이 정책은 기본적으로 관리 ID를 사용하여 지정된 리소스에 액세스하기 위해 Microsoft Entra ID 액세스 토큰을 가져옵니다. 토큰을 성공적으로 가져오면 정책에서 Authorization 스키마를 사용하여 Bearer 헤더의 토큰 값을 설정합니다. API Management는 만료될 때까지 토큰을 캐시합니다.

시스템 할당 ID와 다중 사용자 할당 ID를 모두 사용하여 토큰을 요청할 수 있습니다. client-id 제공되지 않으면 시스템 할당 ID가 가정됩니다. client-id 변수가 제공되면 Microsoft Entra ID 해당 사용자 할당 ID에 대한 토큰이 요청됩니다.

참고 항목

정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.

주의

보안 고려 사항: API Management 정책을 편집할 수 있는 권한이 있는 사용자는 이 정책을 사용하여 서비스의 관리 ID로 인증할 수 있습니다. 그러나 관리 ID를 API Management 인스턴스에 먼저 할당하지 않으면 리소스에 직접 액세스할 수 없습니다. 관리 ID가 할당되면 정책을 수정할 수 있는 사용자는 인증 토큰을 반송하거나, 백 엔드로 전파하거나, 나중에 사용할 수 있도록 기록할 수 있습니다. 자세한 보안 지침 및 완화 전략은 관리 ID 개요에서 관리 ID에 대한 보안 고려 사항을 참조하세요.

정책 문

<authentication-managed-identity resource="resource" client-id="clientid of user-assigned identity" output-token-variable-name="token-variable" ignore-error="true|false"/>  

특성

특성 설명 필수 항목 기본값
자원 문자열입니다. Microsoft Entra ID 대상 웹 API(보안 리소스)의 애플리케이션 ID입니다. 정책 식이 허용됩니다. 해당 없음
클라이언트 ID 문자열입니다. Microsoft Entra ID 사용자 할당 ID의 클라이언트 ID입니다. 정책 식은 허용되지 않습니다. 아니요 해당 없음. 특성이 없는 경우 시스템 할당 ID가 사용됩니다.
output-token-variable-name 문자열입니다. string 개체 형식으로 토큰 값을 받을 컨텍스트 변수의 이름입니다. 정책 식은 허용되지 않습니다. 아니요 해당 없음
ignore-error 부울입니다. true로 설정하면 액세스 토큰을 가져오지 않은 경우에도 정책 파이프라인이 계속 실행됩니다. 아니요 false

사용

사용 현황 정보

  • 이 정책이 전역 범위에서 정의된 경우 가져온 토큰은 작업 영역의 토큰을 포함하여 모든 API에 대한 정책 실행 컨텍스트에서 사용할 수 있습니다. 토큰을 특정 API에만 사용할 수 있어야 하는 경우 전역 정책이 아닌 더 좁은 범위(예: 제품 또는 API 수준)에서 정책을 적용하는 것이 좋습니다.

  • 토큰 전달은 고객의 책임입니다. 이 정책을 평가할 때 API Management는 Microsoft Entra ID 토큰을 가져와서 Authorization 헤더의 백 엔드 as-is 전달합니다. API Management는 토큰이 전송되는 백 엔드의 유효성을 검사하지 않습니다. 토큰이 의도되고 신뢰할 수 있는 백 엔드 서비스로만 전달되도록 하는 것은 고객의 책임입니다. 토큰이 의도하지 않은 대상으로 전송되지 않도록 백 엔드 엔터티 및 기타 정책을 신중하게 구성합니다.

예제

관리 ID를 사용하여 백 엔드 서비스 인증

<authentication-managed-identity resource="https://graph.microsoft.com"/> 
<authentication-managed-identity resource="https://cognitiveservices.azure.com"/> <!--Azure OpenAI-->
<authentication-managed-identity resource="https://management.azure.com/"/> <!--Azure Resource Manager-->
<authentication-managed-identity resource="https://vault.azure.net"/> <!--Azure Key Vault-->
<authentication-managed-identity resource="https://servicebus.azure.net/"/> <!--Azure Service Bus-->
<authentication-managed-identity resource="https://eventhubs.azure.net/"/> <!--Azure Event Hub-->
<authentication-managed-identity resource="https://storage.azure.com/"/> <!--Azure Blob Storage-->
<authentication-managed-identity resource="https://database.windows.net/"/> <!--Azure SQL-->
<authentication-managed-identity resource="https://signalr.azure.com"/> <!--Azure SignalR-->
<authentication-managed-identity resource="AD_application_id"/> <!--Application (client) ID of your own Azure AD Application-->

관리 ID 사용 및 수동으로 헤더 설정

<authentication-managed-identity resource="AD_application_id"
   output-token-variable-name="msi-access-token" ignore-error="false" /> <!--Application (client) ID of your own Azure AD Application-->
<set-header name="Authorization" exists-action="override">
   <value>@("Bearer " + (string)context.Variables["msi-access-token"])</value>
</set-header>

전송-요청 정책에서 관리 ID 사용

<send-request mode="new" timeout="20" ignore-error="false">
    <set-url>https://example.com/</set-url>
    <set-method>GET</set-method>
    <authentication-managed-identity resource="ResourceID"/>
</send-request>

정책 작업에 대한 자세한 내용은 다음을 참조하세요.