Azure Container Apps의 관리형 ID
Microsoft Entra ID의 관리 ID를 사용하면 컨테이너 앱이 다른 Microsoft Entra로 보호된 리소스에 액세스할 수 있습니다. Microsoft Entra ID의 관리 ID에 대한 자세한 내용은 Azure 리소스의 관리 ID를 참조하세요.
컨테이너 앱에 두 가지 형식의 ID를 부여할 수 있습니다.
- 시스템 할당 ID는 컨테이너 앱과 연결되고 컨테이너 앱이 삭제되면 삭제됩니다. 앱에는 하나의 시스템 할당 ID만 있을 수 있습니다.
- 사용자 할당 ID는 컨테이너 앱 및 기타 리소스에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 컨테이너 앱에는 여러 사용자 할당 ID가 있을 수 있습니다. 사용자 할당 ID는 삭제할 때까지 존재합니다.
관리 ID를 사용하는 이유
실행 중인 컨테이너에서 관리 ID를 사용하면 Microsoft Entra 인증을 지원하는 서비스에서 인증을 받을 수 있습니다.
관리형 ID를 사용하여 다음을 수행합니다.
- 앱이 관리형 ID를 사용하여 리소스에 연결합니다. 컨테이너 앱에서 자격 증명을 관리할 필요가 없습니다.
- 역할 기반 액세스 제어를 사용하여 관리형 ID에 특정 권한을 부여할 수 있습니다.
- 시스템 할당 ID는 자동으로 생성되고 관리됩니다. 컨테이너 앱이 삭제되면 삭제됩니다.
- 사용자 할당 ID를 추가 및 삭제하고 여러 리소스에 할당할 수 있습니다. 컨테이너 앱의 수명 주기와는 독립적입니다.
- 관리 ID를 사용하여 사용자 이름 및 암호 없이 프라이빗 Azure Container Registry 로 인증하여 컨테이너 앱에 대한 컨테이너를 끌어올 수 있습니다.
- 관리 ID를 사용하여 Dapr 구성 요소를 통해 Dapr 지원 애플리케이션에 대한 연결을 만들 수 있습니다.
일반 사용 예
시스템 할당 ID는 다음과 같은 워크로드에 가장 적합합니다.
- 단일 리소스 내에 포함되어 있는 워크로드
- 독립적 ID가 필요한 워크로드
사용자 할당 ID는 다음과 같은 워크로드에 적합합니다.
- 여러 리소스에서 실행되며 단일 ID를 공유할 수 있는 워크로드
- 보안 리소스에 대한 사전 인증이 필요한 워크로드
제한 사항
Init 컨테이너는 소비 전용 환경 및 전용 워크로드 프로필 환경에서 관리 ID에 액세스할 수 없습니다.
관리되는 ID 구성
다음을 통해 관리형 ID를 구성할 수 있습니다.
- Azure Portal
- Azure CLI
- ARM(Azure Resource Manager) 템플릿
실행 중인 컨테이너 앱에서 관리형 ID를 추가, 삭제 또는 수정하면 앱이 자동으로 다시 시작되지 않고 새 수정 버전이 만들어지지 않습니다.
참고 항목
2022년 4월 11일 이전에 배포된 컨테이너 앱에 관리형 ID를 추가하는 경우 새 수정 버전을 만들어야 합니다.
시스템 할당 ID 추가
Azure Portal에서 컨테이너 앱으로 이동합니다.
설정 그룹에서 ID를 선택합니다.
시스템 할당 탭에서 상태를 켜기로 바꿉니다.
저장을 선택합니다.
사용자 할당 ID 추가
사용자 할당 ID를 사용하여 컨테이너 앱을 구성하려면 먼저 ID를 만든 다음 해당 리소스 식별자를 컨테이너 앱의 구성에 추가해야 합니다. Azure Portal 또는 Azure CLI를 통해 사용자 할당 ID를 만들 수 있습니다. 사용자 할당 ID를 만들고 관리하는 방법에 대한 자세한 내용은 사용자 할당 관리형 ID 관리를 참조하세요.
먼저, 사용자 할당 ID 리소스를 만들어야 합니다.
사용자 할당 관리형 ID 관리에 있는 단계에 따라 사용자 할당 관리형 ID 리소스를 만듭니다.
Azure Portal에서 컨테이너 앱으로 이동합니다.
설정 그룹에서 ID를 선택합니다.
사용자 할당 탭 내에서 추가를 선택합니다.
이전에 만든 ID를 검색하고 선택합니다.
추가를 선택합니다.
대상 리소스 구성
일부 리소스의 경우 액세스 권한을 부여하도록 앱의 관리 ID에 대한 역할 할당을 구성해야 합니다. 그렇지 않으면 해당 ID에 유효한 토큰을 사용하는 경우에도 앱에서 Azure Key Vault 및 Azure SQL Database와 같은 서비스로의 호출이 거부됩니다. Azure RBAC(역할 기반 액세스 제어)에 대한 자세한 정보는 RBAC란?을 참조하세요. Microsoft Entra 토큰을 지원하는 리소스에 대한 자세한 내용은 Microsoft Entra 인증을 지원하는 Azure 서비스를 참조하세요.
Important
관리 ID에 대한 백 엔드 서비스는 약 24시간 동안 리소스 URI당 캐시를 유지합니다. 특정 대상 리소스의 액세스 정책을 업데이트하고 해당 리소스에 대한 토큰을 즉시 검색하는 경우 토큰이 만료될 때까지 오래된 권한으로 캐시된 토큰을 계속 가져올 수 있습니다. 토큰 새로 고침 강제 적용은 지원되지 않습니다.
앱 코드에서 Azure 서비스에 커넥트
앱은 관리형 ID를 사용하여 Azure SQL Database, Azure Key Vault, Azure Storage 같은 Microsoft Entra ID를 사용하는 Azure 리소스에 액세스하기 위한 토큰을 획득할 수 있습니다. 이러한 토큰은 애플리케이션의 특정 사용자가 아닌 리소스에 액세스하는 애플리케이션을 나타냅니다.
Container Apps는 토큰을 검색하기 위해 내부적으로 액세스할 수 있는 REST 엔드포인트를 제공합니다. REST 엔드포인트는 표준 HTTP GET
요청이 있는 앱 내에서 사용할 수 있으며, 기본 설정 언어로 일반 HTTP 클라이언트와 함께 보낼 수 있습니다. .NET, JavaScript, Java, Python의 경우 Azure ID 클라이언트 라이브러리는 이 REST 엔드포인트에 대한 추상화 기능을 제공합니다. 서비스별 클라이언트에 자격 증명 개체를 추가하여 다른 Azure 서비스에 연결할 수 있습니다.
참고 항목
Azure ID 클라이언트 라이브러리를 사용하는 경우 사용자 할당 관리 ID 클라이언트 ID를 명시적으로 지정해야 합니다.
참고 항목
Entity Framework Core를 사용하여 Azure SQL 데이터 원본에 연결할 때 관리 ID 연결에 특별한 연결 문자열을 제공하는 Microsoft.Data.SqlClient를 사용하는 것이 좋습니다.
.NET 앱의 경우 .NET용 Azure ID 클라이언트 라이브러리를 통해 관리형 ID를 사용하는 것이 가장 간단한 방법입니다. 자세한 내용은 다음 리소스를 참조하세요.
연결된 예제에서는 DefaultAzureCredential
을 사용합니다. 이 개체는 Azure(관리 ID 포함) 및 로컬 컴퓨터(관리 ID 제외)에서 동일한 패턴이 작동하기 때문에 대부분의 시나리오에서 효과적입니다.
크기 조정 규칙에 관리 ID 사용
확장 규칙에서 관리 ID를 사용하여 관리 ID를 지원하는 Azure 서비스를 인증할 수 있습니다. 확장 규칙에서 관리 ID를 사용하려면 크기 조정 규칙의 auth
속성 대신 속성을 사용합니다identity
. 속성에 identity
허용되는 값은 사용자 할당 ID의 Azure 리소스 ID이거나 system
시스템 할당 ID를 사용하는 것입니다.
참고 항목
확장 규칙의 관리 ID 인증은 공개 미리 보기로 제공됩니다. API 버전 2024-02-02-preview
에서 사용할 수 있습니다.
다음 ARM 템플릿 예제에서는 Azure Queue Storage 확장 규칙으로 관리 ID를 사용하는 방법을 보여 줍니다.
큐 스토리지 계정은 속성을 사용하여 accountName
스토리지 계정을 식별하고 속성은 identity
사용할 관리 ID를 지정합니다. 속성을 사용할 auth
필요가 없습니다.
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [{
"name": "myQueueRule",
"azureQueue": {
"accountName": "mystorageaccount",
"queueName": "myqueue",
"queueLength": 2,
"identity": "<IDENTITY1_RESOURCE_ID>"
}
}]
}
확장 규칙과 함께 관리 ID를 사용하는 방법에 대한 자세한 내용은 Azure Container Apps에서 크기 조정 규칙 설정을 참조 하세요.
관리 ID 가용성 제어
Container Apps를 사용하면 init 컨테이너 및 기본 컨테이너를 지정할 수 있습니다. 기본적으로 소비 워크로드 프로필 환경의 기본 컨테이너와 초기화 컨테이너는 모두 관리 ID를 사용하여 다른 Azure 서비스에 액세스할 수 있습니다. 소비 전용 환경 및 전용 워크로드 프로필 환경에서는 주 컨테이너만 관리 ID를 사용할 수 있습니다. 관리 ID 액세스 토큰은 컨테이너 앱에 구성된 모든 관리 ID에 사용할 수 있습니다. 그러나 일부 상황에서는 init 컨테이너 또는 기본 컨테이너만 관리 ID에 대한 액세스 토큰이 필요합니다. 다른 경우에는 관리 ID를 사용하여 Azure Container Registry에 액세스하여 컨테이너 이미지를 끌어올 수 있으며 애플리케이션 자체에서 Azure Container Registry에 액세스할 필요가 없습니다.
API 버전 2024-02-02-preview
부터 init 및 기본 단계 중에 컨테이너 앱에서 사용할 수 있는 관리 ID를 제어하여 최소 권한의 보안 원칙을 따를 수 있습니다. 다음 옵션을 사용할 수 있습니다.
Init
: 컨테이너를 초기화하기 위해서만 사용할 수 있습니다. 관리 ID가 필요하지만 주 컨테이너에 관리 ID가 더 이상 필요하지 않은 초기화 작업을 수행하려는 경우 이 작업을 사용합니다. 이 옵션은 현재 워크로드 프로필 사용 환경에서만 지원 됩니다.Main
: 기본 컨테이너에만 사용할 수 있습니다. init 컨테이너에 관리 ID가 필요하지 않은 경우 이 기능을 사용합니다.All
: 모든 컨테이너에서 사용할 수 있습니다. 이 값은 기본 설정입니다.None
: 컨테이너에서 사용할 수 없습니다. ACR 이미지 끌어오기, 크기 조정 규칙 또는 Key Vault 비밀에만 사용되며 컨테이너에서 실행되는 코드에 사용할 필요가 없는 관리 ID가 있는 경우 사용합니다.
다음 ARM 템플릿 예제에서는 워크로드 프로필 사용 환경에서 컨테이너 앱을 구성하는 방법을 보여 줍니다.
- 컨테이너 앱의 시스템 할당 ID를 기본 컨테이너로만 제한합니다.
- 특정 사용자 할당 ID를 컨테이너만 초기화하도록 제한합니다.
- 컨테이너의 코드가 해당 관리 ID를 사용하여 레지스트리에 액세스하도록 허용하지 않고 Azure Container Registry 이미지 끌어오기의 특정 사용자 할당 ID를 사용합니다. 이 예제에서는 컨테이너 자체가 레지스트리에 액세스할 필요가 없습니다.
이 방법은 악의적인 행위자가 컨테이너에 무단으로 액세스하는 경우 액세스할 수 있는 리소스를 제한합니다.
{
"location": "eastus2",
"identity":{
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>":{},
"<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
}
},
"properties": {
"workloadProfileName":"Consumption",
"environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
"configuration": {
"registries": [
{
"server": "myregistry.azurecr.io",
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
}],
"identitySettings":[
{
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
"lifecycle": "None"
},
{
"identity": "<IDENTITY1_RESOURCE_ID>",
"lifecycle": "Init"
},
{
"identity": "system",
"lifecycle": "Main"
}]
},
"template": {
"containers":[
{
"image":"myregistry.azurecr.io/main:1.0",
"name":"app-main"
}
],
"initContainers":[
{
"image":"myregistry.azurecr.io/init:1.0",
"name":"app-init",
}
]
}
}
}
관리형 ID 보기
다음 Azure CLI 명령을 사용하여 시스템 할당 및 사용자 할당 관리형 ID를 표시할 수 있습니다. 출력에는 컨테이너 앱에 할당된 모든 관리 ID의 관리 ID 유형, 테넌트 ID 및 보안 주체 ID가 표시됩니다.
az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>
관리 ID 제거
시스템이 할당한 ID를 제거하면 Microsoft Entra ID에서 삭제됩니다. 컨테이너 앱 리소스 자체를 삭제하면 시스템 할당 ID도 Microsoft Entra ID에서 자동으로 제거됩니다. 컨테이너 앱에서 사용자 할당 관리형 ID를 제거해도 Microsoft Entra ID는 제거되지 않습니다.
앱 페이지의 왼쪽 탐색 영역에서 설정 그룹으로 아래로 스크롤합니다.
ID를 선택합니다. 그런 다음, ID 유형에 따라 단계를 수행합니다.
- 시스템 할당 ID: 시스템 할당 탭 내에서 상태를 끄기로 전환합니다. 저장을 선택합니다.
- 사용자 할당 ID: 사용자 할당 탭을 선택하고 ID에 대한 확인란을 선택한 다음, 제거를 선택합니다. 예를 선택하여 확인합니다.