다음을 통해 공유


App Service 및 Azure Functions에 관리 ID 사용

이 문서에서는 Azure App Service 및 Azure Functions 애플리케이션에 대한 관리 ID를 만드는 방법과 이를 사용하여 다른 리소스에 액세스하는 방법을 보여 줍니다.

Microsoft Entra ID의 관리 ID를 사용하면 앱이 Azure Key Vault와 같은 다른 Microsoft Entra로 보호되는 리소스에 쉽게 액세스할 수 있습니다. Azure 플랫폼은 ID를 관리하므로 비밀을 프로비전하거나 회전할 필요가 없습니다. Microsoft Entra ID의 관리 ID에 대한 자세한 내용은 Azure 리소스의 관리 ID를 참조하세요.

애플리케이션에 다음 두 가지 유형의 ID를 부여할 수 있습니다.

  • 시스템 할당 ID는 앱에 연결되어 있으며 앱이 삭제되면 삭제됩니다. 앱에는 시스템 할당 ID가 하나만 있을 수 있습니다.
  • 사용자 할당 ID는 앱에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 앱에는 여러 사용자 할당 ID가 있을 수 있습니다. 하나의 사용자 할당 ID를 두 개의 App Service 앱과 같은 여러 Azure 리소스에 할당할 수 있습니다.

관리 ID 구성은 슬롯과 관련이 있습니다. 포털에서 배포 슬롯에 대한 관리 ID를 구성하려면 먼저 슬롯으로 이동합니다. Azure Portal에서 Microsoft Entra 테넌트의 웹앱 또는 배포 슬롯에 대한 관리 ID를 찾으려면 테넌트의 개요 페이지에서 직접 검색합니다.

참고 항목

Azure Arc에 배포된 앱에는 관리 ID를 사용할 수 없습니다.

관리 ID는 디렉터리 간 시나리오를 지원하지 않으므로 앱이 구독 또는 테넌트 간에 마이그레이션되는 경우 예상대로 동작하지 않습니다. 이러한 이동 후 관리 ID를 다시 만들려면 구독을 다른 디렉터리로 이동하는 경우 관리 ID가 자동으로 다시 생성되나요?를 참조하세요. 다운스트림 리소스에도 새 ID를 사용하려면 액세스 정책을 업데이트해야 합니다.

필수 조건

이 문서의 단계를 수행하려면 Azure 리소스에 대한 최소 사용 권한 집합이 있어야 합니다. 필요한 특정 권한은 시나리오에 따라 달라집니다. 다음 표에서는 가장 일반적인 시나리오를 요약합니다.

시나리오 필요한 권한 기본 제공 역할 예
시스템 할당 ID 만들기 Microsoft.Web/sites/write 앱을 통해 또는 Microsoft.Web/sites/slots/write 슬롯을 통해 웹 사이트 기여자
사용자 할당 ID만들기 Microsoft.ManagedIdentity/userAssignedIdentities/write ID를 생성할 리소스 그룹 내에서 관리 ID 기여자
앱에 사용자 할당 ID 할당 Microsoft.Web/sites/write 앱을 통해, Microsoft.Web/sites/slots/write 슬롯을 통해 또는
Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action ID를 통해
웹 사이트 참가자 및 관리 ID 연산자
Azure 역할 할당 만들기 Microsoft.Authorization/roleAssignments/write 대상 리소스 범위 이상 역할 기반 액세스 제어 관리자 또는 사용자 액세스 관리자

시스템 할당 ID 추가

시스템 할당 관리 ID를 사용하도록 설정하려면 다음 지침을 사용합니다.

  1. Azure Portal에서 앱의 페이지로 이동합니다.

  2. 왼쪽 메뉴에서 설정>ID를 선택합니다.

  3. 시스템 할당 탭에서 상태켜기로 바꿉니다. 그런 다음 저장을 선택합니다.

사용자 할당 ID 추가

