Azure Resource Manager hizmet bağlantısı kullanarak Azure'a Bağlan

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Hizmet sorumlusu kimlik doğrulaması veya Azure yönetilen hizmet kimliği aracılığıyla Azure kaynaklarına bağlanmak için Bir Azure Resource Manager hizmet bağlantısı kullanabilirsiniz. Resource Manager hizmet bağlantısı kullanıyorsanız, her seferinde kimlik doğrulaması yapmadan Azure Uygulaması Hizmeti uygulaması gibi bir Azure kaynağına dağıtmak için işlem hattı kullanabilirsiniz.

Azure Resource Manager hizmet bağlantılarını kullanarak Azure'a bağlanmak için birden çok seçeneğiniz vardır:

  • İş yükü kimlik federasyonu ile hizmet sorumlusu veya yönetilen kimlik
  • Gizli dizili hizmet sorumlusu
  • Aracı tarafından atanan yönetilen kimlik

Diğer bağlantı türleri hakkında bilgi edinmek ve bağlantı oluşturma ve kullanma hakkında genel bilgi için bkz . Derlemeler ve sürümler için hizmet bağlantıları.

İş yükü kimlik federasyonu kullanan bir Azure Resource Manager hizmet bağlantısı oluşturma

İş yükü kimliği federasyonu, gizli dizi kullanmadan Microsoft Entra korumalı kaynaklarla kimlik doğrulaması yapmak için OpenID Bağlan (OIDC) kullanır.

Senaryonuz için aşağıdaki öğelerin tümü doğruysa bu yaklaşımı kullanmanızı öneririz:

  • Azure aboneliğiniz için Sahip rolüne sahipsiniz.
  • Azure Stack'e veya Azure Kamu Bulut'a bağlana değilsiniz.
  • Kullandığınız tüm Market uzantıları görevleri, iş yükü kimlik federasyonu desteği için güncelleştirilir.

Yeni iş yükü kimliği federasyon hizmeti bağlantısı oluşturma

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Daha fazla bilgi için bkz . Proje ayarlarını açma.

  2. Yeni hizmet bağlantısı'nı ve ardından Azure Resource Manager'ı seçin.

    İş yükü kimlik hizmeti bağlantı türünü seçmeyi gösteren ekran görüntüsü.

  3. İş yükü kimlik federasyonu (otomatik) seçeneğini belirleyin.

    İş yükü kimlik hizmeti bağlantı türünü seçmeyi gösteren ekran görüntüsü.

  4. Aşağıdaki parametreleri belirtin:

    Parametre Açıklama
    Abonelik Mevcut bir Azure aboneliğini seçin. Hiçbir Azure aboneliği veya örneği görünmüyorsa bkz . Azure Resource Manager hizmet bağlantılarında sorun giderme.
    Kaynak Grubu Kullanıcıların abonelik içinde tanımlanan tüm kaynaklara erişmesine izin vermek için boş bırakın. Kaynaklara kullanıcı erişimini kısıtlamak için bir kaynak grubu adı girin. Kullanıcılar daha sonra yalnızca bu kaynak grubu için tanımlanan kaynaklara erişebilir.
    Hizmet bağlantısı adı Gerekli. Görev özelliklerinde bu hizmet bağlantısına başvurmak için kullandığınız ad. Azure aboneliğinizin adı değil.
  5. Yeni hizmet bağlantısı oluşturulduktan sonra, bağlantı adını kopyalayın ve değerini kodunuza azureSubscriptionyapıştırın.

  6. Belirli bir Azure kaynağına dağıtmak için görevin bu kaynak hakkında daha fazla veriye ihtiyacı vardır. Azure portalında kaynağa gidin ve ardından verileri kodunuz içine kopyalayın. Örneğin, bir web uygulaması dağıtmak için Azure Uygulaması Service uygulamasının adını kopyalayın ve değerini kodunuza WebAppNameyapıştırın.

Mevcut bir Azure Resource Manager hizmet bağlantısını iş yükü kimlik federasyonu kullanmak için dönüştürme

