다음을 통해 공유


빠른 시작: Azure CLI로 Azure 청사진 정의 및 할당

Important

2026년 7월 11일에 청사진(미리 보기)이 사용 중단됩니다. 기존 청사진 정의와 할당을 템플릿 사양배포 스택으로 마이그레이션하세요. 청사진 아티팩트는 배포 스택을 정의하는 데 사용되는 ARM JSON 템플릿 또는 Bicep 파일로 변환됩니다. 아티팩트를 ARM 리소스로 작성하는 방법을 알아보려면 다음을 참조하세요.

이 자습서에서는 Azure Blueprints를 사용하여 조직 내에서 청사진을 작성, 게시 및 할당하는 것과 관련된 일반적인 작업을 수행하는 방법을 알아봅니다. 이 기술은 ARM(Azure Resource Manager) 템플릿, 정책 및 보안을 기반으로 재사용 가능하고 신속하게 배포할 수 있는 구성을 개발하기 위한 공통 패턴을 정의하는 데 유용합니다.

필수 조건

  • Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • 이전에 Azure Blueprints를 사용하지 않았으면 Azure CLI를 통해 리소스 공급자를 az provider register --namespace Microsoft.Blueprint로 등록합니다.

Azure Cloud Shell

Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스 작업을 수행할 수 있습니다. 로컬 환경에 아무 것도 설치할 필요 없이 Azure Cloud Shell의 미리 설치된 명령을 사용하여 이 문서의 코드를 실행할 수 있습니다.

Azure Cloud Shell을 시작하려면 다음을 수행합니다.

옵션 예제/링크
코드 또는 명령 블록의 오른쪽 상단에서 시도를 선택합니다. 시도를 선택해도 코드 또는 명령이 Cloud Shell에 자동으로 복사되지 않습니다. Azure Cloud Shell에 대한 사용 예제를 보여 주는 스크린샷
https://shell.azure.com으로 이동하거나 Cloud Shell 시작 단추를 선택하여 브라우저에서 Cloud Shell을 엽니다. Azure Cloud Shell을 시작하는 단추입니다.
Azure Portal의 오른쪽 위에 있는 메뉴 모음에서 Cloud Shell 단추를 선택합니다. Azure Portal의 Cloud Shell 단추를 보여 주는 스크린샷

Azure Cloud Shell을 사용하려면:

  1. Cloud Shell을 시작합니다.

  2. 코드 블록(또는 명령 블록)에서 복사 단추를 선택하여 코드 또는 명령을 복사합니다.

  3. Windows 및 Linux에서 Ctrl+Shift+V를 선택하거나 macOS에서 Cmd+Shift+V를 선택하여 코드 또는 명령을 Cloud Shell 세션에 붙여넣습니다.

  4. Enter를 선택하여 코드 또는 명령을 실행합니다.

청사진 확장 추가

Azure CLI를 사용하여 청사진 정의와 할당을 관리하려면 확장을 추가해야 합니다. 이 확장은 Azure CLI를 사용할 수 있는 모든 위치에서 작동합니다. 여기에는 Windows 10 기반 bash, Cloud Shell(독립 실행형 버전과 포털 내의 버전 모두), Azure CLI Docker 이미지 또는 로컬에 설치된 확장이 포함됩니다.

  1. 최신 Azure CLI(최소 2.0.76)가 설치되어 있는지 확인하세요. 아직 설치되지 않은 경우 다음 지침을 따릅니다.

  2. 선택한 Azure CLI 환경에서 다음 명령을 사용하여 확장을 가져옵니다.

    # Add the Blueprint extension to the Azure CLI environment
    az extension add --name blueprint
    
  3. 확장이 설치되었고 필요한 버전인지(최소 0.1.0) 유효성을 검사합니다:

    # Check the extension list (note that you might have other extensions installed)
    az extension list
    
    # Run help for extension options
    az blueprint -h
    

청사진 만들기

