다음을 통해 공유


Azure CLI를 사용하여 Azure 서비스 주체 만들기

Azure 서비스를 사용하는 자동화된 도구에는 항상 제한된 권한이 있어야 Azure 리소스의 보안을 유지할 수 있습니다. 따라서 애플리케이션을 완전히 권한 있는 사용자로 로그인하는 대신 Azure는 서비스 주체를 제공합니다. Azure 서비스 주체는 애플리케이션, 호스트된 서비스 및 자동화된 도구에서 사용하기 위해 만든 ID입니다. 이 ID는 리소스에 액세스하는 데 사용됩니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 서비스 주체 만들기
  • 서비스 주체 및 암호를 사용하여 로그인
  • 서비스 주체 및 인증서를 사용하여 로그인
  • 서비스 주체 역할 관리
  • 서비스 주체를 사용하여 Azure 리소스 만들기
  • 서비스 주체 자격 증명 다시 설정

필수 조건

  • 구독에서 서비스 주체를 만들려면 사용 권한 이상이 Role Based Access Control Administrator 있어야 합니다User Access Administrator. Azure RBAC(Azure 역할 기반 액세스 제어)에 사용할 수 있는 역할 목록은 Azure 기본 제공 역할을 참조하세요.

서비스 주체 만들기

az ad sp create-for-rbac Azure CLI 참조 명령을 사용하여 서비스 주체를 만듭니다. 이 예제에서는 매개 변수를 --name 지정하지 않으므로 타임스탬프를 포함하는 이름이 자동으로 만들어집니다.

az ad sp create-for-rbac

출력 콘솔:

{
  "appId": "myAppId",
  "displayName": "myServicePrincipalName",
  "password": "myServicePrincipalPassword",
  "tenant": "myTentantId"
}

리소스 명명 규칙을 준수하지 않고 나중에 az ad sp create-for-rbac 새 서비스 주체에 대한 역할 및 범위를 만들 계획인 경우 매개 변수가 없는 명령은 허용 가능한 솔루션입니다. 그러나 역할 및 범위가 없으면 새 서비스 주체가 리소스에 액세스할 수 없습니다. 그것은 단지 존재합니다.

매개 변수 없이 서비스 주체를 만들 때 다음 단계도 완료합니다.

참고 항목

계정에 서비스 주체 az ad sp create-for-rbac 를 만들 수 있는 권한이 없는 경우 "작업을 완료할 수 있는 권한이 부족합니다"가 포함된 오류 메시지를 반환합니다. Microsoft Entra 관리자에게 문의하여 서비스 주체를 만듭니다.

사용자가 애플리케이션을 등록할 수 있는 사용자 설정이 아니요설정된 Microsoft Entra ID 디렉터리에서 다음 Microsoft Entra ID 기본 제공 역할(작업 microsoft.directory/applications/createAsOwner 포함) 중 microsoft.directory/applications/create하나의 구성원이어야 합니다.

Microsoft Entra ID의 사용자 설정에 대한 자세한 내용은 애플리케이션을 만들 수 있는 사용자 제한(Restrict)을 참조 하세요.

역할 및 범위를 사용하여 서비스 주체 만들기

서비스 주체를 만들 때 항상 특정 --role --scopes 항목을 할당하는 것이 가장 좋습니다. 다음 단계를 수행합니다.

  1. 올바른 역할을 확인합니다.

    역할을 결정할 때는 항상 최소 권한 원칙을 사용합니다. 예를 들어 서비스 주체가 리소스 그룹 내의 Azure Storage에만 액세스해야 하는 경우 서비스 주체 contributor 에게 구독에 대한 권한을 부여하지 마세요. 스토리지 Blob 데이터 기여자 같은 특수한 역할을 고려합니다. Azure RBAC에서 사용 가능한 역할의 전체 목록은 Azure 기본 제공 역할을 참조 하세요.

  2. 범위 매개 변수의 값을 가져옵니다.

    새 서비스 주체가 액세스해야 하는 Azure 리소스의 리소스 ID 를 찾아 복사합니다. 이 정보는 일반적으로 각 리소스의 Azure Portal 속성 또는 엔드포인트 페이지에서 찾을 수 있습니다 . 다음은 일반적인 --scopes 예제이지만 실제 형식 및 값대한 리소스 ID를 사용합니다.

    범위 예시
    구독 /subscriptions/mySubscriptionID
    Resource group /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
    가상 머신 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/myVMname
    Storage 계정 파일 서비스 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Storage/storageAccounts/myStorageAccountName/fileServices/default
    데이터 팩터리 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.DataFactory/factories/myDataFactoryName

    자세한 범위 예제는 Azure RBAC에 대한 범위 이해를 참조 하세요.

  3. 서비스 주체를 만듭니다.

    이 예제에서는 리소스 그룹 RG1의 모든 리소스에 대한 읽기 권한자 권한을 사용하여 myServicePrincipalName1이라는 새 서비스 주체를 만듭니다.

    # Bash script
    az ad sp create-for-rbac --name myServicePrincipalName1 \
                             --role reader \
                             --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1
    

    매개 변수는 --scopes 공백으로 구분된 범위 목록을 허용합니다. 이 예제에서는 myServicePrincipalName2라는 새 서비스 주체가 리소스 그룹 myRG1의 모든 리소스에 대한 읽기 권한자 권한으로 만들어집니다. 이 서비스 주체에는 myRG2에 있는 myVM대한 판독권한도 부여됩니다.

    # Bash script
    az ad sp create-for-rbac --name myServicePrincipalName2 \
                             --role reader \
                             --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG2/providers/Microsoft.Compute/virtualMachines/myVM
    

새 서비스 주체에 너무 적거나 너무 많은 권한을 부여한 경우 서비스 주체 역할을 관리하여 권한을 변경합니다.

변수를 사용하여 서비스 주체 만들기

변수를 사용하여 서비스 주체를 만들 수도 있습니다.

# Bash script
let "randomIdentifier=$RANDOM*$RANDOM"
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id --output tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"

echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName \
                         --role $roleName \
                         --scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup

서비스 주체 속성의 전체 목록은 az ad sp list를 사용하고 기존 서비스 주체 가져오기를 참조 하세요.

Warning

명령을 사용하여 Azure 서비스 주체를 az ad sp create-for-rbac 만들 때 출력에는 보호해야 하는 자격 증명이 포함됩니다. 이러한 자격 증명을 코드에 포함하지 않도록 하거나 소스 제어에 자격 증명을 확인해야 합니다. 또는 자격 증명을 사용할 필요가 없도록 사용할 수 있는 경우 관리 ID를 사용하는 것이 좋습니다.

다음 단계

이제 Azure 서비스 주체를 만드는 방법을 배웠으므로 다음 단계를 진행하여 암호 기반 인증으로 서비스 주체를 사용하는 방법을 알아봅니다.