Azure Stack Hub에 Azure CLI 설치

Azure CLI를 설치하여 Windows 또는 Linux 머신으로 Azure Stack Hub를 관리할 수 있습니다. 이 문서에서는 Azure CLI를 설치하고 설정하는 단계를 안내합니다.

Azure CLI 설치

  1. 개발 워크스테이션에 로그인하고 CLI를 설치합니다. Azure Stack Hub에는 Azure CLI 버전 2.0 이상이 필요합니다.

    중요

    2.40.0 이전의 Azure CLI 버전에 영향을 주는 CVE 로 인해 더 이상 Azure Stack Hub의 AD FS에 Azure CLI 2.29.2를 사용하지 않는 것이 좋습니다. Azure CLI 2.40.0 이상으로 업데이트할 수 있습니다. 그러나 AD FS 고객은 Microsoft Graph 엔드포인트와 상호 작용하는 Azure CLI 명령에 문제가 발생할 수 있습니다. 이는 Microsoft Graph가 AD FS에서 지원되지 않기 때문입니다. Microsoft Graph 문제에 대한 해결 방법은 일반 알려진 문제 섹션을 참조하세요.

  2. Azure CLI 설치 문서에 설명된 단계를 사용하여 CLI를 설치할 수 있습니다.

  3. 설치에 성공했는지 확인하려면 터미널 또는 명령 프롬프트 창을 열고 다음 명령을 실행합니다.

    az --version
    

    컴퓨터에 설치된 Azure CLI 및 기타 종속 라이브러리의 버전이 표시됩니다.

    Azure Stack Hub Python 위치의 Azure CLI

  4. CLI의 Python 위치를 기록해 둡니다.

인증서 추가

연결이 끊긴 통합 시스템 및 ASDK에 대한 Azure Stack Hub 인증서를 내보내고 가져옵니다. 연결된 통합 시스템의 경우 인증서가 공개적으로 서명되며 이 단계는 필요하지 않습니다. 지침은 Azure Stack 개발 키트에서 Azure CLI에 대한 인증서 설정을 참조하세요.

Azure CLI를 사용하여 연결

이 섹션에서는 ID 관리 서비스로 Microsoft Entra ID를 사용하고 Windows 컴퓨터에서 CLI를 사용하는 경우 CLI를 설정하는 방법에 대해 설명합니다.

