Azure 서비스에 대한 암호 없는 연결

참고 항목

암호 없는 연결은 여러 Azure 서비스에 걸쳐 있는 언어에 구애받지 않는 기능입니다. 현재 설명서는 몇 가지 언어 및 서비스에 중점을 두고 있지만 현재 다른 언어 및 서비스에 대한 추가 설명서를 생성하는 중입니다.

이 문서에서는 암호에 대한 보안 문제를 설명하고 Azure 서비스에 대한 암호 없는 연결을 소개합니다.

암호 및 비밀에 대한 보안 문제

암호 및 비밀 키는 신중하게 사용해야 하며 개발자는 보안되지 않은 위치에 배치해서는 안 됩니다. 많은 앱이 사용자 이름, 암호 및 액세스 키를 사용하여 백 엔드 데이터베이스, 캐시, 메시징 및 이벤트 서비스에 연결합니다. 노출되는 경우 이러한 자격 증명을 사용하여 예정된 캠페인을 위해 빌드한 판매 카탈로그 또는 비공개여야 하는 고객 데이터와 같은 중요한 정보에 무단으로 액세스할 수 있습니다.

애플리케이션 자체에 암호를 포함하면 코드 리포지토리를 통한 검색을 비롯한 여러 가지 이유로 엄청난 보안 위험이 발생합니다. 많은 개발자가 환경 변수를 사용하여 이러한 암호를 외부화하여 애플리케이션이 다른 환경에서 로드할 수 있도록 합니다. 그러나 이는 코드 자체에서 실행 환경으로만 위험을 이동합니다. 환경에 대한 액세스 권한을 얻는 사람은 누구나 암호를 도용할 수 있으며, 이로 인해 데이터 반출 위험이 증가합니다.

다음 코드 예제에서는 스토리지 계정 키를 사용하여 Azure Storage에 연결하는 방법을 보여 줍니다. 많은 개발자가 이 솔루션이 이상적인 솔루션은 아니지만 과거에 사용했던 옵션에 익숙하다고 생각하기 때문에 이 솔루션에 몰두하고 있습니다. 애플리케이션에서 현재 액세스 키를 사용하는 경우 암호 없는 연결로 마이그레이션하는 것이 좋습니다.

// Connection using secret access keys
BlobServiceClient blobServiceClient = new(
    new Uri("https://<storage-account-name>.blob.core.windows.net"),
    new StorageSharedKeyCredential("<storage-account-name>", "<your-access-key>"));

개발자는 이러한 유형의 키 또는 비밀을 안전하지 않은 위치에 노출하지 않도록 부지런해야 합니다. 많은 회사에서 개발자, 운영자 또는 다른 사람에게 암호를 노출하지 않고 Azure 서비스에 연결하기 위한 엄격한 보안 요구 사항이 있습니다. 종종 자격 증명 모음을 사용하여 암호를 저장하고 애플리케이션에 로드하며 암호 회전 요구 사항 및 절차를 추가하여 위험을 더욱 줄입니다. 이 접근 방식은 운영 복잡성을 증가시키고 때로는 애플리케이션 연결 중단으로 이어집니다.

암호 없는 연결 및 제로 트러스트

이제 앱에서 암호 없는 연결을 사용하여 암호를 회전할 필요 없이 Azure 기반 서비스에 연결할 수 있습니다. 경우에 따라 구성만 있으면 됩니다. 새 코드는 필요하지 않습니다. 제로 트러스트 "신뢰하지 않으며, 항상 확인하고, 자격 증명이 없는" 원칙을 사용합니다. 즉, ID를 확인한 후에 백 엔드 서비스에 대한 액세스 권한을 부여하기 전에 컴퓨터 또는 사용자를 신뢰하여 모든 통신을 보호합니다.

보안 암호 없는 연결에 권장되는 인증 옵션은 관리 ID 및 Azure RBAC(역할 기반 액세스 제어)를 함께 사용하는 것입니다. 이 방법을 사용하면 관리 ID에 대한 다양한 비밀을 수동으로 추적하고 관리할 필요가 없습니다. 이러한 작업은 Azure에서 내부적으로 안전하게 처리되기 때문입니다.

