이벤트
App Service 및 Azure Functions에 대한 관리 ID를 사용하는 방법
참고
2024년 6월 1일부터 새로 만든 App Service 앱은 명명 규칙을 <app-name>-<random-hash>.<region>.azurewebsites.net
사용하는 고유한 기본 호스트 이름을 생성할 수 있습니다. 기존 앱 이름은 변경되지 않은 상태로 유지됩니다. 예시:
myapp-ds27dh7271aah175.westus-01.azurewebsites.net
자세한 내용은 App Service 리소스에 대한 고유 기본 호스트 이름을 참조 하세요.
이 문서에서는 App Service 및 Azure Functions 애플리케이션에 대한 관리 ID를 만드는 방법과 다른 리소스에 액세스하는 데 사용하는 방법을 보여 줍니다.
중요
관리 ID는디렉터리 간 시나리오를 지원하지 않으므로 앱이 구독 또는 테넌트 간에 마이그레이션되는 경우 예상대로 동작하지 않습니다. 이러한 이동 후 관리 ID를 다시 만들려면 구독을 다른 디렉터리로 이동하는 경우 관리 ID가 자동으로 다시 만들어지나요?를 참조하세요. 다운스트림 리소스에도 새 ID를 사용하려면 액세스 정책을 업데이트해야 합니다.
참고
Azure Arc에 배포된 앱에 대해서는 관리 ID를 사용할 수 없습니다.
Microsoft Entra ID의 관리 ID를 사용하면 앱이 Azure Key Vault 등의 다른 Microsoft Entra 보호 리소스에 쉽게 액세스할 수 있습니다. ID는 Azure 플랫폼에서 관리하며 비밀을 프로비전하거나 회전할 필요가 없습니다. Microsoft Entra ID의 관리 ID에 대한 자세한 내용은 Azure 리소스의 관리 ID를 참조하세요.
애플리케이션에 두 가지 형식의 ID를 부여할 수 있습니다.
- 시스템 할당 ID는 앱에 연결되어 있으며 앱이 삭제되면 삭제됩니다. 앱에는 하나의 시스템 할당 ID만 있을 수 있습니다.
- 사용자 할당 ID는 앱에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 앱에는 여러 사용자 할당 ID가 있을 수 있으며, 하나의 사용자 할당 ID를 두 개의 App Service 앱과 같은 여러 Azure 리소스에 할당할 수 있습니다.
관리 ID 구성은 슬롯과 관련이 있습니다. 포털에서 배포 슬롯에 대한 관리 ID를 구성하려면 먼저 슬롯으로 이동합니다. Azure Portal에서 Microsoft Entra 테넌트의 웹앱 또는 배포 슬롯에 대한 관리 ID를 찾으려면 테넌트의 개요 페이지에서 직접 검색합니다. 일반적으로 슬롯 이름은 <app-name>/slots/<slot-name>
과 비슷합니다.
다음 비디오에서는 App Service에 관리 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를 사용하도록 설정하려면 해당 앱 또는 슬롯에 대한 쓰기 권한이 필요합니다. 웹 사이트 참가자 역할은 이러한 권한을 제공합니다.
왼쪽 탐색 창의 설정 그룹 아래에 있는 Azure Portal 앱의 설정에 액세스합니다.
ID를 선택합니다.
시스템 할당 탭에서 상태를 켜기로 바꿉니다. 저장을 클릭합니다.
사용자 할당 ID로 앱을 만들려면 ID를 만든 다음, 앱 구성에 리소스 ID를 추가해야 합니다.
앱 또는 슬롯에 사용자 할당 관리 ID를 할당하려면 해당 앱 또는 슬롯에 대한 쓰기 권한이 필요합니다. 웹 사이트 참가자 역할은 이러한 권한을 제공합니다. 또한 사용할 사용자 할당 관리 ID를 할당할 수 있는 권한이 있어야 합니다. 관리 ID 운영자 역할은 이러한 권한을 제공합니다.
먼저, 사용자 할당 ID 리소스를 만들어야 합니다.
이러한 지침에 따라 사용자 할당 관리 ID 리소스를 만듭니다.
앱 페이지의 왼쪽 탐색 영역에서 설정 그룹으로 아래로 스크롤합니다.
ID를 선택합니다.
사용자 할당>추가를 선택합니다.
이전에 만든 ID를 검색하여 선택한 후 추가를 선택합니다.
추가를 선택하면 앱이 다시 시작됩니다.
앱의 액세스를 허용하도록 대상 리소스를 구성해야 합니다. 대부분의 Azure 서비스에서는 역할 할당을 만들어 이 작업을 수행합니다. 일부 서비스는 Azure RBAC 이외의 메커니즘을 사용합니다. ID를 사용하여 액세스를 구성하는 방법을 이해하려면 각 대상 리소스에 대한 설명서를 참조하세요. Microsoft Entra 토큰을 지원하는 리소스에 대한 자세한 내용은 Microsoft Entra 인증을 지원하는 Azure 서비스를 참조하세요.
예를 들어 Key Vault의 비밀에 액세스하기 위해 토큰을 요청하는 경우 관리 ID가 대상 자격 증명 모음의 비밀과 함께 작동할 수 있도록 하는 역할 할당도 만들어야 합니다. 그렇지 않으면 유효한 토큰을 사용하는 경우에도 Key Vault에 대한 호출이 거부됩니다. Azure SQL Database 및 기타 서비스도 마찬가지입니다.
중요
관리 ID에 대한 백 엔드 서비스는 약 24시간 동안 리소스 URI당 캐시를 유지합니다. 즉, 관리 ID의 그룹 또는 역할 멤버 자격에 대한 변경 내용이 적용되는 데 몇 시간이 걸릴 수 있습니다. 현재는 관리 ID의 토큰이 만료되기 전에 강제로 새로 고칠 수 없습니다. 관리 ID의 그룹 또는 역할 멤버 자격을 변경하여 권한을 추가하거나 제거하는 경우, 해당 ID를 사용하는 Azure 리소스에 올바른 액세스 권한이 부여될 때까지 몇 시간 동안 기다려야 할 수 있습니다. 그룹 또는 역할 멤버 자격에 대한 대안은 권한 부여에 관리 ID 사용 제한을 참조하세요.
앱은 관리 ID를 사용하여 Azure SQL Database, Azure Key Vault 및 Azure Storage와 같은 Microsoft Entra ID로 보호되는 Azure 리소스에 대한 토큰을 가져올 수 있습니다. 이러한 토큰은 애플리케이션의 특정 사용자가 아닌 리소스에 액세스하는 애플리케이션을 나타냅니다.
App Service 및 Azure Functions는 토큰 검색을 위해 내부적으로 액세스할 수 있는 REST 엔드포인트를 제공합니다. REST 엔드포인트는 모든 언어의 일반 HTTP 클라이언트를 사용하여 구현할 수 있는 표준 HTTP GET을 사용하여 앱 내에서 액세스할 수 있습니다. .NET, JavaScript, Java, Python의 경우 Azure ID 클라이언트 라이브러리는 이 REST 엔드포인트에 대한 추상화 기능을 제공하고 개발 환경을 간소화합니다. 다른 Azure 서비스에 연결하는 것은 서비스별 클라이언트에 자격 증명 개체를 추가하는 것만큼 간단합니다.
참고
Entity Framework Core를 사용하여 Azure SQL 데이터 원본에 연결할 때 관리 ID 연결에 특별한 연결 문자열을 제공하는 Microsoft.Data.SqlClient를 사용하는 것이 좋습니다. 예제는 자습서: 관리 ID를 사용하여 App Service에서 Azure SQL Database 연결 보호를 참조하세요.
.NET 앱 및 함수의 경우 .NET용 Azure ID 클라이언트 라이브러리를 통해 관리 ID를 사용하는 것이 가장 간단한 방법입니다. 자세한 지침은 자습서: 관리 ID를 사용하여 비밀 없이 App Service에서 Azure 데이터베이스에 연결을 참조하세요.
자세한 내용은 클라이언트 라이브러리의 해당 설명서 제목을 참조하세요.
연결된 예제에서는 DefaultAzureCredential
을 사용합니다. 동일한 패턴이 Azure(관리 ID 포함) 및 로컬 머신(관리 ID 제외)에서 작동하기 때문에 대부분의 시나리오에 유용합니다.
REST 엔드포인트에 대한 자세한 내용은 REST 엔드포인트 참조를 참조하세요.
시스템 할당 ID를 제거하면 Microsoft Entra ID에서 삭제됩니다. 앱 리소스 자체를 삭제하면 시스템 할당 ID도 Microsoft Entra ID에서 자동으로 제거됩니다.
앱 또는 슬롯에서 관리 ID를 제거하려면 해당 앱 또는 슬롯에 대한 쓰기 권한이 필요합니다. 웹 사이트 참가자 역할은 이러한 권한을 제공합니다.
앱 페이지의 왼쪽 탐색 영역에서 설정 그룹으로 아래로 스크롤합니다.
ID를 선택합니다. 그런 다음, ID 유형에 따라 단계를 수행합니다.
- 시스템 할당 ID: 시스템 할당 탭 내에서 상태를 끄기로 전환합니다. 저장을 클릭합니다.
- 사용자 할당 ID: 사용자 할당 탭을 선택하고 ID에 대한 확인란을 선택한 다음, 제거를 선택합니다. 예를 선택하여 확인합니다.
참고
설정할 수 있는 애플리케이션 설정인 WEBSITE_DISABLE_MSI도 있으며 이것은 로컬 토큰 서비스를 비활성화합니다. 그러나 ID는 그대로 두고 도구는 관리 ID를 “켜짐” 또는 “사용”으로 표시합니다. 따라서 이 설정을 사용하지 않는 것이 좋습니다.
관리 ID가 있는 앱은 다음 두 가지 환경 변수를 정의하여 이 엔드포인트를 사용할 수 있도록 합니다.
- IDENTITY_ENDPOINT - 로컬 토큰 서비스의 URL입니다.
- IDENTITY_HEADER - SSRF(서버 쪽 요청 위조) 공격을 완화하는 데 사용되는 헤더입니다. 플랫폼에서 값을 회전합니다.
IDENTITY_ENDPOINT는 앱이 토큰을 요청할 수 있는 로컬 URL입니다. 리소스 토큰을 가져오려면 이 엔드포인트에 다음 매개 변수를 포함하여 HTTP GET 요청을 보냅니다.
매개 변수 이름 In 설명 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_id
및mi_res_id
)가 생략될 경우 시스템 할당 ID가 사용됩니다.principal_id 쿼리 (선택 사항) 사용할 사용자 할당 ID의 보안 주체 ID입니다. object_id
는 대신 사용할 수 있는 별칭입니다. client_id, mi_res_id 또는 object_id를 포함하는 요청에 사용할 수 없습니다. 모든 ID 매개 변수(client_id
,principal_id
,object_id
및mi_res_id
)가 생략될 경우 시스템 할당 ID가 사용됩니다.mi_res_id 쿼리 (선택 사항) 사용할 사용자 할당 ID의 Azure 리소스 ID입니다. principal_id
,client_id
또는object_id
를 포함하는 요청에 사용할 수 없습니다. 모든 ID 매개 변수(client_id
,principal_id
,object_id
및mi_res_id
)가 생략될 경우 시스템 할당 ID가 사용됩니다.
중요
사용자 할당 ID에 대한 토큰을 가져오려고 시도하는 경우 선택적 속성 중 하나를 포함해야 합니다. 그러지 않으면 토큰 서비스는 시스템 할당 ID에 대한 토큰을 가져오려고 시도하는데 이는 존재 여부가 불분명합니다.
추가 리소스
학습
인증
Microsoft Certified: Identity and Access Administrator Associate - Certifications
ID 솔루션을 현대화하고, 하이브리드 솔루션을 구현하고, ID 거버넌스를 구현하는 Microsoft Entra ID의 기능을 시연합니다.
설명서
-
Key Vault 참조 사용 - Azure App Service
Azure App Service 및 Azure Functions를 설정하여 Azure Key Vault 참조를 사용하는 방법을 알아봅니다. 애플리케이션 코드에 Key Vault 비밀을 사용할 수 있게 합니다.
-
관리 ID를 사용하여 App Configuration 액세스 - Azure App Configuration
관리 ID를 사용하여 Azure App Configuration에 인증
-
Azure 앱 Service/Functions 간의 인증에 관리 ID 사용
관리 ID는 Azure의 고유한 기능 중 하나이며 호출자 자격 증명을 저장하지 않고 호출자를 인증하고 호출된 리소스에 대해 RBAC를 구성할 수 있습니다. Azure 문서에서 관리 ID를 사용하는 몇 가지 예제를 볼 수 있지만 다음 질문이 떠오를 수 있습니다. 관리 ID를 사용하여 Azure 앱 Services/Functions 간에 인증을 구성하려면 어떻게 해야 하나요? 이러한 구성을 달성할 수 없나요? 가능하면 Java에서 App Service/Functions를 구현하여 이 개념을 달성하려면 어떻게 해야 할까요? 이 대화에서는 App Service/Functions 간의 인증에 관리 ID를 사용하고 Java 샘플 코드를 사용하여 해당 사용 사례를 사용하는 방법을 자세히 설명합니다.