사용자 할당 ID를 사용하여 앱을 만들려면 ID를 만든 다음 해당 리소스 식별자를 앱 구성에 추가합니다.

  1. 이러한 지침에 따라 사용자 할당 관리 ID 리소스를 만듭니다.

  2. 앱 페이지의 왼쪽 메뉴에서 설정>ID를 선택합니다.

  3. 할당된 사용자를 선택한 다음, 추가를 선택합니다.

  4. 이전에 만든 ID를 검색하고 선택한 다음 추가를 선택합니다.

이러한 단계를 완료하면 앱이 다시 시작됩니다.

대상 리소스 구성

앱의 액세스를 허용하도록 대상 리소스를 구성해야 합니다. 대부분의 Azure 서비스의 경우 역할 할당을 만들어 대상 리소스를 구성합니다.

일부 서비스는 Azure 역할 기반 액세스 제어 이외의 메커니즘을 사용합니다. ID를 사용하여 액세스를 구성하는 방법을 이해하려면 각 대상 리소스에 대한 설명서를 참조하세요. Microsoft Entra 토큰을 지원하는 리소스에 대한 자세한 내용은 Microsoft Entra 인증을 지원하는 Azure 서비스를 참조하세요.

예를 들어 Azure Key Vault의 비밀에 액세스하기 위해 토큰을 요청하는 경우 관리 ID가 대상 자격 증명 모음의 비밀로 작업할 수 있도록 하는 역할 할당도 만들어야 합니다. 그렇지 않으면 유효한 토큰을 사용하는 경우에도 Key Vault에서 호출을 거부합니다. Azure SQL Database 및 기타 서비스도 마찬가지입니다.

중요합니다

관리 ID에 대한 백 엔드 서비스는 약 24시간 동안 리소스 URI당 캐시를 유지합니다. 관리 ID의 그룹 또는 역할 멤버 자격에 대한 변경 내용이 적용되는 데 몇 시간이 걸릴 수 있습니다. 현재는 만료 전에 관리 ID의 토큰을 강제로 새로 고칠 수 없습니다. 관리 ID의 그룹 또는 역할 멤버 자격을 변경하여 권한을 추가하거나 제거하는 경우 ID를 사용하는 Azure 리소스가 올바른 액세스 권한을 갖도록 몇 시간을 기다려야 할 수 있습니다.

그룹 또는 역할 멤버 자격에 대한 대안은 권한 부여에 관리 ID 사용 제한을 참조하세요.

앱 코드에서 Azure 서비스에 커넥트

앱은 관리 ID를 사용하여 Azure SQL Database, Azure Key Vault 및 Azure Storage와 같이 Microsoft Entra ID가 보호하는 데 도움이 되는 Azure 리소스에 대한 토큰을 가져올 수 있습니다. 이러한 토큰은 애플리케이션의 특정 사용자가 아니라 리소스에 액세스하는 애플리케이션을 나타냅니다.

App Service 및 Azure Functions는 토큰 검색을 위해 내부적으로 액세스할 수 있는 REST 엔드포인트를 제공합니다. 표준 HTTP GET 요청을 사용하여 앱 내에서 REST 엔드포인트에 액세스할 수 있습니다. 모든 언어에서 일반 HTTP 클라이언트를 사용하여 요청을 구현할 수 있습니다.

.NET, JavaScript, Java, Python의 경우 Azure ID 클라이언트 라이브러리는 이 REST 엔드포인트에 대한 추상화 기능을 제공하고 개발 환경을 간소화합니다. 다른 Azure 서비스에 연결하는 것은 서비스별 클라이언트에 자격 증명 개체를 추가하는 것만큼 간단합니다.

원시 HTTP GET 요청은 제공된 두 환경 변수를 사용하며 다음 예제와 같습니다.

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: <ip-address-:-port-in-IDENTITY_ENDPOINT>
X-IDENTITY-HEADER: <value-of-IDENTITY_HEADER>

샘플 응답은 다음 예제와 같을 수 있습니다.

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "00001111-aaaa-2222-bbbb-3333cccc4444"
}

이 응답은 Microsoft Entra 서비스 간 액세스 토큰 요청에 대한 응답과 동일합니다. Key Vault에 액세스하려면 자격 증명 모음을 사용하여 클라이언트 연결에 access_token 값을 추가합니다.

REST 엔드포인트에 대한 자세한 내용은 이 문서의 뒷부분에 있는 REST 엔드포인트 참조를 참조 하세요.

