다음을 통해 공유


개발자 계정을 사용하여 로컬 개발 중에 Azure 서비스에 Python 앱 인증

클라우드 애플리케이션을 개발할 때 개발자는 일반적으로 코드를 Azure에 배포하기 전에 로컬로 빌드, 테스트 및 디버그합니다. 그러나 로컬 개발 중에도 애플리케이션은 Key Vault, Storage 또는 데이터베이스와 같이 상호 작용하는 모든 Azure 서비스로 인증해야 합니다.

이 문서에서는 로컬 개발 중에 인증에 개발자의 Azure 자격 증명을 사용하도록 애플리케이션을 구성하는 방법을 보여 줍니다. 이 방법을 사용하면 비밀을 포함하거나 환경별 논리를 작성하지 않고도 원활하고 안전한 개발 환경을 사용할 수 있습니다.

개발자 계정을 사용한 로컬 개발 인증 개요

Python용 Azure ID 라이브러리를 사용하는 애플리케이션을 개발할 때 개발자의 Azure 계정을 사용하여 로컬 개발 중에 Azure 서비스에 인증할 수 있습니다. 이 방법은 서비스 주체 또는 비밀을 만들고 관리할 필요가 없으므로 로컬 개발 중에 Azure 서비스를 인증하는 가장 간단한 방법입니다.

로컬 개발 중에 Python 앱이 개발자의 자격 증명을 사용하여 로컬로 설치된 개발 도구에서 해당 자격 증명을 가져와 Azure에 연결하는 방법을 보여 주는 다이어그램

개발자 고유의 Azure 자격 증명을 사용하여 로컬 개발 중에 애플리케이션이 Azure에 인증할 수 있도록 하려면 개발자는 먼저 지원되는 명령줄 도구 중 하나를 사용하여 로그인해야 합니다.

  • Azure CLI(az login)
  • Azure 개발자 CLI(azd login)
  • Azure PowerShell(Connect-AzAccount)

로그인한 후 Python용 Azure ID 라이브러리는 활성 세션을 자동으로 검색하고 자격 증명 캐시에서 필요한 토큰을 검색할 수 있습니다. 이 기능을 사용하면 앱이 추가 구성 또는 하드 코드된 비밀 없이 로그인한 사용자로 Azure 서비스에 인증할 수 있습니다.

이 동작은 DefaultAzureCredential을 사용할 때 로컬 환경에서 CLI 기반 자격 증명으로 자동으로 돌아가도록 활성화됩니다.

개발자의 로그인한 Azure 자격 증명을 사용하는 것이 로컬 개발을 위한 가장 쉬운 설정입니다. 각 팀 구성원의 기존 Azure 계정을 활용하여 추가 구성 없이도 Azure 서비스에 원활하게 액세스할 수 있습니다.

그러나 개발자 계정은 일반적으로 프로덕션 환경에서 애플리케이션에 있어야 하는 것보다 더 광범위한 권한을 갖습니다. 이러한 광범위한 권한으로 인해 테스트가 불일치하거나 실수로 앱이 프로덕션 환경에서 수행할 수 있는 권한이 부여되지 않은 작업이 허용될 수 있습니다. 프로덕션 권한을 면밀히 미러링하고 보안 상태를 개선하려면 대신 로컬 개발을 위한 애플리케이션별 서비스 주체를 만들 수 있습니다. 이러한 ID는 다음과 같습니다.

  • 애플리케이션에 필요한 역할 및 권한만 할당할 수 있습니다.
  • 최소 권한의 지원 원칙
  • 환경 전반에서 액세스 관련 동작에 대한 일관된 테스트 제공

개발자는 환경 변수를 통해 서비스 주체를 사용할 수 있도록 로컬 환경을 구성할 수 있으며 DefaultAzureCredential에서 자동으로 이를 감지합니다. 자세한 내용은 서비스 주체를 사용하여 로컬 개발 중에 Azure 서비스에 Python 앱 인증 문서를 참조하세요.

1 - 로컬 개발을 위한 Microsoft Entra 보안 그룹 만들기

