Azure Queue Storage에서 암호 없는 연결을 사용하도록 애플리케이션 마이그레이션
이 문서의 내용
Azure 서비스에 대한 애플리케이션 요청은 계정 액세스 키 또는 암호 없는 연결과 같은 구성을 사용하여 인증되어야 합니다. 그러나 가능한 경우 애플리케이션에서 암호 없는 연결에 대한 우선 순위를 지정해야 합니다. 암호 또는 비밀 키를 사용하는 기존의 인증 방법은 보안 위험과 복잡성을 야기합니다. 암호 없는 연결로 이동하는 이점에 대해 자세히 알아보려면 Azure 서비스에 대한 암호 없는 연결 허브를 방문하세요.
다음 자습서에서는 암호 없는 연결을 사용하여 연결하도록 기존 애플리케이션을 마이그레이션하는 방법을 설명합니다. 이러한 동일한 마이그레이션 단계는 액세스 키, 연결 문자열 또는 다른 비밀 기반 접근 방식을 사용하는지 여부에 관계없이 적용되어야 합니다.
로컬 및 Azure 호스팅 환경 모두에서 작동하도록 암호 없는 연결을 구성할 수 있습니다. 이 섹션에서는 개별 사용자가 로컬 개발을 위해 Azure Storage Queues에 인증할 수 있도록 구성을 적용합니다.
사용자 역할 할당하기
로컬로 개발하는 경우 Queue Storage 데이터에 액세스하는 사용자 계정에 올바른 권한이 있는지 확인합니다. 큐 데이터를 읽고 쓰려면 스토리지 큐 데이터 기여자 역할이 필요합니다. 이 역할을 자신에게 할당하려면 사용자 액세스 관리자 역할 또는 Microsoft.Authorization/roleAssignments/write 작업을 포함하는 다른 역할이 필요합니다. Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 사용자에게 Azure RBAC 역할을 할당할 수 있습니다. 범위 개요 페이지에서 역할 할당에 사용할 수 있는 범위에 대해 자세히 알아봅니다.
다음 예제에서는 스토리지 큐 데이터 기여자 역할을 할당합니다. 이 역할은 스토리지 계정의 큐 데이터에 대한 읽기 및 쓰기 액세스 권한을 부여합니다.
Azure Portal에서 기본 검색 창 또는 왼쪽 탐색 영역을 사용하여 스토리지 계정을 찾습니다.
스토리지 계정 개요 페이지의 왼쪽 메뉴에서 액세스 제어(IAM) 를 선택합니다.
액세스 제어(IAM) 페이지에서 역할 할당 탭을 선택합니다.
위쪽 메뉴에서 + 추가 를 선택한 다음, 드롭다운 메뉴에서 역할 할당 추가 를 선택합니다.
검색 상자를 사용하여 결과를 원하는 역할로 필터링합니다. 이 예에서는 스토리지 큐 데이터 기여자 를 검색하고, 일치하는 결과를 선택한 후 다음 을 선택합니다.
다음에 대한 액세스 할당 아래에서 사용자, 그룹 또는 서비스 주체 를 선택한 다음, + 멤버 선택 을 선택합니다.
대화 상자에서 Microsoft Entra 사용자 이름(일반적으로 user@domain 이메일 주소)을 검색한 다음, 대화 상자 하단에서 선택 을 선택합니다.
검토 + 할당 을 선택하여 최종 페이지로 이동한 다음, 검토 + 할당 을 다시 선택하여 프로세스를 완료합니다.
Azure CLI를 사용하여 리소스 수준에서 역할을 할당하려면 먼저 az storage account show
명령을 사용하여 리소스 ID를 검색해야 합니다. --query
매개 변수를 사용하여 출력 속성을 필터링할 수 있습니다.
az storage account show \
--resource-group '<your-resource-group-name>' \
--name '<your-storage-account-name>' \
--query id
이전 명령의 Id
출력을 복사합니다. 그런 다음, Azure CLI의 az role 명령을 사용하여 역할을 할당할 수 있습니다.
az role assignment create --assignee "<user@domain>" \
--role "Storage Queue Data Contributor" \
--scope "<your-resource-id>"
Azure PowerShell을 사용하여 리소스 수준에서 역할을 할당하려면 먼저 Get-AzResource
명령을 사용하여 리소스 ID를 검색해야 합니다.
Get-AzResource -ResourceGroupName "<yourResourceGroupname>" -Name "<yourStorageAccountName>"
이전 명령 출력에서 Id
값을 복사합니다. 그런 다음, PowerShell에서 New-AzRoleAssignment 명령을 사용하여 역할을 할당할 수 있습니다.
New-AzRoleAssignment -SignInName <user@domain> `
-RoleDefinitionName "Storage Queue Data Contributor" `
-Scope <yourStorageAccountId>
Important
대부분의 경우 Azure에서 역할 할당이 전파되는 데 1~2분이 걸리지만 드문 경우이지만 최대 8분이 걸릴 수 있습니다. 코드를 처음 실행할 때 인증 오류가 발생하면 잠시 기다렸다가 다시 시도하세요.
로컬로 Azure에 로그인
로컬 개발의 경우 역할을 할당한 것과 동일한 Microsoft Entra 계정을 사용하여 인증되었는지 확인합니다. Azure CLI 또는 Azure PowerShell과 같은 인기 있는 개발 도구를 통해 인증할 수 있습니다. 인증할 수 있는 개발 도구는 언어에 따라 다릅니다.
다음 명령을 사용하여 Azure CLI를 통해 Azure에 로그인합니다.
az login
Visual Studio의 오른쪽 위에서 로그인 단추를 선택합니다.
이전에 역할을 할당한 Microsoft Entra 계정을 사용하여 로그인합니다.
Visual Studio 코드를 통해 DefaultAzureCredential
을 사용하려면 Azure CLI를 설치 해야 합니다.
Visual Studio Code의 주 메뉴에서 터미널 > 새 터미널 로 차례로 이동합니다.
다음 명령을 사용하여 Azure CLI를 통해 Azure에 로그인합니다.
az login
다음 명령을 통해 PowerShell을 사용하여 Azure에 로그인합니다.
Connect-AzAccount
암호 없는 연결을 사용하도록 애플리케이션 코드 업데이트
다음 에코시스템 각각에 대한 Azure ID 클라이언트 라이브러리는 Azure에 대한 암호 없는 인증을 처리하는 DefaultAzureCredential
클래스를 제공합니다.
DefaultAzureCredential
은 다중 인증 방법을 지원합니다. 사용할 메서드는 런타임 시 결정됩니다. 이 방법을 사용하면 앱에서 환경별 코드를 구현하지 않고도 다양한 환경(로컬 및 프로덕션)에서 다양한 인증 방법을 사용할 수 있습니다. DefaultAzureCredential
이 자격 증명을 찾는 순서 및 위치는 이전의 링크를 참조하세요.
.NET 애플리케이션에서 DefaultAzureCredential
을 사용하려면 Azure.Identity
패키지를 설치합니다.
dotnet add package Azure.Identity
파일 맨 위에 다음 코드를 추가합니다.
using Azure.Identity;
Azure Queue Storage에 연결할 QueueClient
개체를 만드는 코드의 위치를 식별합니다. 코드를 다음 예제와 일치하도록 업데이트합니다.
DefaultAzureCredential credential = new();
QueueClient queueClient = new(
new Uri($"https://{storageAccountName}.queue.core.windows.net/{queueName}"),
new DefaultAzureCredential());
Go 애플리케이션에서 DefaultAzureCredential
을 사용하려면 azidentity
모듈을 설치합니다.
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
파일 맨 위에 다음 코드를 추가합니다.
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
Azure Queue Storage에 연결할 QueueClient
인스턴스를 만드는 코드의 위치를 식별합니다. 코드를 다음 예제와 일치하도록 업데이트합니다.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
serviceURL := fmt.Sprintf("https://%s.queue.core.windows.net/", storageAccountName)
client, err := azqueue.NewQueueClient(serviceURL, cred, nil)
if err != nil {
// handle error
}
Java 애플리케이션에서 DefaultAzureCredential
을 사용하려면 다음 방법 중 하나를 통해 azure-identity
패키지를 설치합니다.
BOM 파일을 포함합니다 .
직접 종속성을 포함합니다.
파일 맨 위에 다음 코드를 추가합니다.
import com.azure.identity.DefaultAzureCredentialBuilder;
Azure Queue Storage에 연결할 QueueClient
개체를 만드는 코드의 위치를 식별합니다. 코드를 다음 예제와 일치하도록 업데이트합니다.
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.build();
String endpoint =
String.format("https://%s.queue.core.windows.net/", storageAccountName);
QueueClient queueClient = new QueueClientBuilder()
.endpoint(endpoint)
.queueName(queueName)
.credential(credential)
.buildClient();
Node.js 애플리케이션에서 DefaultAzureCredential
을 사용하려면 @azure/identity
패키지를 설치합니다.
npm install --save @azure/identity
파일 맨 위에 다음 코드를 추가합니다.
import { DefaultAzureCredential } from "@azure/identity";
Azure Queue Storage에 연결할 QueueClient
개체를 만드는 코드의 위치를 식별합니다. 코드를 다음 예제와 일치하도록 업데이트합니다.
const credential = new DefaultAzureCredential();
const queueClient = new QueueClient(
`https://${storageAccountName}.queue.core.windows.net/${queueName}`,
credential
);
Python 애플리케이션에서 DefaultAzureCredential
을 사용하려면 azure-identity
패키지를 설치합니다.
pip install azure-identity
파일 맨 위에 다음 코드를 추가합니다.
from azure.identity import DefaultAzureCredential
Azure Queue Storage에 연결할 QueueClient
개체를 만드는 코드의 위치를 식별합니다. 코드를 다음 예제와 일치하도록 업데이트합니다.
credential = DefaultAzureCredential()
queue_client = QueueClient(
account_url = "https://%s.blob.core.windows.net" % storage_account_name,
queue_name = queue_name,
credential = credential
)
QueueClient
개체의 URI에서 스토리지 계정 이름을 업데이트해야 합니다. Azure Portal의 개요 페이지에서 스토리지 계정 이름을 찾을 수 있습니다.
로컬에서 앱 실행하기
이러한 코드가 변경되면 애플리케이션을 로컬로 실행합니다. 새 구성에서 Azure CLI, Visual Studio 또는 IntelliJ와 같은 로컬 자격 증명을 선택해야 합니다. Azure에서 사용자에게 할당한 역할을 통해 앱에서 Azure 서비스에 로컬로 연결할 수 있습니다.
애플리케이션이 암호 없는 연결을 사용하도록 구성되고 로컬로 실행되면 동일한 코드가 Azure에 배포된 후 Azure 서비스에 인증될 수 있습니다. 다음 섹션에서는 관리 ID 를 사용하여 Azure Queue Storage에 연결하도록 배포된 애플리케이션을 구성하는 방법을 설명합니다. 관리 ID는 Microsoft Entra 인증을 지원하는 리소스에 연결할 때 애플리케이션이 사용할 수 있도록 Microsoft Entra ID에서 자동으로 관리 ID를 제공합니다. 관리 ID에 대해 자세히 알아보세요.
관리 ID 만들기
사용자가 할당한 관리 ID는 Azure Portal 또는 Azure CLI를 사용하여 만들 수 있습니다. 애플리케이션에서 ID를 사용하여 다른 서비스에 인증합니다.
Azure Portal의 위쪽에서 관리 ID 를 검색합니다. 관리 ID 결과를 선택합니다.
관리 ID 개요 페이지의 위쪽에서 + 만들기 를 선택합니다.
기본 사항 탭에서 다음 값을 입력합니다.
구독 : 원하는 구독을 선택합니다.
리소스 그룹 : 원하는 리소스 그룹을 선택합니다.
지역 : 자신의 위치 근처 지역을 선택합니다.
이름 : 인식할 수 있는 ID 이름(예: MigrationIdentity )을 입력합니다.
페이지 아래쪽에서 검토 + 만들기 를 선택합니다.
유효성 검사가 완료되면 만들기 를 선택합니다. Azure에서 사용자가 할당한 ID를 새로 만듭니다.
리소스가 만들어지면 리소스로 이동 을 선택하여 관리 ID의 세부 정보를 확인합니다.
az identity create 명령을 사용하여 사용자가 할당한 관리 ID를 만듭니다.
az identity create --name MigrationIdentity --resource-group <your-resource-group>
관리 ID를 웹앱과 연결
만든 관리 ID를 사용하도록 웹앱을 구성해야 합니다. Azure Portal 또는 Azure CLI를 사용하여 ID를 앱에 할당합니다.
Azure Portal에서 다음 단계를 완료하여 ID를 앱과 연결합니다. 이러한 동일한 단계가 적용되는 Azure 서비스는 다음과 같습니다.
Azure Spring Apps
Azure Container Apps
Azure 가상 머신
Azure Kubernetes Service
웹앱의 개요 페이지로 이동합니다.
왼쪽 탐색 영역에서 ID 를 선택합니다.
ID 페이지에서 사용자 할당 탭으로 전환합니다.
+ 추가 를 선택하여 사용자가 할당한 관리 ID 추가 플라이아웃을 엽니다.
이전에 ID를 만드는 데 사용한 구독을 선택합니다.
이름으로 MigrationIdentity 를 검색하고 검색 결과에서 선택합니다.
추가 를 선택하여 ID를 앱과 연결합니다.
다음 Azure CLI 명령을 사용하여 ID를 앱과 연결합니다.
az identity show 명령을 사용하여 만든 관리 ID의 ID를 검색합니다. 다음 단계에서 사용할 출력 값을 복사합니다.
az identity show --name MigrationIdentity -g <your-identity-resource-group-name> --query id
az webapp identity assign 명령을 사용하여 관리 ID를 Azure App Service 인스턴스에 할당할 수 있습니다.
az webapp identity assign \
--resource-group <resource-group-name> \
--name <webapp-name>
--identities <managed-identity-id>
az spring app identity assign 명령을 사용하여 관리 ID를 Azure Spring App 인스턴스에 할당할 수 있습니다.
az spring app identity assign \
--resource-group <resource-group-name> \
--name <app-name> \
--service <service-name>
--user-assigned <managed-identity-id>
az containerapp identity assign 명령을 사용하여 관리 ID를 가상 머신에 할당할 수 있습니다.
az containerapp identity assign \
--resource-group <resource-group-name> \
--name <app-name>
--user-assigned <managed-identity-id>
az vm identity assign 명령을 사용하여 관리 ID를 가상 머신에 할당할 수 있습니다.
az vm identity assign \
--resource-group <resource-group-name> \
--name <virtual-machine-name>
--identities <managed-identity-id>
az aks update 명령을 사용하여 관리 ID를 AKS(Azure Kubernetes Service)에 할당할 수 있습니다.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-managed-identity \
--assign-identity <managed-identity-id> \
--assign-kubelet-identity <managed-identity-id>
서비스 커넥터를 통해 Azure CLI를 사용하여 Azure 컴퓨팅 호스팅 환경과 대상 서비스 간의 연결을 만들 수 있습니다. 서비스 커넥터 CLI 명령은 적절한 역할을 ID에 자동으로 할당합니다. 서비스 커넥터 및 지원되는 시나리오는 개요 페이지 에서 자세히 알아볼 수 있습니다.
az identity show
명령을 사용하여 만든 관리 ID의 클라이언트 ID를 검색합니다. 나중에 사용할 수 있도록 값을 복사합니다.
az identity show \
--name MigrationIdentity \
--resource-group <your-resource-group> \
--query clientId
적절한 CLI 명령을 사용하여 서비스 연결을 설정합니다.
Azure App Service를 사용하는 경우 az webapp connection 명령을 사용합니다.
az webapp connection create storage-queue \
--resource-group <resource-group-name> \
--name <webapp-name> \
--target-resource-group <target-resource-group-name> \
--account <target-storage-account-name> \
--user-identity "client-id=<your-identity-client-id>" "subs-id=<your-subscription-id>"
Azure Spring Apps를 사용하는 경우 az spring connection 명령을 사용합니다 .
az spring connection create storage-queue \
--resource-group <resource-group-name> \
--service <service-instance-name> \
--app <app-name> \
--deployment <deployment-name> \
--target-resource-group <target-resource-group> \
--account <target-storage-account-name> \
--user-identity "client-id=<your-identity-client-id>" "subs-id=<your-subscription-id>"
Azure Container Apps를 사용하는 경우 az containerapp connection 명령을 사용합니다.
az containerapp connection create storage-queue \
--resource-group <resource-group-name> \
--name <containerapp-name> \
--target-resource-group <target-resource-group-name> \
--account <target-storage-account-name> \
--user-identity "client-id=<your-identity-client-id>" "subs-id=<your-subscription-id>"
관리 ID에 역할 할당
다음으로, 스토리지 계정에 액세스하기 위해 권한을 만든 관리 ID에 부여해야 합니다. 로컬 개발 사용자에게 수행한 것과 마찬가지로 역할을 관리 ID에 할당하여 권한을 부여합니다.
스토리지 계정 개요 페이지로 이동하여 왼쪽 탐색 영역에서 액세스 제어(IAM) 를 선택합니다.
역할 할당 추가 를 선택합니다.
역할 검색 상자에서 큐에 대한 데이터 작업을 관리하는 데 사용되는 일반적인 역할인 스토리지 큐 데이터 기여자 를 검색합니다. 사용 사례에 적합한 역할을 할당할 수 있습니다. 목록에서 스토리지 큐 데이터 기여자 를 선택하고, 다음 을 선택합니다.
역할 할당 추가 화면에서 다음에 대한 액세스 할당 옵션에 대해 관리 ID 를 선택합니다. 그런 다음, + 멤버 선택 을 선택합니다.
플라이아웃에서 이름으로 만든 관리 ID를 검색하고 결과에서 선택합니다. 선택 을 선택하여 플라이아웃 메뉴를 닫습니다.
검토 + 할당 을 선택하여 역할 할당을 완료할 수 있을 때까지 다음 을 몇 번 선택합니다.
Azure CLI를 사용하여 리소스 수준에서 역할을 할당하려면 먼저 az storage account 명령을 사용하여 리소스 ID를 검색해야 합니다. --query
매개 변수를 사용하여 출력 속성을 필터링할 수 있습니다.
az storage account show \
--resource-group '<your-resource-group-name>' \
--name '<your-storage-account-name>' \
--query id
이전 명령의 출력 ID를 복사합니다. 그런 다음, Azure CLI의 az role assignment 명령을 사용하여 역할을 할당할 수 있습니다.
az role assignment create \
--assignee "<your-username>" \
--role "Storage Queue Data Contributor" \
--scope "<your-resource-id>"
서비스 커넥터를 사용하여 서비스를 연결한 경우 이 단계를 완료할 필요가 없습니다. 서비스 커넥터 CLI 명령을 실행할 때 필요한 역할 구성이 처리되었습니다.
애플리케이션 코드 업데이트
Azure에 배포할 때 만든 특정 관리 ID를 찾도록 애플리케이션 코드를 구성해야 합니다. 일부 시나리오에서는 앱에 대한 관리 ID를 명시적으로 설정하면 다른 환경 ID가 실수로 검색되어 자동으로 사용되지 않도록 방지할 수도 있습니다.
관리 ID 개요 페이지에서 클라이언트 ID 값을 클립보드에 복사합니다.
다음 언어별 변경 내용을 적용합니다.
DefaultAzureCredentialOptions
개체를 만들고 DefaultAzureCredential
에 전달합니다. ManagedIdentityClientId 속성을 클라이언트 ID로 설정합니다.
DefaultAzureCredential credential = new(
new DefaultAzureCredentialOptions
{
ManagedIdentityClientId = managedIdentityClientId
});
AZURE_CLIENT_ID
환경 변수를 관리 ID 클라이언트 ID로 설정합니다. DefaultAzureCredential
은 이 환경 변수를 읽습니다.
managedIdentityClientId 메서드를 호출합니다. 클라이언트 ID를 전달합니다.
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.managedIdentityClientId(managedIdentityClientId)
.build();
managedIdentityClientId 속성이 클라이언트 ID로 설정된 DefaultAzureCredentialClientIdOptions
개체를 만듭니다. 해당 개체를 DefaultAzureCredential
생성자에 전달합니다.
const credential = new DefaultAzureCredential({
managedIdentityClientId
});
DefaultAzureCredential
생성자의 managed_identity_client_id 매개 변수를 클라이언트 ID로 설정합니다.
credential = DefaultAzureCredential(
managed_identity_client_id = managed_identity_client_id
)
구성 업데이트를 적용하기 위해 이 변경을 수행한 후 코드를 Azure에 다시 배포합니다.
앱 테스트
업데이트된 코드가 배포되면 브라우저에서 호스트된 애플리케이션으로 이동합니다. 앱에서 스토리지 계정에 성공적으로 연결할 수 있어야 합니다. 역할 할당이 Azure 환경을 통해 전파되는 데 몇 분 정도 걸릴 수 있습니다. 이제 개발자가 애플리케이션 자체에서 비밀을 관리하지 않고도 애플리케이션이 로컬 및 프로덕션 환경 모두에서 실행되도록 구성되었습니다.
다음 단계
이 자습서에서는 애플리케이션을 암호 없는 연결로 마이그레이션하는 방법을 알아보았습니다.
다음 리소스를 참조하여 이 문서에서 설명하는 개념을 자세히 살펴볼 수 있습니다.