최신 API를 사용하여 프로그래밍 방식으로 Azure 기업계약 구독 만들기
이 문서는 최신 API 버전을 사용하여 EA 청구 계정에 대한 Azure EA(기업계약) 구독을 프로그래밍 방식으로 만드는 데 도움이 됩니다. 이전 미리 보기 버전을 여전히 사용 중인 경우 레거시 API를 사용하여 프로그래밍 방식으로 Azure 구독 만들기를 참조하세요.
이 문서에서는 Azure Resource Manager를 사용하여 프로그래밍 방식으로 구독을 만드는 방법을 알아봅니다.
프로그래밍 방식으로 Azure 구독을 만드는 경우 Microsoft 또는 인증된 판매자로부터 Azure 서비스를 받는 계약 사용 약관이 적용됩니다. 자세한 내용은 Microsoft Azure 법적 정보를 참조하세요.
참고 항목
Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.
프로그래밍 방식으로 지원 계획을 만들 수는 없습니다. Azure Portal에서 새 지원 계획을 구매하거나 업그레이드할 수 있습니다. 도움말 + 지원으로 이동한 다음 페이지 상단에서 올바른 지원 계획 선택을 선택합니다.
필수 조건
구독을 만들려면 사용자에게 등록 계정에 대한 엔터프라이즈 관리자 역할 또는 소유자 역할이 있어야 합니다. 등록 계정에 대한 소유자 역할을 가져오는 방법에는 두 가지가 있습니다.
- 등록의 엔터프라이즈 관리자는 귀하를 계정 소유자로 만들 수 있고(로그인 필요) 그러면 귀하가 등록 계정의 소유자가 됩니다.
- 등록 계정의 기존 소유자가 액세스 권한을 부여할 수 있습니다.
서비스 주체를 사용하여 EA 구독을 만들려면 등록 계정의 소유자가 해당 서비스 주체에게 구독을 만들 수 있는 권한을 부여해야 합니다.
서비스 주체를 사용하여 구독을 만드는 경우 Microsoft Graph PowerShell 또는 Azure CLI를 사용하여 Microsoft Entra Enterprise 애플리케이션의 ObjectId를 서비스 주체 ID로 사용합니다. 서비스 주체 및 테넌트 ID 찾기의 단계를 사용하여 기존 서비스 주체에 대한 Azure Portal에서 개체 ID를 찾을 수도 있습니다.
EA 역할 할당 API 요청에 대한 자세한 내용은 Azure 기업계약 서비스 주체 이름에 역할 할당을 참조하세요. 이 문서에는 서비스 주체에 할당할 수 있는 역할(및 역할 정의 ID) 목록이 포함되어 있습니다.
참고 항목
- 올바른 API 버전을 사용하여 등록 계정 소유자 권한을 부여했는지 확인합니다. 이 문서 및 여기에서 설명하는 API에는 2019-10-01-preview API를 사용합니다.
- 최신 API를 사용하기 위해 마이그레이션하는 경우 2015-07-01 버전으로 만든 이전 구성은 최신 API에서 사용하도록 자동으로 변환되지 않습니다.
- 등록 계정 정보는 사용자의 역할이 계정 소유자인 경우에만 표시됩니다. 사용자에게 여러 역할이 있는 경우 API는 사용자의 가장 덜 제한적인 역할을 사용합니다.
액세스할 수 있는 계정 찾기
계정 소유자와 연결된 등록 계정에 귀하가 추가되면 Azure는 계정-등록 관계를 사용하여 구독 요금을 청구할 위치를 결정합니다. 계정에서 만든 모든 구독은 계정이 있는 EA 등록에 청구됩니다. 구독을 만들려면 등록 계정 및 구독을 소유하는 사용자 계정에 대한 값을 전달해야 합니다.
다음 명령을 실행하려면 기본적으로 구독이 생성되는 디렉터리인 계정 소유자의 홈 디렉터리에 로그인해야 합니다.
액세스 권한이 있는 모든 등록 계정을 나열하도록 요청합니다.
GET https://management.azure.com/providers/Microsoft.Billing/billingaccounts/?api-version=2020-05-01
액세스 권한이 있는 모든 등록 계정이 API 응답에 나열됩니다.
{
"value": [
{
"id": "/providers/Microsoft.Billing/billingAccounts/1234567",
"name": "1234567",
"properties": {
"accountStatus": "Unknown",
"accountType": "Enterprise",
"agreementType": "EnterpriseAgreement",
"soldTo": {
"companyName": "Contoso",
"country": "US "
},
"billingProfiles": {
"hasMoreResults": false
},
"displayName": "Contoso",
"enrollmentAccounts": [
{
"id": "/providers/Microsoft.Billing/billingAccounts/1234567/enrollmentAccounts/7654321",
"name": "7654321",
"type": "Microsoft.Billing/enrollmentAccounts",
"properties": {
"accountName": "Contoso",
"accountOwnerEmail": "kenny@contoso.onmicrosoft.com",
"costCenter": "Test",
"isDevTest": false
}
}
],
"hasReadAccess": false
},
"type": "Microsoft.Billing/billingAccounts"
}
]
}
청구 범위와 id
의 값은 동일합니다. 등록 계정의 id
는 구독 요청이 시작되는 청구 범위입니다. 구독을 만들기 위해 문서의 뒷부분에서 사용하는 필수 매개 변수이므로 ID를 알고 있어야 합니다.
특정 등록 계정 아래에서 구독 만들기
다음 예에서는 이전 단계에서 선택한 등록 계정에 Dev Team Subscription이라는 구독을 만듭니다.
다음 방법 중 하나를 사용하여 구독 별칭 이름을 만듭니다. 별칭 이름을 만들 때 다음을 수행하는 것이 좋습니다.
- 영숫자 및 하이픈 사용
- 문자로 시작하여 영숫자로 끝남
- 마침표를 사용하지 마세요.
별칭은 구독 GUID 대신 사용자 정의 문자열의 단순 대체에 사용됩니다. 즉, 바로 가기로 사용할 수 있습니다. 별칭 - 만들기에서 별칭에 대해 자세히 알아볼 수 있습니다. 다음 예제에서 sampleAlias
가 생성되지만 원하는 문자열을 사용할 수 있습니다.
계정 소유자 역할 외에 여러 사용자 역할이 있는 경우 Azure Portal에서 계정 ID를 검색해야 합니다. 그런 다음 ID를 사용하여 프로그래밍 방식으로 구독을 만들 수 있습니다.
PUT API를 호출하여 구독 만들기 요청/별칭을 만듭니다.
PUT https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01api-version=2021-10-01
요청 본문에서, enrollmentAccounts
중 하나의 billingScope
및 id
를 입력합니다.
{
"properties": {
"billingScope": "/providers/Microsoft.Billing/BillingAccounts/1234567/enrollmentAccounts/7654321",
"DisplayName": "Dev Team Subscription", //Subscription Display Name
"Workload": "Production"
}
}
Workload
에 허용되는 값은 Production
및 DevTest
입니다.
응답
{
"id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
"name": "sampleAlias",
"type": "Microsoft.Subscription/aliases",
"properties": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"provisioningState": "Accepted"
}
}
동일한 URL에 대해 GET을 수행하여 요청 상태를 가져올 수 있습니다.
Request
GET https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01
Response
{
"id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
"name": "sampleAlias",
"type": "Microsoft.Subscription/aliases",
"properties": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"provisioningState": "Succeeded"
}
}
진행 중 상태는 provisioningState
아래에 Accepted
상태로 반환됩니다.
구독을 만들고 SubscriptionOwnerId를 소유자로 설정
서비스 주체가 구독 별칭 API를 사용하여 새 구독을 만들고 요청에 additionalProperties
를 포함하지 않으면 서비스 주체가 자동으로 새 구독의 소유자가 됩니다. 서비스 주체가 소유자가 되는 것을 원하지 않으면 additionalProperties
에 subscriptionTenantId
및 subscriptionOwnerId
를 지정할 수 있습니다. 이 프로세스는 지정된 subscriptionOwnerId
를 서비스 주체가 아닌 새 구독의 소유자로 만듭니다.
샘플 요청 본문:
{
"properties": {
"billingScope": "/providers/Microsoft.Billing/billingAccounts/{EABillingAccountId}/enrollmentAccounts/{EnrollmentAccountId}",
"displayName": "{SubscriptionName}",
"workLoad": "Production",
"resellerId": null,
"additionalProperties": {
"managementGroupId": "",
"subscriptionTenantId": "{SubscriptionTenantId}", // Here you input the tenant GUID where the subscription resides after creation
"subscriptionOwnerId": "{ObjectId that becomes the owner of the subscription}", // Here you input the objectId which is set as the subscription owner when it gets created.
"tags": {}
}
}
}
다른 테넌트에서 구독 만들기
구독 별칭 REST API를 사용하면 요청 본문의 subscriptionTenantId
매개 변수를 사용하여 다른 테넌트에 구독을 만들 수 있습니다. 구독을 만들려면 SPN(Azure 서비스 주체)이 홈 테넌트에서 토큰을 가져와야 합니다. 구독을 만든 후 소유권 수락 API를 사용하여 전송을 수락하려면 대상 테넌트로부터 토큰을 가져와야 합니다.
다른 테넌트에서 EA 구독을 만드는 방법에 대한 자세한 내용은 다른 테넌트에서 구독 만들기 및 이전 요청 보기를 참조하세요.
ARM 템플릿 또는 Bicep 사용
이전 섹션에서는 PowerShell, CLI 또는 REST API를 사용하여 구독을 만드는 방법을 살펴보았습니다. 구독 만들기를 자동화해야 하는 경우 ARM 템플릿(Azure Resource Manager 템플릿) 또는 Bicep 파일을 사용하는 것이 좋습니다.
다음 ARM 템플릿은 구독을 만듭니다. billingScope
에 등록 계정 ID를 제공합니다. 구독은 루트 관리 그룹에서 만들어집니다. 구독을 만든 후 다른 관리 그룹으로 이동할 수 있습니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscriptionAliasName": {
"type": "string",
"metadata": {
"description": "Provide a name for the alias. This name will also be the display name of the subscription."
}
},
"billingScope": {
"type": "string",
"metadata": {
"description": "Provide the full resource ID of billing scope to use for subscription creation."
}
}
},
"resources": [
{
"scope": "/",
"name": "[parameters('subscriptionAliasName')]",
"type": "Microsoft.Subscription/aliases",
"apiVersion": "2021-10-01",
"properties": {
"workLoad": "Production",
"displayName": "[parameters('subscriptionAliasName')]",
"billingScope": "[parameters('billingScope')]"
}
}
],
"outputs": {}
}
또는 Bicep 파일을 사용하여 구독을 만듭니다.
targetScope = 'managementGroup'
@description('Provide a name for the alias. This name will also be the display name of the subscription.')
param subscriptionAliasName string
@description('Provide the full resource ID of billing scope to use for subscription creation.')
param billingScope string
resource subscriptionAlias 'Microsoft.Subscription/aliases@2021-10-01' = {
scope: tenant()
name: subscriptionAliasName
properties: {
workload: 'Production'
displayName: subscriptionAliasName
billingScope: billingScope
}
}
관리 그룹 수준에서 템플릿을 배포합니다. 다음 예제는 JSON ARM 템플릿 배포를 보여 주지만 대신 Bicep 파일을 배포할 수도 있습니다.
PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/mg1/providers/Microsoft.Resources/deployments/exampledeployment?api-version=2020-06-01
다음 요청 본문을 사용합니다.
{
"location": "eastus",
"properties": {
"templateLink": {
"uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json"
},
"parameters": {
"subscriptionAliasName": {
"value": "sampleAlias"
},
"billingScope": {
"value": "/providers/Microsoft.Billing/BillingAccounts/1234567/enrollmentAccounts/7654321"
}
},
"mode": "Incremental"
}
}
구독을 새 관리 그룹으로 이동하려면 다음 ARM 템플릿을 사용합니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"targetMgId": {
"type": "string",
"metadata": {
"description": "Provide the ID of the management group that you want to move the subscription to."
}
},
"subscriptionId": {
"type": "string",
"metadata": {
"description": "Provide the ID of the existing subscription to move."
}
}
},
"resources": [
{
"scope": "/",
"type": "Microsoft.Management/managementGroups/subscriptions",
"apiVersion": "2020-05-01",
"name": "[concat(parameters('targetMgId'), '/', parameters('subscriptionId'))]",
"properties": {
}
}
],
"outputs": {}
}
또는 다음 Bicep 파일을 사용해도 됩니다.
targetScope = 'managementGroup'
@description('Provide the ID of the management group that you want to move the subscription to.')
param targetMgId string
@description('Provide the ID of the existing subscription to move.')
param subscriptionId string
resource subToMG 'Microsoft.Management/managementGroups/subscriptions@2020-05-01' = {
scope: tenant()
name: '${targetMgId}/${subscriptionId}'
}
Azure 엔터프라이즈 구독 생성 API의 제한 사항
- 오직 Azure 엔터프라이즈 구독만이 이 API를 사용하여 생성됩니다.
- 등록 계정당 구독 수는 5,000개로 제한됩니다. 그 후에는 Azure Portal에서만 계정에 대해 더 많은 구독을 만들 수 있습니다. API를 통해 더 많은 구독을 만들려면 또 다른 등록 계정을 만드세요. 취소, 삭제 및 전송된 구독은 5000개 제한에 포함됩니다.
- 계정 소유자는 아니지만 Azure 역할 기반 액세스 제어를 통해 등록 계정에 추가된 사용자는 Azure Portal에서 구독을 만들 수 없습니다.
다음 단계
- 구독을 만들었으므로 다른 사용자 및 서비스 주체에게 해당 기능을 부여할 수 있습니다. 자세한 내용은 Azure 엔터프라이즈 구독 만들기에 대한 액세스 권한 부여(미리 보기)를 참조하세요.
- 관리 그룹을 사용하여 여러 구독을 관리하는 방법에 대한 자세한 내용은 Azure 관리 그룹으로 리소스 구성을 참조하세요.
- 구독의 관리 그룹을 변경하려면 구독 이동을 참조하세요.
- REST API를 사용하는 고급 구독 만들기 시나리오는 별칭 - 만들기를 참조하세요.