규정 준수를 위한 표준 패턴을 정의하는 첫 단계는 사용 가능한 리소스로 청사진을 작성하는 것입니다. 구독에 대한 역할 및 정책 할당을 구성하는 MyBlueprint라는 청사진을 만들어 보겠습니다. 그런 다음, 리소스 그룹, ARM 템플릿 및 리소스 그룹에 대한 역할 할당을 추가합니다.

참고 항목

Azure CLI를 사용하는 경우 청사진 개체가 먼저 생성됩니다. 매개 변수가 있는 추가할 아티팩트마다 초기 청사진에 매개 변수를 미리 정의해야 합니다.

  1. 초기 청사진 개체를 만듭니다. parameters 매개 변수는 모든 청사진 수준 매개 변수를 포함하는 JSON 파일을 사용합니다. 할당하는 동안 매개 변수를 설정하면 이후 단계에서 추가하는 아티팩트에서 이러한 매개 변수를 사용합니다.

    • JSON 파일 - blueprintparms.json

      {
         "storageAccountType": {
             "type": "string",
             "defaultValue": "Standard_LRS",
             "allowedValues": [
                 "Standard_LRS",
                 "Standard_GRS",
                 "Standard_ZRS",
                 "Premium_LRS"
             ],
             "metadata": {
                 "displayName": "storage account type.",
                 "description": null
             }
         },
         "tagName": {
             "type": "string",
             "metadata": {
                 "displayName": "The name of the tag to provide the policy assignment.",
                 "description": null
             }
         },
         "tagValue": {
             "type": "string",
             "metadata": {
                 "displayName": "The value of the tag to provide the policy assignment.",
                 "description": null
             }
         },
         "contributors": {
             "type": "array",
             "metadata": {
                 "description": "List of AAD object IDs that is assigned Contributor role at the subscription",
                 "strongType": "PrincipalId"
             }
         },
         "owners": {
             "type": "array",
             "metadata": {
                 "description": "List of AAD object IDs that is assigned Owner role at the resource group",
                 "strongType": "PrincipalId"
             }
         }
      }
      
    • Azure CLI 명령

      # Login first with az login if not using Cloud Shell
      
      # Create the blueprint object
      az blueprint create \
         --name 'MyBlueprint' \
         --description 'This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.' \
         --parameters blueprintparms.json
      

      참고 항목

      청사진 정의를 가져올 때 blueprint.json 파일 이름을 사용합니다. 이 파일 이름은 az 청사진 가져오기를 호출할 때 사용됩니다.

      청사진 개체는 기본적으로 기본 구독에 생성됩니다. 관리 그룹을 지정하려면 managementgroup 매개 변수를 사용합니다. 구독을 지정하려면 subscription 매개 변수를 사용합니다.

  2. 스토리지 아티팩트에 대한 리소스 그룹을 정의에 추가합니다.

    az blueprint resource-group add \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'storageRG' \
       --description 'Contains the resource template deployment and a role assignment.'
    
  3. 구독에서 역할 할당을 추가합니다. 다음 예에서 지정된 역할에 부여된 주체 ID는 청사진 할당 중에 설정되는 매개 변수로 구성됩니다. 이 예제에서는 b24988ac-6180-42a0-ab88-20f7382dd24c의 GUID와 함께 Contributor 기본 제공 역할을 사용합니다.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleContributor' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c' \
       --principal-ids "[parameters('contributors')]"
    
  4. 구독에서 정책 할당을 추가합니다. 이 예제에서는 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71의 GUID와 함께 Apply tag and its default value to resource groups 기본 제공 정책을 사용합니다.

    • JSON 파일 - artifacts\policyTags.json

      {
         "tagName": {
            "value": "[parameters('tagName')]"
         },
         "tagValue": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Azure CLI 명령

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply tag and its default value to resource groups' \
         --description 'Apply tag and its default value to resource groups' \
         --parameters artifacts\policyTags.json
      

      참고 항목

      Mac에서 az blueprint를 사용하는 경우 경로가 포함된 매개 변수 값에서 \/로 바꿉니다. 이 경우 값 parametersartifacts/policyTags.json이 됩니다.

  5. 구독에서 스토리지 태그에 대한 다른 정책 할당을 추가합니다(storageAccountType_ parameter 다시 사용). 이렇게 추가된 정책 할당 아티팩트는 청사진에 정의된 매개 변수가 둘 이상의 아티팩트에서 사용될 수 있다는 것을 보여줍니다. 이 예제에서는 리소스 그룹에 태그를 설정하는 데 storageAccountType을 사용합니다. 이 값은 다음 단계에서 만드는 스토리지 계정에 대한 정보를 제공합니다. 이 예제에서는 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71의 GUID와 함께 Apply tag and its default value to resource groups 기본 제공 정책을 사용합니다.

    • JSON 파일 - artifacts\policyStorageTags.json

      {
         "tagName": {
            "value": "StorageType"
         },
         "tagValue": {
            "value": "[parameters('storageAccountType')]"
         }
      }
      
    • Azure CLI 명령

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyStorageTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply storage tag to resource group' \
         --description 'Apply storage tag and the parameter also used by the template to resource groups' \
         --parameters artifacts\policyStorageTags.json
      

      참고 항목

      Mac에서 az blueprint를 사용하는 경우 경로가 포함된 매개 변수 값에서 \/로 바꿉니다. 이 경우 값 parametersartifacts/policyStorageTags.json이 됩니다.

  6. 리소스 그룹 아래에 템플릿을 추가합니다. ARM 템플릿의 template 매개 변수에는 템플릿의 일반 JSON 구성 요소가 포함되어 있습니다. 또한 템플릿은 각각을 템플릿에 전달하여 storageAccountType, tagName, tagValue 청사진 매개 변수를 다시 사용합니다. parameters 매개 변수를 사용하여 템플릿에서 청사진 매개 변수를 사용할 수 있으며 템플릿 JSON 내에 포함된 키-값 쌍은 값을 삽입하는 데 사용됩니다. 청사진 및 템플릿 매개 변수 이름은 같을 수 있습니다.

    • JSON ARM 템플릿 파일 - artifacts\templateStorage.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "type": "string",
                  "metadata": {
                      "description": "Storage Account type"
                  }
              },
              "tagNameFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag name from blueprint"
                  }
              },
              "tagValueFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag value from blueprint"
                  }
              }
          },
          "variables": {
              "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
          },
          "resources": [{
              "type": "Microsoft.Storage/storageAccounts",
              "name": "[variables('storageAccountName')]",
              "apiVersion": "2016-01-01",
              "tags": {
                  "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
              },
              "location": "[resourceGroup().location]",
              "sku": {
                  "name": "[parameters('storageAccountTypeFromBP')]"
              },
              "kind": "Storage",
              "properties": {}
          }],
          "outputs": {
              "storageAccountSku": {
                  "type": "string",
                  "value": "[variables('storageAccountName')]"
              }
          }
      }
      
    • JSON ARM 템플릿 매개 변수 파일 - artifacts\templateStorageParams.json

      {
         "storageAccountTypeFromBP": {
            "value": "[parameters('storageAccountType')]"
         },
         "tagNameFromBP": {
            "value": "[parameters('tagName')]"
         },
         "tagValueFromBP": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Azure CLI 명령

      az blueprint artifact template create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'templateStorage' \
         --template artifacts\templateStorage.json \
         --parameters artifacts\templateStorageParams.json \
         --resource-group-art 'storageRG'
      

      참고 항목

      Mac에서 az blueprint를 사용하는 경우 경로가 포함된 매개 변수 값에서 \/로 바꿉니다. 이 경우 template 값은 artifacts/templateStorage.json이 되고 parametersartifacts/templateStorageParams.json이 됩니다.

  7. 리소스 그룹 아래에 역할 할당을 추가합니다. 이전 역할 할당 항목과 마찬가지로 다음 예제에서는 Owner 역할에 대한 정의 식별자를 사용하고 청사진과 다른 매개 변수를 제공합니다. 이 예제에서는 8e3af657-a8ff-443c-a75c-2fe8c4bcb635의 GUID와 함께 Owner 기본 제공 역할을 사용합니다.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleOwner' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635' \
       --principal-ids "[parameters('owners')]" \
       --resource-group-art 'storageRG'
    

청사진 게시

청사진에 아티팩트가 추가되었으므로 이제 청사진을 게시합니다. 게시한 후에는 청사진을 구독에 할당할 수 있습니다.

az blueprint publish --blueprint-name 'MyBlueprint' --version '{BlueprintVersion}'

{BlueprintVersion} 값은 문자, 숫자 및 하이픈(공백 또는 기타 특수 문자 없음)으로 구성된 문자열입니다. 최대 길이는 20자입니다. v20200605-135541처럼 고유하고 정보가 될만한 값을 사용합니다.

청사진 할당

Azure CLI를 사용하여 청사진을 게시한 후에 구독에 할당할 수 있습니다. 작성한 청사진을 관리 그룹 계층 구조에 속하는 구독 중 하나에 할당합니다. 구독에 청사진이 저장되면 해당 구독에만 할당될 수 있습니다. blueprint-name 매개 변수는 할당할 청사진을 지정합니다. name, location, identity, lockblueprint 매개 변수를 제공하려면 az blueprint assignment create 명령에서 일치하는 Azure CLI 매개 변수를 사용하거나 매개 변수 JSON 파일에 제공합니다.

  1. 청사진 배포를 구독에 할당하여 실행합니다. contributorsowners 매개 변수에는 역할 할당을 부여할 주체의 objectIds 배열이 필요하므로 Azure Active Directory Graph API를 사용하여 사용자, 그룹 또는 서비스 주체의 parameters에서 사용할 objectIds를 수집합니다.

    • JSON 파일 - blueprintAssignment.json

      {
         "storageAccountType": {
             "value": "Standard_GRS"
         },
         "tagName": {
             "value": "CostCenter"
         },
         "tagValue": {
             "value": "ContosoIT"
         },
         "contributors": {
             "value": [
                 "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                 "38833b56-194d-420b-90ce-cff578296714"
             ]
         },
         "owners": {
             "value": [
                 "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                 "316deb5f-7187-4512-9dd4-21e7798b0ef9"
             ]
         }
      }
      
    • Azure CLI 명령

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      
    • 사용자 할당 관리 ID

      청사진 할당은 사용자가 할당한 관리형 ID로 사용할 수 있습니다. 이 경우 identity-type 매개 변수는 UserAssigned로 설정되고 user-assigned-identities 매개 변수는 ID를 지정합니다. {userIdentity}을 사용자 할당 관리 ID의 이름으로 바꿉니다.

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --identity-type UserAssigned \
         --user-assigned-identities {userIdentity} \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      

      사용자가 할당한 관리 ID는 청사진을 할당하는 사용자에게 권한이 있는 모든 구독 및 리소스 그룹에 있을 수 있습니다.

      Important

      Azure Blueprints는 사용자 할당 관리 ID를 관리하지 않습니다. 사용자가 충분한 역할과 권한을 할당해야 합니다. 그렇지 않으면 청사진 할당이 실패합니다.

리소스 정리

구독에서 청사진을 제거할 수 있습니다. 아티팩트 리소스가 더 이상 필요 없는 경우에 청사진을 제거하는 경우가 많습니다. 청사진을 제거해도 해당 청사진의 일부분으로 할당된 아티팩트는 남아 있습니다. 청사진 할당을 제거하려면 az blueprint assignment delete명령을 사용합니다:

az blueprint assignment delete --name 'assignMyBlueprint'

다음 단계

이 빠른 시작에서는 Azure CLI를 사용하여 청사진을 생성, 할당 및 제거했습니다. Azure Blueprints에 대해 자세히 알아보려면 청사진 수명 주기 문서를 참조하세요.