Azure Container Instances에서 관리 ID를 사용하는 방법
Azure 리소스의 관리 ID를 사용하여 비밀 또는 자격 증명을 코드에 유지하지 않고, 다른 Azure 서비스와 상호 작용하는 Azure Container Instances에서 코드를 실행합니다. 이 기능은 Microsoft Entra ID에서 자동으로 관리되는 ID를 Azure Container Instances 배포에 제공합니다.
이 문서에서는 Azure Container Instances의 관리 ID에 대해 알아보고 다음 작업을 수행합니다.
- 컨테이너 그룹에서 사용자 할당 또는 시스템 할당 ID를 사용하도록 설정
- Azure 키 자격 증명 모음에 ID 액세스 권한 부여
- 관리 ID를 사용하여 실행 중인 컨테이너에서 키 자격 증명 모음에 액세스
다른 Azure 서비스에 액세스하려면 예제를 조정하여 Azure Container Instances에서 ID를 사용하도록 설정하고 사용합니다. 이러한 예제는 대화형입니다. 그러나 실제로 컨테이너 이미지는 Azure 서비스에 액세스하는 코드를 실행합니다.
관리 ID를 사용하는 이유
실행 중인 컨테이너에서 관리 ID를 사용하면 컨테이너 코드에서 자격 증명을 관리하지 않고, Microsoft Entra 인증을 지원하는 서비스에서 인증을 받을 수 있습니다. AD 인증을 지원하지 않는 서비스의 경우, Azure 키 자격 증명 모음에 비밀을 저장하고, 관리 ID를 통해 키 자격 증명 모음에 액세스하여 자격 증명을 검색할 수 있습니다. 관리 ID 사용에 대한 자세한 내용은 Azure 리소스용 관리 ID란?을 참조하세요.
관리 ID 사용
컨테이너 그룹을 만들 때 ContainerGroupIdentity 속성을 설정하여 하나 이상의 관리 ID를 사용하도록 설정합니다. 컨테이너 그룹을 실행한 후에 관리 ID를 사용하도록 설정하거나 업데이트할 수도 있습니다. 두 경우 모두 컨테이너 그룹이 다시 시작됩니다. 새 컨테이너 또는 기존 컨테이너 그룹에 대해 ID를 설정하려면 Azure CLI, Resource Manager 템플릿, YAML 파일 또는 다른 Azure 도구를 사용합니다.
Azure Container Instances는 두 가지 유형의 Azure 관리 ID인 사용자 할당 및 시스템 할당 ID를 지원합니다. 컨테이너 그룹에서 시스템 할당 ID 또는 하나 이상의 사용자 할당 ID를 사용하도록 설정하거나 두 가지 유형의 ID를 모두 사용할 수 있습니다. Azure 리소스에 대한 관리 ID에 익숙하지 않은 경우 개요를 참조하세요.
관리 ID 사용
관리 ID를 사용하려면 구독에서 하나 이상의 Azure 서비스 리소스(예: 웹앱, 키 자격 증명 모음 또는 스토리지 계정)에 대한 액세스 권한을 ID에 부여해야 합니다. 실행 중인 컨테이너에서 관리 ID를 사용하는 것은 Azure VM(가상 머신)에서 ID를 사용하는 것과 비슷합니다. 토큰, Azure PowerShell 또는 Azure CLI 또는 Azure SDK를 사용하기 위한 VM 지침을 참조하세요.
사전 요구 사항
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- 이 문서에는 Azure CLI 버전 2.0.49 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
Azure 키 자격 증명 모음 만들기
이 문서의 예는 Azure Container Instances에서 관리 ID를 사용하여 Azure 키 자격 증명 모음 비밀에 액세스합니다.
먼저, 다음 az group create 명령을 사용하여 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.
az group create --name myResourceGroup --location eastus
az keyvault create 명령을 사용하여 키 자격 증명 모음을 만듭니다. 고유한 키 자격 증명 모음 이름을 지정해야 합니다.
az keyvault create \
--name mykeyvault \
--resource-group myResourceGroup \
--location eastus
az keyvault secret set 명령을 사용하여 샘플 비밀을 키 자격 증명 모음에 저장합니다.
az keyvault secret set \
--name SampleSecret \
--value "Hello Container Instances" \
--description ACIsecret --vault-name mykeyvault
다음 예를 계속 진행하면서 Azure Container Instances에서 사용자 할당 또는 시스템 할당 관리 ID를 사용하여 키 자격 증명 모음에 액세스합니다.
예 1: 사용자 할당 ID를 사용하여 Azure 키 자격 증명 모음에 액세스
ID 만들기
먼저 az identity create 명령을 사용하여 구독에서 ID를 만듭니다. 키 자격 증명 모음을 만드는 데 사용한 동일한 리소스 그룹을 사용하거나 다른 리소스 그룹을 사용할 수 있습니다.
az identity create \
--resource-group myResourceGroup \
--name myACIId
다음 단계에서 ID를 사용하려면 az identity show 명령을 사용하여 ID의 서비스 주체 ID 및 리소스 ID를 변수에 저장합니다.
# Get service principal ID of the user-assigned identity
SP_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
# Get resource ID of the user-assigned identity
RESOURCE_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query id --output tsv)
사용자 할당 ID에 키 자격 증명 모음에 대한 액세스 권한 부여
다음 az keyvault set-policy 명령을 실행하여 키 자격 증명 모음에 대한 액세스 정책을 설정합니다. 다음 예에서는 사용자 할당 ID가 키 자격 증명 모음에서 비밀을 가져올 수 있도록 합니다.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
컨테이너 그룹에 사용자 할당 ID 사용
다음 az container create 명령을 실행하여 Microsoft의 azure-cli
이미지를 기준으로 컨테이너 인스턴스를 만듭니다. 이 예에서는 대화형으로 사용하여 Azure CLI를 실행하여 다른 Azure 서비스에 액세스할 수 있는 단일 컨테이너 그룹을 제공합니다. 이 섹션에서는 기본 운영 체제만 사용됩니다. 컨테이너에서 Azure CLI를 사용하는 예는 컨테이너 그룹에서 시스템 할당 ID 사용을 참조하세요.
--assign-identity
매개 변수는 그룹에 사용자 할당 관리 ID를 전달합니다. 장기 실행 명령이 컨테이너가 계속 실행되도록 합니다. 이 예에서는 키 자격 증명 모음을 만드는 데 사용한 동일한 리소스 그룹을 사용하지만 다른 리소스 그룹을 지정해도 됩니다.
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity $RESOURCE_ID \
--command-line "tail -f /dev/null"
몇 초 내에 Azure CLI로부터 배포가 완료되었음을 알려주는 응답을 받습니다. az container show 명령을 사용하여 상태를 확인합니다.
az container show \
--resource-group myResourceGroup \
--name mycontainer
출력의 identity
섹션은 다음과 유사하며 ID가 컨테이너 그룹에 설정되어 있음을 나타냅니다. userAssignedIdentities
아래의 principalID
는 Microsoft Entra ID에서 만든 ID의 서비스 주체입니다.
[...]
"identity": {
"principalId": "null",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
}
},
[...]
사용자 할당 ID를 사용하여 키 자격 증명 모음에서 비밀 가져오기
이제 실행 중인 컨테이너 인스턴스 내에서 관리 ID를 사용하여 키 자격 증명 모음에 액세스할 수 있습니다. 먼저 컨테이너에서 bash 셸을 시작합니다.
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
컨테이너의 bash 셸에서 다음 명령을 실행합니다. Microsoft Entra ID를 사용하여 키 자격 증명 모음에서 인증을 받기 위한 액세스 토큰을 가져오려면 다음 명령을 실행합니다.
client_id="00001111-aaaa-2222-bbbb-3333cccc4444"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s
출력
{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}
후속 명령에서 인증을 받는 데 사용할 액세스 토큰을 변수에 저장하려면 다음 명령을 실행합니다.
TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')
이제 이 액세스 토큰을 사용하여 키 자격 증명 모음에서 인증을 받고 암호를 읽습니다. URL의 Key Vault 이름을 대체해야 합니다(https://mykeyvault.vault.azure.net/...).
curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"
응답은 다음 예제와 유사하며 비밀을 표시합니다. 코드에서 이 출력을 구문 분석하여 비밀을 가져올 수 있습니다. 그런 다음, 후속 작업에서 이 비밀을 사용하여 다른 Azure 리소스에 액세스합니다.
{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}
예 2: 시스템 할당 ID를 사용하여 Azure 키 자격 증명 모음에 액세스
컨테이너 그룹에서 시스템 할당 ID 사용
다음 az container create 명령을 실행하여 Microsoft의 azure-cli
이미지를 기준으로 컨테이너 인스턴스를 만듭니다. 이 예에서는 대화형으로 사용하여 Azure CLI를 실행하여 다른 Azure 서비스에 액세스할 수 있는 단일 컨테이너 그룹을 제공합니다.
추가 값 없는 --assign-identity
매개 변수를 사용하여 그룹에 대해 시스템 할당 관리 ID를 사용하도록 설정할 수 있습니다. ID의 범위는 컨테이너 그룹의 리소스 그룹으로 지정됩니다. 장기 실행 명령이 컨테이너가 계속 실행되도록 합니다. 이 예에서는 ID의 범위에 있는 키 자격 증명 모음을 만드는 데 사용된 것과 동일한 리소스 그룹을 사용합니다.
# Get the resource ID of the resource group
RG_ID=$(az group show --name myResourceGroup --query id --output tsv)
# Create container group with system-managed identity
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity --scope $RG_ID \
--command-line "tail -f /dev/null"
몇 초 내에 Azure CLI로부터 배포가 완료되었음을 알려주는 응답을 받습니다. az container show 명령을 사용하여 상태를 확인합니다.
az container show \
--resource-group myResourceGroup \
--name mycontainer
출력의 identity
섹션은 다음과 유사하며, 시스템 할당 ID가 Microsoft Entra ID에서 만들어졌음을 나타냅니다.
[...]
"identity": {
"principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
[...]
후속 단계에서 사용할 수 있도록 변수를 ID의 principalId
값(서비스 주체 ID)으로 설정합니다.
SP_ID=$(az container show \
--resource-group myResourceGroup \
--name mycontainer \
--query identity.principalId --out tsv)
컨테이너 그룹에 키 자격 증명 모음에 대한 액세스 권한 부여
다음 az keyvault set-policy 명령을 실행하여 키 자격 증명 모음에 대한 액세스 정책을 설정합니다. 다음 예에서는 시스템 관리 ID를 사용하여 키 자격 증명 모음에서 비밀을 가져올 수 있습니다.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
컨테이너 그룹 ID를 사용하여 키 자격 증명 모음에서 비밀 가져오기
이제 관리 ID를 사용하여 실행 중인 컨테이너 인스턴스 내에서 키 자격 증명 모음에 액세스할 수 있습니다. 먼저 컨테이너에서 bash 셸을 시작합니다.
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
컨테이너의 bash 셸에서 다음 명령을 실행합니다. 먼저 관리 ID를 사용하여 Azure CLI에 로그인합니다.
az login --identity
실행 중인 컨테이너의 키 자격 증명 모음에서 암호를 검색합니다.
az keyvault secret show \
--name SampleSecret \
--vault-name mykeyvault --query value
암호의 값이 검색됩니다.
"Hello Container Instances"
Resource Manager 템플릿을 사용하여 관리 ID 사용
Resource Manager 템플릿을 사용하여 컨테이너 그룹에서 관리 ID를 사용하도록 설정하려면 ContainerGroupIdentity
개체를 사용하여 Microsoft.ContainerInstance/containerGroups
개체의 identity
속성을 설정합니다. 다음 코드 조각은 여러 다른 시나리오에 맞게 구성된 identity
속성을 보여 줍니다. Resource Manager 템플릿 참조를 참조하세요. 2018-10-01
의 최소 apiVersion
을 지정합니다.
사용자가 할당한 ID
사용자 할당 ID는 다음 형식의 리소스 ID입니다.
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"
하나 이상의 사용자 할당 ID를 사용하도록 설정할 수 있습니다.
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
시스템이 할당한 ID
"identity": {
"type": "SystemAssigned"
}
시스템 및 사용자 할당 ID
컨테이너 그룹에서 시스템 할당 ID 또는 하나 이상의 사용자 할당 ID를 사용하도록 설정할 수 있습니다.
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
...
YAML 파일을 사용하여 관리 ID 사용
YAML 파일을 사용하여 배포된 컨테이너 그룹에서 관리 ID를 사용하도록 설정하려면 다음 YAML을 포함합니다.
2018-10-01
의 최소 apiVersion
을 지정합니다.
사용자가 할당한 ID
사용자 할당 ID는 다음 형식의 리소스 ID입니다.
'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'
하나 이상의 사용자 할당 ID를 사용하도록 설정할 수 있습니다.
identity:
type: UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
시스템이 할당한 ID
identity:
type: SystemAssigned
시스템 및 사용자 할당 ID
컨테이너 그룹에서 시스템 할당 ID 또는 하나 이상의 사용자 할당 ID를 사용하도록 설정할 수 있습니다.
identity:
type: SystemAssigned, UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Windows 컨테이너의 관리 ID
Windows 컨테이너 그룹의 관리 ID는 Linux 컨테이너 그룹과 다르게 작동합니다. Windows 컨테이너의 경우 Microsoft Entra ID 토큰을 가져오는 데 메타데이터 서버(169.254.169.254)를 사용할 수 없습니다. 고객은 다른 패턴을 따라 Windows 컨테이너에서 액세스 토큰을 가져올 수 있습니다. 패턴에는 아래와 같이 보안 주체 ID 및 비밀과 같은 추가 정보와 함께 토큰 요청을 IDENTITY_ENDPOINT 보내는 작업이 포함됩니다. IDENTITY_ENDPOINT 및 IDENTITY_HEADER 컨테이너에 환경 변수로 삽입됩니다.
curl -G -v %IDENTITY_ENDPOINT% --data-urlencode resource=https://vault.azure.net --data-urlencode principalId=<principal id> -H secret:%IDENTITY_HEADER%
샘플 PowerShell 스크립트
identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "b2ee9347-623c-4794-85af-2d5261356f67"
Invoke-RestMethod -Uri "$identityEndpoint" `
-Method Get `
-Headers @{secret = $identityHeader} `
-Body @{resource = $resource; principalId = $principalId} `
-ContentType "application/x-www-form-urlencoded"
메타데이터 서버(169.254.169.254)에 의존하는 Az Login 모듈 및 기타 클라이언트 라이브러리는 Windows 컨테이너에서 작동하지 않습니다. 또한 vNet의 Windows 컨테이너는 엔드포인트에 연결할 수 없습니다. 따라서 Windows 가상 네트워크 컨테이너에서 관리 ID 토큰을 생성할 수 없습니다.
다음 단계
이 문서에서는 Azure Container Instances의 관리 ID와 다음 방법에 대해 알아보았습니다.
- 컨테이너 그룹에서 사용자 할당 또는 시스템 할당 ID를 사용하도록 설정
- Azure 키 자격 증명 모음에 ID 액세스 권한 부여
- 관리 ID를 사용하여 실행 중인 컨테이너에서 키 자격 증명 모음에 액세스
Azure 리소스에 대한 관리 ID에 대해 자세히 알아보세요.
관리 ID를 사용하여 Azure Container Instances에서 키 자격 증명 모음에 액세스하는 방법에 대해서는 Azure Go SDK 예를 참조하세요.