대부분의 개발 시나리오에서 여러 개발자가 동일한 애플리케이션에 기여합니다. 액세스 제어를 간소화하고 팀 전체에서 일관된 권한을 보장하려면 먼저 애플리케이션의 로컬 개발 요구 사항에 맞게 특별히 Microsoft Entra 보안 그룹을 만드는 것이 좋습니다.

개별 사용자가 아닌 그룹 수준에서 Azure 역할을 할당하면 다음과 같은 몇 가지 주요 이점이 제공됩니다.

  • 일관된 역할 할당

    그룹의 모든 개발자는 동일한 역할과 권한을 자동으로 상속하여 균일한 개발 환경을 보장합니다.

  • 간소화된 역할 관리

    애플리케이션에 새 역할이 필요한 경우 그룹에 한 번만 추가하면 됩니다. 개별 사용자 권한을 업데이트할 필요가 없습니다.

  • 간편한 온보딩

    새 개발자는 그룹에 추가하기만 하면 필요한 권한을 부여할 수 있습니다. 수동 역할 할당은 필요하지 않습니다.

조직에 개발 팀에 적합한 Microsoft Entra 보안 그룹이 이미 있는 경우 다시 사용할 수 있습니다. 그렇지 않으면 앱에 대한 새 그룹을 만들 수 있습니다.

Microsoft Entra ID에서 보안 그룹을 만들려면 az ad group createe Azure CLI 명령을 사용합니다.

이 명령에는 다음 매개 변수가 필요합니다.

--display-name: 그룹에 대한 사용자 친화적인 이름

--mail-nickname: 전자 메일 및 내부 참조에 사용되는 고유 식별자입니다.

애플리케이션 이름에 그룹 이름을 기반으로 하고 용도를 명확하게 나타내는 접미사를 -local-dev 포함하는 것이 좋습니다.

#!/bin/bash
az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"
# PowerShell syntax
az ad group create `
    --display-name MyDisplay `
    --mail-nickname MyDisplay `
    --description "<group-description>"

명령 az ad group create을 실행한 후 명령 출력에서 id 속성 값을 복사합니다. 역할을 할당하려면 이 문서의 이후 단계에서 Microsoft Entra 보안 그룹의 ID Object ID가 필요합니다. 나중에 다시 검색 Object ID 하려면 다음 az ad group show 명령을 az ad group show --group "my-app-local-dev" --query id --output tsv사용합니다.

사용자를 그룹에 추가하려면, 먼저 추가하려는 Azure 사용자 계정의 Object ID를 확보해야 합니다. az ad user list 명령을 매개 변수와 함께 --filter 사용하여 표시 이름으로 특정 사용자를 검색합니다. 매개 변수는 --query 출력을 관련 필드로 제한하는 데 도움이 됩니다.

#!/bin/bash
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table
# PowerShell syntax
az ad user list `
    --filter "startswith(displayName, 'Bob')" `
    --query "[].{objectId:id, displayName:displayName}" `
    --output table

사용자의 Object ID을 확보한 후, az ad group member add 명령을 사용하여 그룹에 추가할 수 있습니다.

#!/bin/bash
az ad group member add \
    --group <group-name> \
    --member-id <object-id>
# PowerShell syntax
az ad group member add `
    --group <group-name> `
    --member-id <object-id>

참고

기본적으로 Microsoft Entra 보안 그룹 만들기는 디렉터리의 특정 권한 있는 역할로 제한됩니다. 그룹을 만들 수 없는 경우 디렉터리의 관리자에게 문의하세요. 기존 그룹에 구성원을 추가할 수 없는 경우 그룹 소유자 또는 디렉터리 관리자에게 문의하세요. 자세한 내용은 Microsoft Entra 그룹 및 그룹 구성원 관리를 참조하세요.

2 - Microsoft Entra 그룹에 역할 할당

