Marketplace 계량 서비스 인증 전략
Marketplace 계량 서비스는 다음 두 가지 인증 전략을 지원합니다.
- Microsoft Entra 보안 토큰
- 관리되는 신원
이 문서에서는 Marketplace 계량 서비스를 사용하여 사용자 지정 미터를 안전하게 제출하기 위해 다양한 인증 전략을 사용하는 시기와 방법을 설명합니다.
Microsoft Entra 보안 토큰 사용
적용 가능한 제품 유형은 관리되는 애플리케이션 계획 유형을 사용하는 거래 가능한 SaaS 및 Azure 애플리케이션입니다.
미리 정의된 고정 Microsoft Entra 애플리케이션 ID를 사용하여 사용자 지정 미터를 제출하여 인증합니다.
SaaS 제품의 경우 사용 가능한 유일한 옵션입니다. SaaS 제안을 게시하기 위한 필수 단계로, 에서 설명한 대로 SaaS 애플리케이션을 등록해야 합니다.
관리되는 애플리케이션 계획이 있는 Azure 애플리케이션의 경우 다음 경우에 이 전략을 사용하는 것이 좋습니다.
- 백 엔드 서비스와 통신하는 메커니즘이 이미 있으며 이 메커니즘을 확장하여 중앙 서비스에서 사용자 지정 미터를 내보내려고 합니다.
- 복잡한 사용자 지정 미터 논리가 있습니다. 관리되는 애플리케이션 리소스 대신 중앙 위치에서 이 논리를 실행합니다.
애플리케이션을 등록할 때 프로그래밍 방식으로 Microsoft Entra 보안 토큰을 요청할 수 있습니다. 게시자는 이 토큰을 사용하고 해결을 요청해야 합니다.
이러한 토큰에 대한 자세한 내용은 Microsoft Entra 액세스 토큰참조하세요.
Microsoft Entra 앱을 기반으로 토큰 가져오기
HTTP 메서드
POST
요청 URL
https://login.microsoftonline.com/*{tenantId}*/oauth2/token
URI 매개 변수
매개 변수 이름 | 필수 | 설명 |
---|---|---|
tenantId |
참 | 등록된 Microsoft Entra 애플리케이션의 테넌트 ID입니다. |
요청 헤더
헤더 이름 | 필수 | 설명 |
---|---|---|
Content-Type |
진실 | 요청과 연결된 콘텐츠 형식입니다. 기본값은 application/x-www-form-urlencoded . |
요청 본문
속성 이름 | 필수 | 설명 |
---|---|---|
Grant_type |
참 | 부여 유형
client_credentials 사용합니다. |
Client_id |
참 | Microsoft Entra 앱과 연결된 클라이언트/앱 식별자입니다. |
client_secret |
참 | Microsoft Entra 앱과 연결된 비밀입니다. |
Resource |
진실 | 토큰이 요청되는 대상 리소스입니다.
00001111-aaaa-2222-bbbb-3333cccc4444 사용합니다. |
응답
이름 | 형식 | 설명 |
---|---|---|
200 OK |
TokenResponse |
요청이 성공했습니다. |
TokenResponse
샘플 응답 토큰:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "0",
"expires_on": "15251…",
"not_before": "15251…",
"resource": "00001111-aaaa-2222-bbbb-3333cccc4444",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9…"
}
Azure 관리 ID 토큰 사용
적용 가능한 제품 유형은 Kubernetes 앱 제품 및 관리되는 애플리케이션 계획 유형이 있는 Azure 애플리케이션입니다.
이 방법을 사용하면 배포된 리소스 ID가 인증하여 사용자 지정 미터 사용량 이벤트를 보낼 수 있습니다. 배포 경계 내에서 사용량을 내보내는 코드를 포함할 수 있습니다.
메모
게시자는 사용량을 내보내는 리소스가 잠겨 있으므로 변조되지 않도록 해야 합니다.
관리되는 애플리케이션은 Virtual Machines에서 Azure Functions에 이르기까지 다양한 유형의 리소스를 포함할 수 있습니다. 다양한 서비스에 대해 관리 ID를 사용하여 인증하는 방법에 대한 자세한 내용은 Azure 리소스에 관리 ID를 사용하는 방법)을 참조하세요.
예를 들어 다음 단계를 사용하여 Windows VM을 사용하여 인증합니다.
다음 방법 중 하나를 사용하여 관리 ID가 구성되었는지 확인합니다.
- Azure 포털 UI
- CLI
- PowerShell
- Azure Resource Manager 템플릿
- REST
- Azure SDKs
시스템 ID를 사용하여 Marketplace 계량 서비스 애플리케이션 ID(
00001111-aaaa-2222-bbbb-3333cccc4444
)에 대한 액세스 토큰을 가져오고, VM에 대한 RDP를 가져오고, PowerShell 콘솔을 열고, 명령을 실행합니다.# curl is an alias to Web-Invoke PowerShell command # Get system identity access tokenn $MetadataUrl = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F" $Token = curl -H @{"Metadata" = "true"} $MetadataUrl | Select-Object -Expand Content | ConvertFrom-Json $Headers = @{} $Headers.Add("Authorization","$($Token.token_type) "+ " " + "$($Token.access_token)")
현재 리소스 그룹 'ManagedBy' 속성에서 관리되는 앱 ID를 가져옵니다(Kubernetes 앱 제품에는 필요하지 않음).
# Get subscription and resource group $metadata = curl -H @{'Metadata'='true'} http://169.254.169.254/metadata/instance?api-version=2019-06-01 | select -ExpandProperty Content | ConvertFrom-Json # Make sure the system identity has at least reader permission on the resource group $managementUrl = "https://management.azure.com/subscriptions/" + $metadata.compute.subscriptionId + "/resourceGroups/" + $metadata.compute.resourceGroupName + "?api-version=2019-10-01" $resourceGroupInfo = curl -Headers $Headers $managementUrl | select -ExpandProperty Content | ConvertFrom-Json $managedappId = $resourceGroupInfo.managedBy
Marketplace 계량 서비스 API 사용하여 사용량을 내보냅니다.
Kubernetes 앱 제품의 경우 다음 단계에 따라 앱에서 인증 토큰을 가져옵니다. 자세한 내용은 샘플 코드참조하세요.
애플리케이션의 MSI(관리 서비스 ID) 클라이언트 ID를 사용하여 Microsoft Marketplace 계량 API와 통신하기 위한 인증 토큰을 생성해야 합니다. 자세한 내용은 샘플 코드참조하세요.
# Audience for the token to be generated resource = '00001111-aaaa-2222-bbbb-3333cccc4444' clientId = <identity client id> url = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&clientId={0}&resource={1}".format(clientId,resource) headers = {'Metadata': 'true'} # Need to import requests module response = requests.get(url) response = requests.get(url, headers=headers) authToken = response.json()
Marketplace 계량 서비스 API 사용하여 사용량 내보내기
관련 콘텐츠
- Azure 애플리케이션 제품 만들기
- SaaS 서비스 제안 계획