Azure RBAC(Azure 역할 기반 액세스 제어)는 Azure 리소스에 대한 액세스를 관리하는 데 사용하는 권한 부여 시스템입니다. 액세스 권한을 부여하려면 역할을 특정 범위의 사용자, 그룹, 서비스 주체 또는 관리 ID에 할당합니다. 이 문서에서는 Azure CLI를 사용하여 역할을 할당하는 방법을 설명합니다.
필수 조건
역할을 할당하려면 다음이 있어야 합니다.
-
Microsoft.Authorization/roleAssignments/write
권한(예: 역할 기반 액세스 제어 관리자) - Azure Cloud Shell에서의 Bash 또는 Azure CLI
Azure 역할을 할당하는 단계
역할을 할당하려면 보안 주체, 역할 정의 및 범위의 세 가지 요소로 구성됩니다.
1단계: 액세스가 필요한 사용자 결정
사용자, 그룹, 서비스 주체 또는 관리 ID에 역할을 할당할 수 있습니다. 역할을 할당하려면 개체의 고유 ID를 지정해야 할 수 있습니다. ID의 형식은 다음과 같습니다 11111111-1111-1111-1111-111111111111
. Azure Portal 또는 Azure CLI를 사용하여 ID를 가져올 수 있습니다.
User
Microsoft Entra 사용자의 경우 사용자 계정 이름(예: patlong@contoso.com 사용자 개체 ID)을 가져옵니다. 개체 ID를 가져오려면 az ad user show를 사용할 수 있습니다.
az ad user show --id "{principalName}" --query "id" --output tsv
그룹
Microsoft Entra 그룹의 경우 그룹 개체 ID가 필요합니다. 개체 ID를 가져오려면 az ad group show 또는 az ad group list를 사용할 수 있습니다.
az ad group show --group "{groupName}" --query "id" --output tsv
서비스 프린시펄
Microsoft Entra 서비스 주체(애플리케이션에서 사용하는 ID)의 경우 서비스 주체 개체 ID가 필요합니다. 개체 ID를 가져오려면 az ad sp list를 사용할 수 있습니다. 서비스 주체의 경우 애플리케이션 ID가 아닌 개체 ID를 사용합니다.
az ad sp list --all --query "[].{displayName:displayName, id:id}" --output tsv
az ad sp list --display-name "{displayName}"
관리되는 아이덴티티
시스템 할당 또는 사용자 할당 관리 ID의 경우 개체 ID가 필요합니다. 개체 ID를 가져오려면 az ad sp list를 사용할 수 있습니다.
az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"
사용자 할당 관리 ID를 나열하기 위해 az identity list를 사용할 수 있습니다.
az identity list
2단계: 적절한 역할 선택
권한은 역할로 그룹화됩니다. 여러 Azure 기본 제공 역할 목록에서 선택하거나 사용자 고유의 사용자 지정 역할을 사용할 수 있습니다. 필요한 최소 권한으로 액세스 권한을 부여하는 것이 가장 좋습니다. 따라서 더 넓은 역할을 할당하지 않도록 합니다.
역할을 나열하고 고유한 역할 ID를 가져오려면 az role definition list를 사용할 수 있습니다.
az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv
특정 역할의 세부 정보를 나열하는 방법은 다음과 같습니다.
az role definition list --name "{roleName}"
자세한 내용은 Azure 역할 정의 목록을 참조하세요.
3단계: 필요한 범위 식별
Azure는 리소스, 리소스 그룹, 구독 및 관리 그룹의 네 가지 범위 수준을 제공합니다. 필요한 최소 권한으로 액세스 권한을 부여하는 것이 가장 좋습니다. 따라서 더 넓은 범위에서 역할을 할당하지 않도록 합니다. 범위에 대한 자세한 내용은 범위 이해를 참조하세요.
리소스 범위
리소스 범위의 경우 리소스에 대한 리소스 ID가 필요합니다. Azure Portal에서 리소스의 속성을 확인하여 리소스 ID를 찾을 수 있습니다. 리소스 ID의 형식은 다음과 같습니다.
/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}
리소스 그룹 범위
리소스 그룹 범위의 경우 리소스 그룹의 이름이 필요합니다. Azure Portal의 리소스 그룹 페이지에서 이름을 찾거나 az group list를 사용할 수 있습니다.
az group list --query "[].{name:name}" --output tsv
구독 범위
구독 범위의 경우 구독 ID가 필요합니다. Azure Portal의 구독 페이지에서 ID 를 찾거나 az account list를 사용할 수 있습니다.
az account list --query "[].{name:name, id:id}" --output tsv
관리 그룹 범위
관리 그룹 범위의 경우 관리 그룹 이름이 필요합니다. Azure Portal의 관리 그룹 페이지에서 이름을 찾거나 az account management-group list를 사용할 수 있습니다.
az account management-group list --query "[].{name:name, id:id}" --output tsv
4단계: 역할 할당
역할을 할당하려면 az role assignment create 명령을 사용합니다. 범위에 따라 명령에는 일반적으로 다음 형식 중 하나가 있습니다.
리소스 범위
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"
리소스 그룹 범위
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"
구독 범위
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"
관리 그룹 범위
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"
다음은 리소스 그룹 범위에서 사용자에게 Virtual Machine 기여자 역할을 할당할 때 출력의 예를 보여 줍니다.
{
"canDelegate": null,
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"name": "{roleAssignmentId}",
"principalId": "{principalId}",
"principalType": "User",
"resourceGroup": "{resourceGroupName}",
"roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c",
"scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
"type": "Microsoft.Authorization/roleAssignments"
}
역할 예제 할당
스토리지 계정 리소스 범위의 모든 Blob 컨테이너에 대한 역할 할당
Storage12345라는 스토리지 계정의 리소스 범위에서 개체 ID가 55555555-5555-5555-5555-5555555555인 서비스 주체에 Storage Blob 데이터 기여자 역할을 할당합니다.
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"
특정 Blob 컨테이너 리소스 범위에 대한 역할 할당
Blob-container-01이라는 Blob 컨테이너의 리소스 범위에서 개체 ID가 555555555-5555-5555-5555-5555-5555555555인 서비스 주체에 Storage Blob 데이터 기여자 역할을 할당합니다.
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"
특정 가상 네트워크 리소스 범위에서 그룹에 대한 역할 할당
pharma-sales-project-network라는 가상 네트워크에 대한 리소스 범위에서 ID가 22222222-2222-2222-2222-222222222222인 Ann Mack 팀 그룹에게 Virtual Machine Contributor 역할을 할당합니다.
az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network"
리소스 그룹 범위에서 사용자에 대한 역할 할당
pharma-sales 리소스 그룹 범위에서 patlong@contoso.com 사용자에게 Virtual Machine Contributor 역할을 할당합니다.
az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
리소스 그룹 범위에서 고유한 역할 ID를 사용하여 사용자에 대한 역할 할당
예를 들어 역할 이름이 변경될 수 있는 경우가 몇 번 있습니다.
- 사용자 고유의 사용자 지정 역할을 사용하고 있으며 이름을 변경하기로 결정합니다.
- 이름에 (미리 보기)가 있는 미리 보기 역할을 사용하고 있습니다. 역할이 해제되면 역할의 이름이 바뀝니다.
역할 이름이 변경되더라도 역할 ID는 변경되지 않습니다. 스크립트 또는 자동화를 사용하여 역할 할당을 만드는 경우 역할 이름 대신 고유한 역할 ID를 사용하는 것이 좋습니다. 따라서 역할 이름이 바뀌면 스크립트가 작동할 가능성이 높습니다.
다음 예제에서는 pharma-sales 리소스 그룹 범위에서 사용자에게 patlong@contoso.com 역할을 할당합니다.
az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
리소스 그룹 범위에서 모든 Blob 컨테이너에 대한 역할 할당
Example-Storage-rg 리소스 그룹 범위에서 개체 ID가 555555555-5555-5555-5555-5555555555555인 서비스 주체에 Storage Blob 데이터 기여자 역할을 할당합니다.
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Example-Storage-rg"
리소스 그룹 범위에서 애플리케이션에 대한 역할 할당
pharma-sales 리소스 그룹 범위에서 서비스 주체 개체 ID가 44444444-4444-4444-4444-444444444444인 애플리케이션에 Virtual Machine 기여자 역할을 할당합니다.
az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
리소스 그룹 범위에서 새 서비스 주체에 대한 역할 할당
새 서비스 주체를 만들고 해당 서비스 주체에 역할을 즉시 할당하려고 하면 경우에 따라 해당 역할 할당이 실패할 수 있습니다. 예를 들어 스크립트를 사용하여 새 관리 ID를 만든 다음 해당 서비스 주체에 역할을 할당하려고 하면 역할 할당이 실패할 수 있습니다. 이 오류가 발생한 이유는 복제 지연일 수 있습니다. 서비스 주체는 한 지역에 만들어집니다. 그러나 역할 할당은 서비스 주체를 아직 복제하지 않은 다른 지역에서 발생할 수 있습니다. 이 시나리오를 해결하려면 역할 할당을 만들 때 주체 유형을 지정해야 합니다.
역할을 할당하려면 az role assignment create를 사용하고 --assignee-object-id
에 값을 지정한 다음, --assignee-principal-type
를 ServicePrincipal
에 설정합니다.
az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"
다음 예제에서는 가상 머신 기여자 역할을 pharma-sales 리소스 그룹 범위의 msi-test 관리 ID에 할당합니다.
az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
구독 범위에서 사용자에 대한 역할 할당
구독 범위에서 사용자에게 읽기 권한자 역할을 annm@example.com 할당합니다.
az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
구독 범위에서 그룹에 대한 역할 할당
구독 범위에서 ID가 222222222-2222-2222-2222-222222222222인 Ann Mack 팀 그룹에 읽기 권한자 역할을 할당합니다.
az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
구독 범위에서 모든 Blob 컨테이너에 대한 역할 할당
구독 범위에서 사용자에게 Storage Blob 데이터 리더 역할을 할당합니다.
az role assignment create --assignee "alain@example.com" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
관리 그룹 범위에서 사용자에 대한 역할 할당
관리 그룹 범위에서 사용자에게 청구 읽기 권한자 역할을 alain@example.com 할당합니다.
az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"