Microsoft Entra 보안 그룹을 만들고 구성원을 추가한 후 다음 단계는 애플리케이션에 필요한 역할(권한)을 결정하고 해당 범위에서 해당 역할을 그룹에 할당하는 것입니다.

  • 필요한 역할 확인

    앱이 작동하는 데 필요한 역할을 식별합니다. 일반적인 예는 다음과 같습니다.

    • Key Vault 비밀 사용자 - Azure Key Vault에서 비밀을 읽습니다.
    • 스토리지 큐 데이터 기여자 - Azure Queue Storage로 메시지 보내기

    추가 옵션은 기본 제공 역할 정의를 참조하세요.

  • 역할 할당에 대한 범위 선택

    역할은 다양한 범위에서 할당할 수 있습니다.

    • 리소스 수준(예: 단일 Key Vault 또는 스토리지 계정)
    • 리소스 그룹 수준(대부분의 앱에 권장)
    • 구독 수준(주의해서 사용- 가장 광범위한 액세스)

이 예제에서는 모든 애플리케이션 리소스를 하나의 리소스 그룹 아래에 그룹화할 때 일반적인 리소스 그룹 범위에서 역할을 할당합니다.

az role assignment create 명령을 사용하여 Azure에서 사용자, 그룹 또는 애플리케이션 서비스 주체에게 역할이 할당됩니다. Object ID을 사용하여 그룹을 지정할 수 있습니다.

#!/bin/bash
az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 
# PowerShell syntax
az role assignment create `
    --assignee <objectId> `
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> `
    --role "<roleName>"

할당할 수 있는 역할 이름을 얻으려면 az role definition list 명령을 사용합니다.

#!/bin/bash
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
# PowerShell syntax
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

특정 리소스 그룹의 모든 스토리지 계정에 대한 Azure Storage Blob 컨테이너 및 데이터에 대한 읽기, 쓰기 및 삭제 권한을 부여하려면 Microsoft Entra 보안 그룹에 Storage Blob 데이터 기여자 역할을 할당합니다.

#!/bin/bash
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"
# PowerShell syntax
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc `
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example `
    --role "Storage Blob Data Contributor"

Azure CLI를 사용하여 리소스 또는 구독 수준에서 권한을 할당하는 방법에 대한 자세한 내용은 Azure CLI를 사용하여 Azure 역할 할당 문서를 참조하세요.

3 - Azure CLI, Azure PowerShell, Azure Developer CLI 또는 브라우저를 사용하여 Azure에 로그인

Azure 계정으로 인증하려면 다음 방법 중 하나를 선택합니다.

개발자 워크스테이션에서 터미널을 열고 Azure CLI에서 Azure에 로그인합니다.

az login

4 - 애플리케이션에 DefaultAzureCredential 구현

Azure SDK 클라이언트 객체를 Azure로 인증하려면 애플리케이션에서 DefaultAzureCredential 패키지의 azure-identity 클래스를 사용해야 합니다. 로컬 개발 및 프로덕션 배포 모두에 권장되는 인증 방법입니다.

로컬 개발 시나리오 DefaultAzureCredential 에서는 사용 가능한 인증 원본을 순차적으로 확인하여 작동합니다. 특히 다음 도구에서 활성 세션을 찾습니다.

  • Azure CLI(az login)
  • Azure PowerShell(Connect-AzAccount)
  • Azure Developer CLI(azd auth login)

개발자가 이러한 도구를 DefaultAzureCredential 사용하여 Azure에 로그인하는 경우 세션을 자동으로 검색하고 해당 자격 증명을 사용하여 Azure 서비스를 사용하여 애플리케이션을 인증합니다. 이를 통해 개발자는 비밀을 저장하거나 다른 환경에 대한 코드를 수정하지 않고도 안전하게 인증할 수 있습니다.

먼저 애플리케이션에 azure.identity 패키지를 추가합니다.

pip install azure-identity

다음으로, 앱에서 Azure SDK 클라이언트 개체를 만드는 Python 코드의 경우 다음을 수행하려고 합니다.

  1. DefaultAzureCredential 모듈에서 azure.identity 클래스를 가져옵니다.
  2. DefaultAzureCredential 개체를 만듭니다.
  3. 개체를 DefaultAzureCredential Azure SDK 클라이언트 개체 생성자에 전달합니다.

이러한 단계의 예는 다음 코드 세그먼트에 나와 있습니다.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=token_credential)