ID 제거

시스템 할당 ID를 제거하면 Microsoft Entra ID에서 삭제됩니다. 앱 리소스 자체를 삭제하면 시스템 할당 ID도 Microsoft Entra ID에서 자동으로 제거됩니다.

  1. 앱 페이지의 왼쪽 메뉴에서 설정>ID를 선택합니다.

  2. ID 유형에 따라 단계를 수행합니다.

    • 시스템 할당 ID의 경우: 시스템 할당 탭에서 상태를해제로 전환합니다. 그런 다음 저장을 선택합니다.
    • 사용자 할당 ID의 경우: 사용자 할당 탭을 선택하고 ID에 대한 확인란을 선택한 다음 제거를 선택합니다. 를 선택하여 확인합니다.

참고 항목

로컬 토큰 서비스 WEBSITE_DISABLE_MSI만 사용하지 않도록 설정하는 애플리케이션 설정을 설정할 수도 있습니다. 그러나 ID는 제자리에 남겨 둡니다. 도구는 여전히 관리 ID를 켜거나 사용하도록 설정됨으로 표시합니다. 따라서 이 설정을 사용하지 않는 것이 좋습니다.

REST 엔드포인트 참조

관리 ID가 있는 앱은 다음 두 가지 환경 변수를 정의하여 이 엔드포인트를 사용할 수 있도록 합니다.

  • IDENTITY_ENDPOINT: 로컬 토큰 서비스의 URL입니다.
  • IDENTITY_HEADER: SSRF(서버 쪽 요청 위조) 공격을 완화하는 데 도움이 되는 헤더입니다. 플랫폼은 값을 회전합니다.

변수는 IDENTITY_ENDPOINT 앱이 토큰을 요청할 수 있는 로컬 URL입니다. 리소스에 대한 토큰을 가져오려면 이 엔드포인트에 대한 HTTP GET 요청을 수행합니다. 다음 매개 변수를 포함합니다.

매개 변수 이름 안으로 설명
resource 쿼리 토큰을 가져와야 하는 리소스의 Microsoft Entra 리소스 URI입니다. 이 리소스는 Microsoft Entra 인증 또는 다른 리소스 URI를 지원하는 Azure 서비스 중 하나일 수 있습니다.
api-version 쿼리 사용할 토큰 API의 버전입니다. 2019-08-01을 사용합니다.
X-IDENTITY-HEADER 헤더 IDENTITY_HEADER 환경 변수의 값. 이 헤더는 SSRF 공격을 완화하는 데 사용됩니다.
client_id 쿼리 (선택 사항) 사용할 사용자 할당 ID의 클라이언트 ID입니다. principal_id, mi_res_id, 또는 object_id을 포함하는 요청에는 사용할 수 없습니다. 모든 ID 매개 변수(client_id, principal_id, object_idmi_res_id)가 생략될 경우 시스템 할당 ID가 사용됩니다.
principal_id 쿼리 (선택 사항) 사용할 사용자 할당 ID의 보안 주체 ID입니다. object_id 매개 변수는 대신 사용할 수 있는 별칭입니다. client_id, mi_res_id, 또는 object_id을 포함하는 요청에는 사용할 수 없습니다. 모든 ID 매개 변수(client_id, principal_id, object_idmi_res_id)가 생략될 경우 시스템 할당 ID가 사용됩니다.
mi_res_id 쿼리 (선택 사항) 사용할 사용자 할당 ID의 Azure 리소스 ID입니다. principal_id, client_id, 또는 object_id을 포함하는 요청에는 사용할 수 없습니다. 모든 ID 매개 변수(client_id, principal_id, object_idmi_res_id)가 생략될 경우 시스템 할당 ID가 사용됩니다.

중요합니다

사용자 할당 ID에 대한 토큰을 가져오려는 경우 선택적 속성 중 하나를 포함합니다. 그렇지 않으면 토큰 서비스는 시스템 할당 ID에 대한 토큰을 가져오려고 시도합니다. 이 토큰은 존재할 수도 있고 없을 수도 있습니다.

다음 자습서를 고려하세요.