> 백엔드 개발 > 파이썬 튜토리얼 > Azure에서 안전한 서비스 간 통신을 위해 관리 ID 사용

Azure에서 안전한 서비스 간 통신을 위해 관리 ID 사용

Susan Sarandon
풀어 주다: 2024-12-23 00:40:01
원래의
649명이 탐색했습니다.

관리 ID는 Azure의 서비스 간 보안 통신에 필수적입니다. 비밀, 키 또는 연결 문자열을 관리할 필요가 없으므로 애플리케이션 구성 요소를 원활하게 통합할 수 있습니다. 이 블로그에서는 관리 ID를 사용하여 Azure SQL Database를 Azure App Service에서 실행되는 Python 백엔드에 연결하는 방법을 보여드리겠습니다.


Microsoft 인증 라이브러리

Entra ID를 사용하여 Azure 서비스에 연결하려면 MSAL(Microsoft 인증 라이브러리)이 필요합니다. 이 예에서는 Python 라이브러리를 사용하지만 걱정하지 마세요. MSAL은 모든 주요 프로그래밍 언어에 존재합니다.

import msal
로그인 후 복사

다음은 Azure SQL 데이터베이스에 연결하는 간단한 함수입니다.

def get_db_connection():
    connection_string = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={server}.database.windows.net;PORT=1433;DATABASE={database};Authentication=ActiveDirectoryMsi'
    return pyodbc.connect(connection_string)
로그인 후 복사

이러한 전제 조건이 충족되면 비밀이나 연결 문자열을 처리하지 않고도 코드 내에서 데이터베이스 연결을 설정하고 쿼리를 실행할 수 있습니다.


데모 Python 백엔드

시연을 위해 이름, 직위, 급여 등 직원 데이터를 반환하는 간단한 Python Flask API를 만들었습니다. get_db_connection() 함수가 데이터베이스 연결을 열고 데이터를 쿼리하는 데 어떻게 사용되는지 확인하세요.

def get_employees():
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute('SELECT ID, Name, Position, Salary FROM Employees')
    rows = cursor.fetchall()
    conn.close()

    # Convert data to a list of dictionaries.
    employees = []
    for row in rows:
        employees.append({
            'ID': row.ID,
            'Name': row.Name,
            'Position': row.Position,
            'Salary': row.Salary
        })

    return jsonify(employees)

로그인 후 복사

이 간단한 접근 방식을 사용하면 백엔드가 관리 ID를 사용하여 데이터베이스와 안전하게 상호 작용할 수 있습니다.


도커파일

Docker 컨테이너에 애플리케이션을 배포하는 경우 SQL Server용 ODBC 드라이버를 설치하기 위한 Dockerfile은 다음과 같습니다.

FROM python:3.13-slim

COPY . /app
WORKDIR /app

# Install Microsoft ODBC Driver 17 for SQL Server and dependencies
RUN apt-get update \
 && apt-get install -y gnupg curl apt-transport-https \
 && curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc \
 && echo "deb [arch=amd64] https://packages.microsoft.com/debian/11/prod bullseye main" | tee /etc/apt/sources.list.d/mssql-release.list \
 && apt-get update \
 && ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc-dev \
 && apt-get install -y build-essential \
 && apt-get clean -y

# Install Python dependencies
RUN pip install -r requirements.txt

EXPOSE 80

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:80", "app:app"]

로그인 후 복사

이 설정을 통해 컨테이너가 Azure SQL에 안전하게 연결할 수 있습니다.


SQL Server 및 데이터베이스 배포

Azure SQL Server를 배포할 때 Azure AD 전용 인증을 구성하세요. 이는 관리 ID에 대한 요구 사항입니다. 다음은 SQL 서버 및 데이터베이스를 배포하는 데 사용되는 Bicep 템플릿입니다.

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: serverName
  location: location
  tags: {
    workload: 'Sample Backend with SQL Database'
    topic: 'SQL Server'
    environment: 'Production'
  }
  properties: {
    minimalTlsVersion: '1.2'
    administrators: {
      administratorType: 'ActiveDirectory'
      login: sqlAdminName
      sid: sqlAdminObjectId
      tenantId: tenantId
      principalType: principalType
      azureADOnlyAuthentication: azureADOnlyAuthentication
    }
  }
}

