SDK v1을 사용하여 Azure Machine Learning 리소스 및 워크플로에 대한 인증 설정
적용 대상: Python SDK azureml v1
Azure Machine Learning 작업 영역에 인증을 설정하는 방법을 알아봅니다. Azure Machine Learning 작업 영역에 대한 인증은 대부분 Microsoft Entra ID를 기반으로 합니다. 일반적으로 작업 영역에 연결할 때는 네 가지 인증 워크플로를 사용할 수 있습니다.
대화형: Microsoft Entra ID의 계정을 사용하여 직접 인증하거나 인증에 사용되는 토큰을 가져옵니다. 대화형 인증은 실험과 반복 개발 중에 사용됩니다. 대화형 인증을 사용하면 사용자별 기준으로 웹 서비스와 같은 리소스에 대한 액세스를 제어할 수 있습니다.
서비스 주체: Microsoft Entra ID에 서비스 주체 계정을 만들고 이를 사용하여 인증하거나 토큰을 가져옵니다. 서비스 주체는 사용자 상호 작용 없이 서비스 인증을 위해 자동화된 프로세스가 필요한 경우에 사용됩니다. 예를 들어 학습 코드가 변경될 때마다 모델을 학습시키고 테스트하는 연속 통합 및 배포 스크립트가 있습니다.
Azure CLI 세션: 활성 Azure CLI 세션을 사용하여 인증합니다. Azure CLI 인증은 실험 및 반복 개발 중이거나 사전 인증된 세션을 사용하여 서비스의 인증을 위한 자동화된 프로세스가 필요한 경우에 사용됩니다. Python 코드에 자격 증명을 저장하지 않거나 사용자에게 인증을 요청하지 않고 로컬 워크스테이션에서 Azure CLI를 통해 Azure에 로그인할 수 있습니다. 마찬가지로, 서비스 사용자 ID를 사용하여 Azure CLI를 인증하는 동시에 연속 통합 및 배포 파이프라인의 일부로 동일한 스크립트를 다시 사용할 수 있습니다.
관리 ID: Azure Virtual Machine에서 Azure Machine Learning SDK를 사용할 때 Azure에 관리 ID를 사용할 수 있습니다. 이 워크플로를 사용하면 Python 코드에 자격 증명을 저장하거나 사용자에게 인증 프롬프트를 표시하지 않아도 VM이 관리 ID를 사용하여 작업 영역에 연결할 수 있습니다. 또한 모델을 학습시킬 때 관리 ID를 사용하여 작업 영역에 액세스하도록 Azure Machine Learning 컴퓨팅 클러스터 및 컴퓨팅 인스턴스를 구성할 수도 있습니다.
사용된 인증 워크플로에 관계없이 Azure 역할 기반 액세스 제어(Azure RBAC)는 리소스에 허용된 액세스 수준(권한 부여) 범위를 지정하는 데 사용됩니다. 예를 들어 관리 또는 자동화 프로세스는 컴퓨팅 인스턴스만들기 액세스 권한이 있지만, 사용 권한이 없고, 데이터 과학자는 사용 권한만 있고 삭제 또는 만들기 원한이 없을 수 있습니다. 자세한 내용은 Azure Machine Learning 작업 영역 액세스 관리를 참조하세요.
Microsoft Entra 조건부 액세스를 사용하여 각 인증 워크플로의 작업 영역에 대한 액세스를 추가로 제어하거나 제한할 수 있습니다. 예를 들어 관리자는 관리 디바이스에서만 작업 영역 액세스를 허용할 수 있습니다.
필수 조건
- Azure Machine Learning 작업 영역을 만듭니다.
- Azure Machine Learning SDK를 설치하도록 개발 환경을 구성하거나 SDK가 이미 설치된 Azure Machine Learning 컴퓨팅 인스턴스를 사용합니다.
Microsoft Entra ID
작업 영역에 대한 모든 인증 워크플로는 Microsoft Entra ID를 사용합니다. 사용자가 개별 계정을 사용하여 인증하도록 하려면 사용자에게 Microsoft Entra ID의 계정이 있어야 합니다. 서비스 주체를 사용하려면 사용자가 Microsoft Entra ID에 있어야 합니다. 관리 ID는 Microsoft Entra ID의 기능이기도 합니다.
Microsoft Entra ID에 대한 자세한 내용은 Microsoft Entra 인증이란?을 참조하세요.
Microsoft Entra 계정을 만든 후 작업 영역에 대한 액세스 권한을 부여하는 방법 및 Azure Machine Learning의 기타 작업에 대한 자세한 내용은 Azure Machine Learning 작업 영역 액세스 관리를 참조하세요.
서비스 주체 구성
SP(서비스 주체)를 사용하려면 먼저 SP를 만들어야 합니다. 그런 다음 작업 영역에 대한 액세스 권한을 부여합니다. 또한 앞에서 설명한 것처럼 Azure 역할 기반 액세스 제어(Azure RBAC)는 액세스 제어를 위해 사용되므로, SP에 부여할 액세스 권한을 결정해야 합니다.
Important
서비스 주체를 사용하는 경우 서비스 주체에 사용되는 작업에 필요한 최소 액세스 권한을 부여합니다. 예를 들어 웹 배포를 위해 액세스 토큰 읽기 목적으로만 사용되는 경우에는 서비스 주체에 소유자 또는 기여자 액세스 권한을 부여하지 않을 것입니다.
최소 권한을 부여하는 이유는 서비스 주체에 인증을 위해 암호가 사용되고, 이 암호가 자동화 스크립트의 일부로 저장될 수 있기 때문입니다. 암호가 유출되더라도 특정 작업에 필요한 최소 액세스 권한만 지정함으로써 SP 악용을 최소화할 수 있습니다.
정기적으로 서비스 주체 암호와 같은 비밀을 순환해야 합니다.
SP를 만들고 작업 영역에 대해 액세스 권한을 부여하는 가장 쉬운 방법은 Azure CLI를 사용하는 것입니다. 서비스 주체를 만들고 여기에 작업 영역에 대한 액세스 권한을 부여하려면 다음 단계를 따르세요.
참고 항목
여기 표시된 단계를 모두 수행하려면 해당 구독에 대한 관리자여야 합니다.
Azure 구독을 인증합니다.
az login
CLI가 기본 브라우저를 열 수 있는 경우, 그렇게 하고 로그인 페이지를 로드합니다. CLI가 브라우저를 열 수 없는 경우에는 사용자가 브라우저를 열고 명령줄의 지침을 따릅니다. 지침에 따라 https://aka.ms/devicelogin으로 이동하고 인증 코드를 입력합니다.
Azure 구독이 여러 개 있으면
az account set -s <subscription name or ID>
명령을 사용하여 구독을 설정할 수 있습니다. 자세한 내용은 여러 Azure 구독 사용을 참조하세요.다른 인증 방법은 Azure CLI로 로그인을 참조하세요.
서비스 주체를 만듭니다. 다음 예제에서는 ml-auth라는 SP를 만듭니다.
az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
--json-auth
매개 변수는 Azure CLI 버전 >= 2.51.0에서 사용할 수 있습니다. 이전 버전에서는--sdk-auth
를 사용하세요.출력은 다음과 유사한 JSON입니다. 이 문서의 다른 단계에 필요하므로
clientId
,clientSecret
및tenantId
필드를 기록해 둡니다.{ "clientId": "your-client-id", "clientSecret": "your-client-secret", "subscriptionId": "your-sub-id", "tenantId": "your-tenant-id", "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", "resourceManagerEndpointUrl": "https://management.azure.com", "activeDirectoryGraphResourceId": "https://graph.windows.net", "sqlManagementEndpointUrl": "https://management.core.windows.net:5555", "galleryEndpointUrl": "https://gallery.azure.com/", "managementEndpointUrl": "https://management.core.windows.net" }
이전 단계에서 반환된
clientId
값을 사용하여 서비스 주체에 대한 세부 정보를 검색합니다.az ad sp show --id your-client-id
다음 JSON은 이 명령의 출력에 대한 간단한 예제를 보여줍니다. 다음 단계에서 값이 필요하므로
objectId
필드를 기록해 둡니다.{ "accountEnabled": "True", "addIns": [], "appDisplayName": "ml-auth", ... ... ... "objectId": "your-sp-object-id", "objectType": "ServicePrincipal" }
Azure Machine Learning에서 사용하는 작업 영역 및 기타 리소스에 대한 액세스 권한을 부여하려면 다음 문서의 정보를 사용합니다.
Important
소유자 액세스 권한은 서비스 주체가 작업 영역에서 거의 모든 작업을 수행하도록 허용합니다. 이 문서에서는 액세스 권한을 부여하는 방법을 보여주기 위해 사용되었습니다. 프로덕션 환경에서는 의도한 역할을 수행하는 데 필요한 최소 액세스 권한을 서비스 주체에 부여하는 것이 좋습니다. 해당 시나리오에 필요한 액세스 권한이 포함된 사용자 지정 역할을 만드는 방법은 Azure Machine Learning 작업 영역 액세스 관리를 참조하세요.
관리 ID 구성
Important
관리 ID는 Azure Virtual Machine, Azure Machine Learning 컴퓨팅 클러스터 또는 컴퓨팅 인스턴스에서 Azure Machine Learning SDK를 사용할 때만 지원됩니다.
VM의 관리 ID
VM에서 Azure 리소스에 대해 시스템에서 할당된 관리 ID를 사용하도록 설정합니다.
Azure portal에서 작업영역을 선택한 다음,Access Control (IAM)를 선택합니다.
추가, 역할 할당 추가를 선택하여 역할 할당 추가 창을 엽니다.
다음 역할을 할당합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
설정 값 역할 할당하려는 역할을 선택합니다. 다음에 대한 액세스 할당 관리 ID 멤버 이전에 만든 사용자 관리 ID입니다.
컴퓨팅 클러스터의 관리 ID
자세한 내용은 컴퓨팅 클러스터의 관리 ID 설정을 참조하세요.
대화형 인증 사용
Important
대화형 인증에는 브라우저가 사용되고 쿠키(타사 쿠키 포함)가 필요합니다. 쿠키를 사용하지 않도록 설정한 경우 “로그인할 수 없음”과 같은 오류가 표시될 수 있습니다. 이 오류는 Microsoft Entra 다단계 인증을 사용하도록 설정한 경우에도 발생할 수 있습니다.
설명서 및 샘플의 대부분의 예제에는 대화형 인증이 사용됩니다. 예를 들어 SDK를 사용할 때는 UI 기반 인증 흐름에서 사용자에게 프롬프트를 자동으로 표시하는 두 가지 함수 호출이 있습니다.
from_config()
함수를 호출하면 프롬프트가 표시됩니다.from azureml.core import Workspace ws = Workspace.from_config()
from_config()
함수는 작업 영역 연결 정보를 포함하는 JSON 파일을 찾습니다.구독, 리소스 그룹 및 작업 영역 정보를 제공하기 위해
Workspace
생성자를 사용할 때도 대화형 인증이 요청됩니다.ws = Workspace(subscription_id="your-sub-id", resource_group="your-resource-group-id", workspace_name="your-workspace-name" )
팁
여러 테넌트에 액세스할 수 있는 경우 해당 클래스를 가져오고 대상 테넌트를 명시적으로 정의해야 합니다. InteractiveLoginAuthentication
에 대한 생성자를 호출하면 위의 호출과 비슷하게 로그인하라는 메시지가 표시됩니다.
from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="your-tenant-id")
Azure CLI를 사용할 때 az login
명령은 CLI 세션 인증을 위해 사용됩니다. 자세한 내용은 Azure CLI 시작을 참조하세요.
팁
이전에 Azure CLI를 사용하여 대화형으로 인증된 환경에서 SDK를 사용하는 경우 AzureCliAuthentication
클래스를 사용하고 CLI로 캐시된 자격 증명을 사용하여 작업 영역에 인증을 수행할 수 있습니다.
from azureml.core.authentication import AzureCliAuthentication
cli_auth = AzureCliAuthentication()
ws = Workspace(subscription_id="your-sub-id",
resource_group="your-resource-group-id",
workspace_name="your-workspace-name",
auth=cli_auth
)
서비스 주체 인증 사용
서비스 주체를 사용해서 SDK에서 작업 영역에 인증하려면 ServicePrincipalAuthentication
클래스 생성자를 사용합니다. 서비스 공급자를 만들 때 표시된 값을 매개 변수로 사용합니다. tenant_id
매개 변수는 위의 tenantId
에 매핑되고, service_principal_id
는 clientId
에 매핑되고, service_principal_password
는 clientSecret
에 매핑됩니다.
from azureml.core.authentication import ServicePrincipalAuthentication
sp = ServicePrincipalAuthentication(tenant_id="your-tenant-id", # tenantID
service_principal_id="your-client-id", # clientId
service_principal_password="your-client-secret") # clientSecret
이제 sp
변수는 SDK에서 직접 사용하는 인증 개체를 포함합니다. 일반적으로 다음 코드와 같이 환경 변수에서 위의 사용된 ID/암호를 저장하는 것이 좋습니다. 환경 변수에 저장하면 해당 정보가 GitHub 리포지토리에 실수로 체크 인되는 것을 방지할 수 있습니다.
import os
sp = ServicePrincipalAuthentication(tenant_id=os.environ['AML_TENANT_ID'],
service_principal_id=os.environ['AML_PRINCIPAL_ID'],
service_principal_password=os.environ['AML_PRINCIPAL_PASS'])
Python에서 실행되고 SDK를 주로 사용하는 자동화 워크플로의 경우 대부분의 경우 인증에 이 개체를 그대로 사용할 수 있습니다. 다음 코드는 만든 인증 개체를 사용하여 작업 영역에서 인증을 합니다.
from azureml.core import Workspace
ws = Workspace.get(name="ml-example",
auth=sp,
subscription_id="your-sub-id",
resource_group="your-rg-name")
ws.get_details()
관리 ID 인증 사용
관리 ID로 구성된 VM, 컴퓨팅 클러스터 또는 컴퓨팅 인스턴스에서 작업 영역에 인증을 수행하려면 MsiAuthentication
클래스를 사용합니다. 다음 예제는 이 클래스를 사용하여 작업 영역에 인증을 수행하는 방법을 보여줍니다.
from azureml.core.authentication import MsiAuthentication
msi_auth = MsiAuthentication()
ws = Workspace(subscription_id="your-sub-id",
resource_group="your-resource-group-id",
workspace_name="your-workspace-name",
auth=msi_auth
)
조건부 액세스 사용
관리자는 작업 영역에 로그인하는 사용자에 대해 Microsoft Entra 조건부 액세스 정책을 적용할 수 있습니다. 예를 들어 2단계 인증을 요구하거나, 관리 디바이스에서만 로그인을 허용할 수 있습니다. 특히 Azure Machine Learning 작업 영역에 조건부 액세스를 사용하려면 Azure Machine Learning이라는 앱에 조건부 액세스 정책을 할당합니다. 앱 ID는 0736f41a-0425-bdb5-1563eff02385입니다.