Azure Stack Hub에 연결

  1. ASDK를 사용하는 경우 Azure Stack Hub CA 루트 인증서를 신뢰합니다. 자세한 내용은 인증서 신뢰를 참조하세요.

  2. 명령을 실행하여 Azure Stack Hub 환경을 등록합니다 az cloud register .

  3. 환경을 등록합니다. 를 실행할 az cloud register때 다음 매개 변수를 사용합니다.

    예제 Description
    환경 이름 AzureStackUser 사용자 환경에 사용합니다 AzureStackUser . 연산자인 경우 를 지정합니다 AzureStackAdmin.
    Resource Manager 엔드포인트 https://management.contoso.onmicrosoft.com ASDK의 ResourceManagerUrl 은 다음과 https://management.local.azurestack.external/ 같습니다. 통합 시스템의 ResourceManagerUrl 은 다음과 https://management.<region>.<fqdn>/ 같습니다. 통합 시스템 엔드포인트에 대한 질문이 있는 경우 클라우드 운영자에게 문의하세요.
    스토리지 엔드포인트 local.contoso.onmicrosoft.com local.azurestack.external 는 ASDK용입니다. 통합 시스템의 경우 시스템에 엔드포인트를 사용합니다.
    Keyvault 접미사 .vault.contoso.onmicrosoft.com .vault.local.azurestack.external 는 ASDK용입니다. 통합 시스템의 경우 시스템에 엔드포인트를 사용합니다.
    엔드포인트 Active Directory 그래프 리소스 ID https://graph.windows.net/ Active Directory 리소스 ID입니다.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Azure CLI 참조 설명서에서 register 명령에 대한 참조를 찾을 수 있습니다.

  4. 다음 명령을 사용하여 활성 환경을 설정합니다.

    az cloud set -n <environmentname>
    
  5. Azure Stack Hub 특정 API 버전 프로필을 사용하도록 환경 구성을 업데이트합니다. 구성을 업데이트하려면 다음 명령을 실행합니다.

    az cloud update --profile 2020-09-01-hybrid
    
  6. 명령을 사용하여 Azure Stack Hub 환경에 로그인합니다 az login .

    사용자 자격 증명을 사용하거나 클라우드 운영자가 제공한 SPN( 서비스 주체 )을 사용하여 Azure Stack Hub 환경에 로그인할 수 있습니다.

    • 사용자로 로그인:

      az login 명령 내에 직접 사용자 이름과 암호를 지정하거나 브라우저를 사용하여 인증할 수 있습니다. 계정에 다단계 인증이 사용하도록 설정된 경우 후자를 수행해야 합니다.

      az login -u "user@contoso.onmicrosoft.com" -p 'Password123!' --tenant contoso.onmicrosoft.com
      

      참고

      사용자 계정에 다단계 인증이 사용하도록 설정된 경우 매개 변수를 az login-u 제공하지 않고 명령을 사용합니다. 이 명령을 실행하면 인증하는 데 사용해야 하는 URL과 코드를 제공합니다.

    • 서비스 주체로 로그인:

      로그인하기 전에 Azure Portal 또는 CLI를 통해 서비스 주체를 만들고 역할을 할당합니다. 이제 다음 명령을 사용하여 로그인합니다.

      az login `
        --tenant <Azure Active Directory Tenant name. `
                  For example: myazurestack.onmicrosoft.com> `
      --service-principal `
        -u <Application Id of the Service Principal> `
        -p <Key generated for the Service Principal>
      
  7. 환경이 올바르게 설정되어 있고 환경이 활성 클라우드인지 확인합니다.

        az cloud list --output table
    

    환경이 나열되고 IsActive 가 인 것을 볼 수 있습니다 true. 예:

    IsActive    Name               Profile
    ----------  -----------------  -----------------
    False       AzureCloud         2020-09-01-hybrid
    False       AzureChinaCloud    latest
    False       AzureUSGovernment  latest
    False       AzureGermanCloud   latest
    True        AzureStackUser     2020-09-01-hybrid
    

연결 테스트

모든 항목이 설정되면 CLI를 사용하여 Azure Stack Hub 내에서 리소스를 만듭니다. 예를 들어 앱에 대한 리소스 그룹을 만들고 VM을 추가할 수 있습니다. 다음 명령을 사용하여 "MyResourceGroup"이라는 리소스 그룹을 만듭니다.

az group create -n MyResourceGroup -l local

리소스 그룹을 성공적으로 만든 경우 이전 명령은 새로 만든 리소스의 다음 속성을 출력합니다.

{
  "id": "/subscriptions/84edee99-XXXX-4f5c-b646-5cdab9759a03/resourceGroups/RGCL11",
  "location": "local",
  "name": "RGCLI1",
  " properties ": {
    "provisioningState": "Succeeded"
  },
  "tags ": null
}

일반적으로 알려진 문제점

대부분의 문제에 대한 일반적인 해결 방법은 현재 Azure Stack 컨텍스트를 사용하는 명령을 사용하여 az rest 관련 명령에 대한 REST API 호출을 문제와 함께 만드는 것입니다. 다음 문제 목록의 해결 방법은 일반적으로 이러한 문제가 Azure Stack Hub 리소스 공급자 또는 다른 Azure Stack Hub 서비스가 아닌 Azure CLI로 인해 발생하는 한 다른 Azure CLI 문제에 맞게 조정할 수 있습니다.

Microsoft Graph 문제

Azure Stack Hub의 경우 Azure CLI 2.40.0 이상에 대해 알려진 Microsoft Graph 문제입니다. 이는 주로 Microsoft Graph를 지원하지 않으므로 ADFS 환경에 영향을 줍니다.

  • az keyvault create 은 Microsoft Graph와 상호 작용합니다. 다음은 ADFS에 대한 해결 방법의 예입니다. 주로 해결 방법은 Azure AD Graph를 사용하여 Microsoft Graph가 아닌 과 같은 objectId 사용자 정보를 검색합니다.

    # First, sign into Azure CLI account you want to create the Key Vault from.
    # TODO: change the principal name to name of principal you want to create the key vault with.
    $principalNameLike = "CloudUser*"
    # TODO: change location to your preference.
    $location = "local"
    $aadGraph = az cloud show --query endpoints.activeDirectoryGraphResourceId --output tsv
    $tenantId = az account show --query tenantId --output tsv
    if ($aadGraph[-1] -ne '/')
    {
        $aadGraph += '/'
    }
    $userObject = az rest --method get --url "${aadGraph}${tenantId}/users?api-version=1.6" `
        | ConvertFrom-Json `
        | Select-Object -ExpandProperty value `
        | Where-Object {$_.userPrincipalName -like $principalNameLike}
    $body = '{
      "location": "' + $location + '",
      "properties": {
        "tenantId": "' + $tenantId + '",
        "sku": {
          "family": "A",
          "name": "standard"
        },
        "accessPolicies": [
          {
            "tenantId": "' + $tenantId + '",
            "objectId": "' + $userObject.objectId + '",
            "permissions": {
              "keys": [
                "get",
                "create",
                "delete",
                "list",
                "update",
                "import",
                "backup",
                "restore",
                "recover"
              ],
              "secrets": [
                "get",
                "list",
                "set",
                "delete",
                "backup",
                "restore",
                "recover"
              ],
              "certificates": [
                "get",
                "list",
                "delete",
                "create",
                "import",
                "update",
                "managecontacts",
                "getissuers",
                "listissuers",
                "setissuers",
                "deleteissuers",
                "manageissuers",
                "recover"
              ],
              "storage": [
                "get",
                "list",
                "delete",
                "set",
                "update",
                "regeneratekey",
                "setsas",
                "listsas",
                "getsas",
                "deletesas"
              ]
            }
          }
        ],
        "enabledForDeployment": true,
        "enabledForTemplateDeployment": true
      }
    }'
    $body | Out-File -FilePath (Join-Path -Path "." -ChildPath "body.json")
    $resourceGroupName = "testrg123"
    az group create -n $resourceGroupName -l $location
    $armEndpoint = az cloud show --query endpoints.resourceManager --output tsv
    if ($armEndpoint[-1] -ne '/')
    {
        $armEndpoint += '/'
    }
    $subscriptionId = az account show --query id --output tsv
    $keyVaultName = "testkv123"
    az rest --method put --url "${armEndpoint}subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.KeyVault/vaults/${keyVaultName}?api-version=2016-10-01" --body `@body.json
    # OPTIONAL: test access to the Key Vault.
    # az keyvault secret set --name MySecretName --vault-name $keyVaultName --value MySecret
    

    Key Vault REST API에 대한 자세한 내용은 Key Vault REST API 참조를 참조하세요.

기타 문제

다음은 특정 버전의 Azure CLI 버전 또는 범위에 국한되지 않는 문제입니다.

  • az role assignment create 은 이전 API 문제로 인해 Azure Stack Hub용 Azure CLI에서 현재 지원되지 않습니다. Microsoft Entra ID 또는 ADFS 모두에 대해 다음 해결 방법이 필요합니다.
    # First, sign into account with access to the resource that is being given access or a role to another user.
    # TODO: change the principal name to name of principal you want to assign the role to.
    $principalNameLike = "CloudUser*"
    # TODO: change role name to your preference.
    $roleName = "Owner"
    # TODO: change location to your preference.
    $location = "local"
    $aadGraph = az cloud show --query endpoints.activeDirectoryGraphResourceId --output tsv
    $tenantId = az account show --query tenantId --output tsv
    if ($aadGraph[-1] -ne '/')
    {
        $aadGraph += '/'
    }
    $userObject = az rest --method get --url "${aadGraph}${tenantId}/users?api-version=1.6" `
        | ConvertFrom-Json `
        | Select-Object -ExpandProperty value `
        | Where-Object {$_.userPrincipalName -like $principalNameLike}
    $roleDefinitionId = az role definition list --query "[?roleName=='${roleName}'].id" --output tsv
    $body = @{
        properties = @{
            roleDefinitionId = $roleDefinitionId
            principalId = $userObject.objectId
        }
    }
    $body | ConvertTo-Json | Out-File -FilePath (Join-Path -Path "." -ChildPath "body.json")
    $resourceGroupName = "testrg123"
    az group create -n $resourceGroupName -l $location
    $armEndpoint = az cloud show --query endpoints.resourceManager --output tsv
    if ($armEndpoint[-1] -ne '/')
    {
        $armEndpoint += '/'
    }
    $scope =  az group show --name $resourceGroupName --query id --output tsv
    $guid = (New-Guid).ToString()
    az rest --method put --url "${armEndpoint}${scope}/providers/Microsoft.Authorization/roleAssignments/${guid}?api-version=2015-07-01" --body `@body.json
    # OPTIONAL: test access to the resource group, or use the portal.
    # az login -u <assigned user name> -p <assigned user password> --tenant $tenantId
    # Test a resource creation command in the resource group:
    # az network dns zone create -g $resourceGroupName -n "www.mysite.com"
    
    역할 할당 REST API에 대한 자세한 내용은 역할 할당 문서를 참조하세요.

다음 단계