Mevcut bir Azure Resource Manager hizmet bağlantısını, hizmet sorumlusu yerine kimlik doğrulaması için iş yükü kimlik federasyonu kullanacak şekilde hızla dönüştürebilirsiniz. Hizmet bağlantınız şu gereksinimleri karşılıyorsa Azure DevOps'ta hizmet bağlantısı dönüştürme aracını kullanabilirsiniz:

  • Azure DevOps başlangıçta hizmet bağlantısını oluşturmuştur. Hizmet bağlantınızı el ile oluşturursanız, Azure DevOps'un kendi kimlik bilgilerini değiştirme izinleri olmadığından hizmet bağlantısı dönüştürme aracını kullanarak hizmet bağlantısını dönüştüremezsiniz.
  • Hizmet bağlantısını yalnızca bir proje kullanır. Çapraz proje hizmeti bağlantılarını dönüştüremezsiniz.

Hizmet bağlantısını dönüştürmek için:

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Daha fazla bilgi için bkz . Proje ayarlarını açma.

  2. İş yükü kimliğini kullanmak için dönüştürmek istediğiniz hizmet bağlantısını seçin.

  3. Dönüştür'ü seçin.

    Federasyon kimlik bilgileri için dönüştürmeyi seçmeyi gösteren ekran görüntüsü.

    Süresi dolmuş bir gizli diziye sahip mevcut bir hizmet sorumlusu kimlik bilgileriniz varsa, dönüştürmek için farklı bir seçenek görürsünüz.

    Süresi dolmuş bir sertifikanız olduğunda federasyon kimlik bilgilerini kullanmak üzere dönüştürme seçeneğini gösteren ekran görüntüsü.

  4. Yeni bir hizmet bağlantısı oluşturmak istediğinizi onaylamak için Yeniden Dönüştür'ü seçin.

    Dönüştürme işlemi birkaç dakika sürebilir. Bağlantıyı geri almak istiyorsanız, yedi gün içinde bağlantıyı geri döndürmeniz gerekir.

Betik ile birden çok Azure Resource Manager hizmet bağlantısını dönüştürme

Şimdi kimlik doğrulaması için iş yükü kimlik federasyonu kullanmak üzere aynı anda birden çok hizmet bağlantısını güncelleştirmek için bir betik kullanın.

