az containerapp identity assign 명령을 실행하여 시스템 할당 ID를 만듭니다.
az containerapp identity assign --name myApp --resource-group myResourceGroup --system-assigned
ARM 템플릿을 사용하여 컨테이너 앱 및 리소스의 배포를 자동화할 수 있습니다. 시스템 할당 ID를 추가하려면 ARM 템플릿에 identity 섹션을 추가합니다.
"identity": {
"type": "SystemAssigned"
}
시스템 할당 형식을 추가하면 애플리케이션에 대한 ID를 만들어서 관리하라고 Azure에 알려주는 것입니다. 전체 ARM 템플릿 예제는 ARM API 사양을 참조하세요.
az containerapp create 및 az containerapp job create를 포함한 일부 Azure CLI 명령은 입력에 YAML 파일을 지원합니다. 시스템이 할당한 ID를 추가하려면 YAML 파일에 identity 섹션을 추가합니다.
identity:
type: SystemAssigned
시스템 할당 형식을 추가하면 애플리케이션에 대한 ID를 만들어서 관리하라고 Azure에 알려주는 것입니다. 전체 YAML 템플릿 예제는 ARM API 사양을 참조하세요.
사용자 할당 ID 추가
사용자 할당 ID를 사용하여 컨테이너 앱을 구성하려면 먼저 ID를 만든 다음 해당 리소스 식별자를 컨테이너 앱의 구성에 추가해야 합니다. Azure Portal 또는 Azure CLI를 통해 사용자 할당 ID를 만들 수 있습니다. 사용자 할당 ID를 만들고 관리하는 방법에 대한 자세한 내용은 사용자 할당 관리형 ID 관리를 참조하세요.
애플리케이션에는 시스템 할당 ID와 사용자 할당 ID 둘 다 동시에 있을 수 있습니다. 이 경우에 유형 속성은 SystemAssigned,UserAssigned가 됩니다.
대상 리소스 구성
일부 리소스의 경우 앱의 관리형 ID가 액세스 권한을 부여하도록 역할 할당을 구성해야 합니다. 그렇지 않으면 앱에서 Azure Key Vault 및 Azure SQL Database 같은 서비스로의 호출이 해당 ID에 유효한 토큰을 사용하는 경우에도 거부됩니다. 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 클라이언트를 사용하여 구현할 수 있는 표준 HTTP GET을 사용하여 앱 내에서 액세스할 수 있습니다. .NET, JavaScript, Java, Python의 경우 Azure ID 클라이언트 라이브러리는 이 REST 엔드포인트에 대한 추상화 기능을 제공합니다. 다른 Azure 서비스에 연결하는 것은 서비스별 클라이언트에 자격 증명 개체를 추가하는 것만큼 간단합니다.
참고 항목
Azure ID 클라이언트 라이브러리를 사용하는 경우 사용자 할당 관리 ID 클라이언트 ID를 할당해야 합니다.
IDENTITY_ENDPOINT 환경 변수에서 토큰 엔드포인트 URL을 가져옵니다. x-identity-header에는 IDENTITY_HEADER 환경 변수에 저장된 GUID가 포함되어 있습니다.
GET http://localhost:42356/msi/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
x-identity-header: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a
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가 사용됩니다.
Important
사용자 할당 ID에 대한 토큰을 가져오려고 시도하는 경우 선택적 속성 중 하나를 포함해야 합니다. 그러지 않으면 토큰 서비스는 시스템 할당 ID에 대한 토큰을 가져오려고 시도하는데 이는 존재 여부가 불분명합니다.
관리형 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는 제거되지 않습니다.