resource sqlDB 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
  parent: sqlServer
  name: sqlDBName
  location: location
  sku: {
    name: sqlDBSkuName
    tier: sqlDBSkuTier
    capacity: capacity
  }
}
로그인 후 복사

이 템플릿을 사용하면 데이터베이스가 안전하게 구성되고 사용할 준비가 되었는지 확인할 수 있습니다.


관리 ID에 데이터베이스 역할 부여

App Service가 비밀 없이 데이터베이스에 액세스할 수 있도록 하려면 관리 ID에 필요한 데이터베이스 역할을 할당하세요. Bicep 또는 Terraform으로는 이 단계를 수행할 수 없습니다. 사용자 정의 스크립트를 생성하거나 Azure Portal을 통해 데이터베이스에 액세스하세요.

CREATE USER [<displayname-of-appservice>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<displayname-of-appservice>];
ALTER ROLE db_datawriter ADD MEMBER [<displayname-of-appservice>];
ALTER ROLE db_ddladmin ADD MEMBER [<displayname-of-appservice>];
GO
로그인 후 복사

이러한 역할을 통해 관리 ID는 필요에 따라 읽기, 쓰기 및 스키마 변경 작업을 수행할 수 있습니다.


GitHub의 공개 템플릿

CI/CD 통합을 포함한 전체 코드를 보려면 GitHub의 공개 템플릿을 확인하세요. 이 저장소에는 이 블로그에 설명된 설정을 복제하는 데 필요한 모든 것이 포함되어 있습니다.

Using Managed Identities for Secure Cross-Service Communication in Azure 라족스 / 빠른 시작-백엔드-SQL-데이터베이스

새로운 애플리케이션 기능을 테스트하기 위한 경량 백엔드 환경입니다. 여기에는 앱 호스팅부터 데이터 지속성 관리까지 모든 것이 포함되며 손쉬운 테스트 및 반복을 위해 CI/CD가 통합되어 있습니다.

SQL 데이터베이스 연결을 통한 빠른 시작 백엔드

이 사용 사례에는 새로운 애플리케이션 기능을 테스트하기 위한 경량 백엔드 환경을 제공하기 위해 Azure SQL 데이터베이스와 함께 Azure App Service를 배포하는 것이 포함됩니다. 여기에는 앱 호스팅부터 데이터 지속성 관리까지 모든 것이 포함되어 있으며 CI/CD를 통합하여 쉽게 테스트하고 반복할 수 있습니다.

목표

  • 새로운 애플리케이션 기능을 테스트하기 위해 Azure에 확장 가능하고 안전한 웹 백엔드를 배포하세요.
  • Bicep을 사용하여 인프라 프로비저닝을 자동화합니다.
  • 자주 테스트하고 쉽게 업데이트할 수 있도록 애플리케이션에 대한 지속적인 배포를 통합합니다.

구성요소 개요

  • Azure App Service - 간단한 백엔드 API를 배포합니다.
  • Azure SQL 데이터베이스 - 지속성을 위해 SQL 데이터베이스를 설정합니다.
  • Azure Container Registry(선택 사항) - 버전 관리를 위해 컨테이너 이미지를 저장합니다(컨테이너화된 버전을 사용하는 경우).
  • 지속적 통합/지속적 배포(CI/CD) - GitHub Actions를 사용하여 배포를 자동화합니다.



GitHub에서 보기



관리형 ID를 사용하면 서비스 간 통신이 단순화되고 보안 비밀이 필요하지 않아 보안이 강화됩니다. 이 접근 방식은 Azure에서 안전하고 확장 가능한 애플리케이션을 구축하는 모든 사람에게 적극 권장됩니다.

위 내용은 Azure에서 안전한 서비스 간 통신을 위해 관리 ID 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