Marketplace 계량 서비스 인증 전략
Marketplace 계량 서비스는 두 가지 인증 전략을 지원합니다.
이 문서에서는 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 매개 변수
매개 변수 이름 | Required | 설명 |
---|---|---|
tenantId |
True | 등록된 Microsoft Entra 애플리케이션의 테넌트 ID입니다. |
요청 헤더
헤더 이름 | Required | 설명 |
---|---|---|
Content-Type |
True | 요청과 연결된 콘텐츠 형식입니다. 기본값은 application/x-www-form-urlencoded 입니다. |
요청 본문
속성 이름 | Required | 설명 |
---|---|---|
Grant_type |
True | 허용 형식입니다. client_credentials 을 사용합니다. |
Client_id |
True | Microsoft Entra 앱과 연결된 클라이언트/앱 식별자입니다. |
client_secret |
True | Microsoft Entra 앱과 연결된 비밀입니다. |
Resource |
True | 토큰이 요청되는 대상 리소스입니다. 20e940b3-4c77-4b0b-9a53-9e16a1b010a7 을 사용합니다. |
Response
이름 | 타입 | 설명 |
---|---|---|
200 OK |
TokenResponse |
요청이 성공했습니다. |
TokenResponse
샘플 응답 토큰:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "0",
"expires_on": "15251…",
"not_before": "15251…",
"resource": "20e940b3-4c77-4b0b-9a53-9e16a1b010a7",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9…"
}
Azure 관리 ID 토큰 사용
적용 가능한 제품 유형은 Kubernetes 앱 제품 및 관리되는 애플리케이션 계획 유형이 있는 Azure 애플리케이션입니다.
이 방법을 사용하면 배포된 리소스 ID가 인증하여 사용자 지정 미터 사용량 이벤트를 보낼 수 있습니다. 배포 경계 내에서 사용량을 내보내는 코드를 포함할 수 있습니다.
참고 항목
게시자는 사용량을 내보내는 리소스가 잠겨 있는지 확인해야 하므로 변조되지 않습니다.
관리되는 애플리케이션은 Virtual Machines에서 Azure Functions까지 다른 유형의 리소스를 포함할 수 있습니다. 여러 서비스에 대해 관리 ID를 사용하여 인증하는 방법에 대한 자세한 내용은 Azure 리소스에 대한 관리 ID를 사용하는 방법을 참조하세요.
예를 들어 다음 단계를 사용하여 Windows VM을 사용하여 인증합니다.
다음 방법 중 하나를 사용하여 관리 ID가 구성되었는지 확인합니다.
시스템 ID를 사용하여 Marketplace 계량 서비스 애플리케이션 ID(
20e940b3-4c77-4b0b-9a53-9e16a1b010a7
)에 대한 액세스 토큰을 가져오고, 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 = '20e940b3-4c77-4b0b-9a53-9e16a1b010a7' 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를 사용하여 사용량 내보내기