Bu örnek PowerShell betiği iki parametre gerektirir: Azure DevOps kuruluşu (örnek: https://dev.azure.com/fabrikam-tailspin) ve Azure DevOps projesi (örnek: Space game web agent). Betik daha sonra Azure DevOps projeniz ve kuruluşunuz için ilişkili hizmet bağlantılarını alır. İş yükü kimlik federasyonu kullanmayan ilişkili her hizmet bağlantısını dönüştürmek istediğinizi onaylamanız istenir. Onaylarsanız betik, her hizmet bağlantısını şimdi iş yükü kimlik federasyonu kullanacak şekilde güncelleştirmek için Azure DevOps REST API'sini kullanır. Betiğin çalışması için PowerShell 7.3 veya üzeri ve Azure CLI gerekir. Betiği bir .ps1 dosyasına kaydedin ve PowerShell 7 kullanarak çalıştırın.

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 

#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798" # application id of Azure DevOps 
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint

    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Hizmet sorumlusu gizli dizisi kullanan mevcut bir Azure Resource Manager Hizmeti bağlantısını geri alma

Dönüştürülen otomatik hizmet bağlantısını yedi gün boyunca gizli dizisiyle geri döndürebilirsiniz. Yedi gün sonra el ile yeni bir gizli dizi oluşturun.

Hizmet bağlantınızı el ile oluşturur ve dönüştürürseniz, Azure DevOps'un kendi kimlik bilgilerini değiştirme izinleri olmadığından hizmet bağlantısı dönüştürme aracını kullanarak hizmet bağlantısını geri döndüremezsiniz.

Hizmet bağlantısını geri döndürmek için:

  1. Azure DevOps projesinde Pipelines>Service bağlantıları'na gidin.

  2. Geri dönmek için mevcut bir hizmet bağlantısını seçin.

  3. Dönüştürmeyi özgün düzene geri döndür'e tıklayın.

    Federasyon kimlik bilgileri için geri döndürme seçeneğini gösteren ekran görüntüsü.

  4. Seçiminizi onaylamak için Yeniden Döndür'e tıklayın.

Hizmet sorumlusu gizli dizisi kullanan bir Azure Resource Manager hizmet bağlantısı oluşturma

Senaryonuz için aşağıdaki öğelerin tümü doğruysa bu yaklaşımı kullanmanızı öneririz:

  • Azure Pipelines kuruluşunun ve Azure aboneliğinin sahibi olarak oturum açtınız.
  • Kullanıcıların hizmet bağlantısı üzerinden erişebilecekleri Azure kaynakları için izinleri daha fazla sınırlamanız gerekmez.
  • Azure Stack'e veya Azure Kamu Bulut'a bağlana değilsiniz.
  • Azure DevOps Server 2019 veya Team Foundation Server'ın önceki sürümlerinden bağlanmıyorsunuz.

Hizmet bağlantısını oluşturmak için:

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Team Foundation Server'da üst menü çubuğundaki Ayarlar simgesini seçerek Hizmetler sayfasına gidin.

    Daha fazla bilgi için bkz . Proje ayarlarını açma.

  2. Yeni hizmet bağlantısı'nı ve ardından Azure Resource Manager'ı seçin.

    Hizmet bağlantı türü seçmeyi gösteren ekran görüntüsü.

  3. Aşağıdaki parametreleri girin veya seçin:

    Parametre Açıklama
    Bağlantı Adı Gerekli. Görev özelliklerinde bu hizmet bağlantısına başvurmak için kullandığınız ad. Azure aboneliğinizin adı değil.
    Kapsam düzeyi Abonelik veya Yönetim Grubu'nun seçin. Yönetim grupları , birden çok abonelikte erişimi, ilkeyi ve uyumluluğu yönetmenize yardımcı olan kapsayıcılardır.
    Abonelik Kapsam için Abonelik'i seçerseniz mevcut bir Azure aboneliğini seçin. Hiçbir Azure aboneliği veya örneği görünmüyorsa bkz . Azure Resource Manager hizmet bağlantılarında sorun giderme.
    Yönetim Grubu Kapsam için Yönetim Grubu'na seçerseniz mevcut bir Azure yönetim grubunu seçin. Daha fazla bilgi için bkz . Yönetim grupları oluşturma.
    Kaynak Grubu Kullanıcıların abonelik içinde tanımlanan tüm kaynaklara erişmesine izin vermek için boş bırakın. Kaynaklara kullanıcı erişimini kısıtlamak için bir kaynak grubu adı girin. Kullanıcılar daha sonra yalnızca bu kaynak grubu için tanımlanan kaynaklara erişebilir.
  4. Yeni hizmet bağlantısı oluşturulduktan sonra:

    • Klasik düzenleyiciyi kullanıyorsanız işlem hattınızın Azure aboneliği ayarında atadığınız bağlantı adını seçin.
    • YAML dosyası kullanıyorsanız bağlantı adını kodunuz için azureSubscriptiondeğeri olarak kopyalayın.
  5. Belirli bir Azure kaynağına dağıtmak için göreve kaynak hakkında daha fazla bilgi ekleyin:

    • Klasik düzenleyiciyi kullanıyorsanız, göreve eklenecek verileri seçin. Örneğin App Service adını seçin.
    • YAML dosyası kullanıyorsanız Azure portalında kaynağa gidin. İhtiyacınız olan verileri kopyalayın ve görev kodunuz içine yapıştırın. Örneğin, bir web uygulamasını dağıtmak için App Service uygulamasının adını kopyalayın ve YAML görevine değeri WebAppName olarak yapıştırın.

Not

Bu yaklaşımı uyguladığınızda Azure DevOps , Microsoft Entra Id ile bağlanır ve üç ay boyunca geçerli olan bir gizli dizi içeren bir uygulama kaydı oluşturur. Hizmet bağlantısının süresi dolmak üzereyken, Microsoft Entra Id şu istemi görüntüler: Sertifika veya gizli dizi yakında sona eriyor. Yeni bir tane oluşturun. Bu senaryoda, hizmet bağlantısını yenilemeniz gerekir.

Hizmet bağlantısını yenilemek için Azure DevOps portalında bağlantıyı düzenleyin ve ardından Doğrula'yı seçin. Düzenlemeyi kaydettikten sonra hizmet bağlantısı üç ay daha geçerli olur.

Gizli dizi oluşturmak yerine iş yükü kimlik federasyonu kullanmanızı öneririz. İş yükü kimlik federasyonu kullanıyorsanız gizli dizileri döndürmeniz gerekmez ve uygulama kaydı amaçlanan amacını korur. İş yükü kimliği federasyonu kullanmaya başlamak için hizmet bağlantısı ayrıntıları sayfasına gidin ve Dönüştür'ü seçin. Hizmet bağlantısı gizli dizi yerine iş yükü kimlik federasyonu kullanacak şekilde dönüştürülür. Daha fazla bilgi için bkz . Var olan bir Azure Resource Manager hizmet bağlantısını iş yükü kimlik federasyonu kullanacak şekilde dönüştürme.

Daha fazla bilgi için bkz . Azure Resource Manager hizmet bağlantısı sorunlarını giderme.

Bu yaklaşımı kullanırken sorun yaşıyorsanız (açılan listede abonelik gösterilmemesi gibi) veya kullanıcı izinlerini daha fazla sınırlamak istiyorsanız, bunun yerine bir hizmet sorumlusu veya yönetilen hizmet kimliğine sahip bir sanal makine kullanabilirsiniz.

Mevcut hizmet sorumlusunu kullanan bir Azure Resource Manager hizmet bağlantısı oluşturma

  1. Önceden tanımlanmış bir erişim izinleri kümesi kullanmak istiyorsanız ve bu amaçla tanımlanmış bir hizmet sorumlunuz yoksa, yeni bir hizmet sorumlusu oluşturmak için şu öğreticilerden birini izleyin:

  2. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Team Foundation Server'da üst menü çubuğundaki Ayarlar simgesini seçerek Hizmetler sayfasına gidin.

    Daha fazla bilgi için bkz . Proje ayarlarını açma.

  3. Yeni hizmet bağlantısı'nı ve ardından Azure Resource Manager'ı seçin.

    Hizmet bağlantı türü seçmeyi gösteren ekran görüntüsü.

  4. Hizmet Sorumlusu (el ile) seçeneğini belirleyin ve hizmet sorumlusu ayrıntılarını girin.

    Hizmet iletişim kutusunun tam sürümünü açmayı gösteren ekran görüntüsü.

  5. Bağlan ion adı için, bu hizmet bağlantısına başvurmak için kullanılacak bir görünen ad girin.

  6. Ortam için ortam adını (Azure Bulut, Azure Stack veya Azure Kamu Bulut) seçin.

  7. Azure Bulut'ı seçmezseniz ortam URL'sini girin. Azure Stack için ortam URL'si gibi https://management.local.azurestack.externalbir şeydir.

  8. Kapsam düzeyi için bağlantının kapsamını seçin:

  9. Azure aboneliği iletişim kutusunda hizmet sorumlunuz hakkında aşağıdaki bilgileri girin:

    • Abonelik Kimliği
    • Abonelik adı
    • Hizmet sorumlusu kimliği
    • Hizmet sorumlusu istemci anahtarı veya Sertifika'yı seçtiyseniz* .pem dosyasının hem sertifikanın hem de özel anahtar bölümlerinin içeriğini girin.
    • Kiracı kimliği

    Azure PowerShell betiğini indirip çalıştırarak bu bilgileri alabilirsiniz. İstendiğinde abonelik adınızı, parolanızı, rolünüzü (isteğe bağlı) ve Azure Bulutu (varsayılan), Azure Stack veya Azure Kamu Bulutu gibi bulut türünü girin.

  10. Girdiğiniz ayarları doğrulamak için Bağlantıyı doğrula'yı seçin.

  11. Yeni hizmet bağlantısı oluşturulduktan sonra:

    • Kullanıcı arabiriminde hizmet bağlantısını kullanıyorsanız işlem hattınızın Azure aboneliği ayarında atadığınız bağlantı adını seçin.
    • Hizmet bağlantısını bir YAML dosyasında kullanıyorsanız, bağlantı adını kopyalayın ve değerini kodunuza azureSubscriptionyapıştırın.
  12. Gerekirse, uygun izinleri kullanıma açmak için hizmet sorumlusunu değiştirin.

    Hizmet sorumlusu kullanarak kimlik doğrulaması yapma hakkında daha fazla bilgi için bkz. Azure abonelik kaynaklarınıza erişimi yönetmek için rol tabanlı erişim denetimini kullanma veya Visual Studio'da hizmet sorumlusu kullanarak Azure kaynak grubu dağıtımını otomatikleştirme blog gönderisi.

Daha fazla bilgi için bkz . Azure Resource Manager hizmet bağlantılarında sorun giderme.

Yönetilen hizmet kimliği kullanan bir VM'ye Azure Resource Manager hizmet bağlantısı oluşturma

Not

Kimlik doğrulaması için yönetilen hizmet kimliği kullanmak için Azure sanal makinesinde (VM) şirket içinde barındırılan bir aracı kullanmanız gerekir.

Azure VM tabanlı aracıları, Microsoft Entra Id'de Azure Yönetilen Hizmet Kimliği kullanacak şekilde yapılandırabilirsiniz. Bu senaryoda, Azure VM tabanlı aracılara bağlantı için Azure DevOps'ta kimlik bilgilerini kalıcı hale getirmek yerine Azure Key Vault örneği gibi Microsoft Entra Kimliğini destekleyen herhangi bir Azure kaynağına erişim vermek için sistem tarafından atanan kimliği (hizmet sorumlusu) kullanırsınız.

  1. Azure DevOps projesinde Proje ayarları>Hizmet bağlantıları'na gidin.

    Team Foundation Server'da üst menü çubuğundaki Ayarlar simgesini seçerek Hizmetler sayfasına gidin.

    Daha fazla bilgi için bkz . Proje ayarlarını açma.

  2. Yeni hizmet bağlantısı'nı ve ardından Azure Resource Manager'ı seçin.

    Hizmet bağlantı türü seçmeyi gösteren ekran görüntüsü.

  3. Yönetilen Kimlik Doğrulaması seçeneğini belirleyin.

    Yönetilen hizmet kimliği ayarlarına gidildiğini gösteren ekran görüntüsü.

  4. Bağlan ion adı için, bu hizmet bağlantısına başvururken kullanılacak bir görünen ad girin.

  5. Ortam için ortam adını (Azure Bulut, Azure Stack veya Azure Kamu Bulut) seçin.

  6. Bağlantılar iletişim kutusunda aboneliğinizden aşağıdaki değerleri girin:

    • Abonelik Kimliği
    • Abonelik adı
    • Kiracı kimliği
  7. Yeni hizmet bağlantısı oluşturulduktan sonra:

    • Kullanıcı arabiriminde hizmet bağlantısını kullanıyorsanız işlem hattınızın Azure aboneliği ayarında atadığınız bağlantı adını seçin.
    • Hizmet bağlantısını bir YAML dosyasında kullanıyorsanız, bağlantı adını değeri olarak kodunuz içine azureSubscriptionkopyalayın.
  8. VM'nin (aracı) uygun izinlere sahip olduğundan emin olun.

    Örneğin, kodunuzun Azure Resource Manager'ı çağırması gerekiyorsa, Microsoft Entra Id'de rol tabanlı erişim denetimi (RBAC) kullanarak VM'ye uygun rolü atayın.

    Daha fazla bilgi için bkz . Azure kaynakları için yönetilen kimlikleri nasıl kullanabilirim? ve Azure abonelik kaynaklarınıza erişimi yönetmek için rol tabanlı erişim denetimini kullanma.

İşlem hakkında daha fazla bilgi için bkz . Azure Resource Manager hizmet bağlantılarında sorun giderme.

Azure Kamu Buluta Bağlan

Azure Kamu Bulut'a bağlanma hakkında bilgi için bkz. Azure Pipelines'dan (Azure Kamu Bulut) Bağlan.

Azure Stack’e bağlanma

Azure Stack'e bağlanma hakkında bilgi için şu makalelere bakın:

Yardım ve destek