서비스 커넥트or를 사용하여 Azure 서비스에 대한 암호 없는 연결을 구성하거나 수동으로 구성할 수 있습니다. 서비스 커넥트or는 Azure Spring Apps, Azure 앱 Service 및 Azure Container Apps와 같은 앱 호스팅 서비스에서 관리 ID를 사용하도록 설정합니다. 또한 서비스 커넥트 관리 ID 및 Azure RBAC를 사용하여 암호 없는 연결로 백 엔드 서비스를 구성하고 필요한 연결 정보를 사용하여 애플리케이션을 수화합니다.

암호 없는 연결에 대해 구성된 애플리케이션의 실행 환경을 검사하는 경우 전체 연결 문자열 확인할 수 있습니다. 연결 문자열 예를 들어 데이터베이스 서버 주소, 데이터베이스 이름 및 Azure 인증 플러그 인에 인증을 위임하는 명령을 전달하지만 암호나 비밀은 포함하지 않습니다.

다음 비디오에서는 Java 애플리케이션을 예로 사용하여 앱에서 Azure 서비스로의 암호 없는 연결을 보여 줍니다. 다른 언어에 대한 유사한 범위가 곧 출시될 예정입니다.


DefaultAzureCredential 소개

Microsoft Entra ID 및 RBAC(역할 기반 액세스 제어)를 통해 Azure 서비스에 대한 암호 없는 연결은 Azure ID 클라이언트 라이브러리에서 사용하여 DefaultAzureCredential 구현할 수 있습니다.

Important

일부 언어는 코드에서 명시적으로 DefaultAzureCredential을 구현해야 하지만, 다른 언어는 기본 플러그 인 또는 드라이버를 통해 내부적으로 DefaultAzureCredential을 활용합니다.

DefaultAzureCredential은 여러 인증 방법을 지원하고 런타임에 사용해야 하는 방법을 자동으로 결정합니다. 이 방법을 사용하면 앱에서 환경별 코드를 구현하지 않고도 다양한 환경(로컬 개발 및 프로덕션)에서 다양한 인증 방법을 사용할 수 있습니다.

자격 증명을 검색하는 DefaultAzureCredential 순서와 위치는 언어마다 다릅니다.

예를 들어 .NET을 사용하여 로컬로 작업하는 경우 일반적으로 개발자가 Visual Studio, DefaultAzureCredential Azure CLI 또는 Azure PowerShell에 로그인하는 데 사용한 계정을 사용하여 인증합니다. 앱이 Azure DefaultAzureCredential 에 배포되면 Azure 앱 Service와 같은 연결된 호스팅 서비스의 관리 ID를 자동으로 검색하고 사용합니다. 이 전환에서는 코드를 변경할 필요가 없습니다.

참고 항목

관리 ID는 앱 또는 서비스를 나타내는 보안 ID를 제공합니다. ID는 Azure 플랫폼에서 관리되며 비밀을 프로비전하거나 회전할 필요가 없습니다. 관리 ID는 개요 설명서에서 자세히 알아볼 수 있습니다.

다음 코드 예제에서는 암호 없는 연결을 사용하여 Service Bus에 연결하는 방법을 보여 줍니다. 다른 설명서에서는 특정 서비스에 대해 이 설정으로 마이그레이션하는 방법을 자세히 설명합니다. .NET 앱은 서비스 클라이언트 클래스의 DefaultAzureCredential 생성자에 인스턴스를 전달할 수 있습니다. DefaultAzureCredential은 해당 환경에서 사용 가능한 자격 증명을 자동으로 검색합니다.

ServiceBusClient serviceBusClient = new(
    new Uri("https://<your-service-bus-namespace>.blob.core.windows.net"),
    new DefaultAzureCredential());

참고 항목

암호 없는 연결에 대한 자세한 설명은 여러 Azure 앱과 서비스 간의 암호 없는 연결 구성 개발자 가이드 를 참조하세요.