Pembaruan otomatis layanan Mobilitas dalam replikasi Azure-ke-Azure

Azure Site Recovery menggunakan irama rilis bulanan untuk memperbaiki masalah apa pun dan meningkatkan fitur yang sudah ada atau menambahkan fitur baru. Untuk tetap mengikuti layanan ini, Anda harus merencanakan penerapan patch setiap bulan. Untuk mencegah overhead yang terkait dengan setiap pembaruan, Anda dapat mengizinkan Site Recovery untuk mengelola pembaruan komponen.

Seperti yang disebutkan dalam arsitektur pemulihan bencana Azure-ke-Azure, layanan Mobilitas dipasang pada semua komputer virtual Azure (VM) yang memiliki replikasi yang diaktifkan dari satu wilayah Azure ke wilayah Azure lainnya. Saat Anda menggunakan pembaruan otomatis, setiap rilis baru memperbarui ekstensi layanan Mobilitas.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Cara kerja pembaruan otomatis

Saat Anda menggunakan Site Recovery untuk mengelola pembaruan, ia menerapkan runbook global (digunakan oleh layanan Azure) melalui akun automasi, yang dibuat dalam langganan yang sama dengan kubah. Setiap kubah menggunakan satu akun automasi. Untuk setiap komputer virtual dalam kubah, runbook memeriksa pembaruan otomatis aktif. Jika versi ekstensi layanan Mobilitas yang lebih baru tersedia, pembaruan akan dipasang.

Jadwal runbook default terjadi setiap hari pada pukul 12:00 pagi di zona waktu geografi komputer virtual yang direplikasi. Anda juga dapat mengubah jadwal runbook melalui akun automasi.

Catatan

Memulai dengan Perbarui Rollup 35, Anda dapat memilih akun automasi yang ada untuk digunakan dalam pembaruan. Sebelum memperbarui Rollup 35, Site Recovery membuat akun automasi secara default. Anda hanya dapat memilih opsi ini saat mengaktifkan replikasi untuk komputer virtual. Ini tidak tersedia untuk komputer virtual yang sudah mengaktifkan replikasi. Pengaturan yang Anda pilih berlaku untuk semua komputer virtual Azure yang dilindungi di kubah yang sama.

Mengaktifkan pembaruan otomatis tidak perlu menghidupkan ulang komputer virtual Azure atau memengaruhi replikasi yang sedang berlangsung.

Penagihan lowongan kerja di akun automasi didasarkan pada jumlah menit runtime pekerjaan yang digunakan dalam sebulan. Eksekusi pekerjaan membutuhkan waktu beberapa detik hingga sekitar satu menit setiap hari dan ditutupi sebagai pelajaran gratis. Secara default, 500 menit disertakan sebagai unit gratis untuk akun automasi, seperti yang ditunjukkan pada tabel berikut:

Termasuk pelajaran gratis (setiap bulan) Harga
Runtime pekerjaan 500 menit ₹0.14/menit

Aktifkan pembaruan otomatis

Ada beberapa cara agar Site Recovery bisa mengelola pembaruan ekstensi:

Kelola sebagai bagian dari langkah pengaktifan replikasi

Saat Anda mengaktifkan replikasi untuk VM baik yang dimulai dari tampilan VM atau dari kubah layanan pemulihan, Anda dapat mengizinkan Site Recovery untuk mengelola pembaruan ekstensi Site Recovery atau mengelolanya secara manual.

Extension settings

Alihkan pengaturan pembaruan ekstensi di dalam kubah

  1. Dari kubah Layanan Pemulihan, buka Kelola>Infrastruktur Site Recovery.

  2. Di bawah Untuk Pengaturan Pembaruan Ekstensi >Azure Virtual Machines >Izinkan Site Recovery untuk mengelola, pilih Aktif.

    Untuk mengelola ekstensi secara manual, pilih Mati.

    Penting

    Saat Anda memilih Izinkan Site Recoveryuntuk mengelola, pengaturan diterapkan ke semua VM di kubah.

  3. Pilih Simpan.

Extension update settings

Catatan

Salah satu opsi memberitahu Anda tentang akun automasi yang digunakan untuk mengelola pembaruan. JIka Anda menggunakan fitur ini dalam kubah untuk pertama kalinya, akun automasi baru dibuat secara default. Secara bergantian, Anda dapat menyesuaikan pengaturan, dan memilih akun automasi yang ada. Setelah ditentukan, semua tindakan berikutnya yang mengaktifkan replikasi dalam kubah yang sama akan menggunakan akun automasi yang dipilih. Saat ini, menu drop-down hanya akan mendaftar aku automasi yang ada di Grup Sumber Daya yang sama dengan kubah.

Untuk akun otomatisasi kustom, gunakan skrip berikut:

Penting

Jalankan skrip berikut dalam konteks akun otomatisasi. Skrip ini memanfaatkan Identitas Terkelola yang Ditetapkan Sistem sebagai jenis autentikasinya.

param(
    [Parameter(Mandatory=$true)]
    [String] $VaultResourceId,
    [Parameter(Mandatory=$true)]
    [ValidateSet("Enabled",'Disabled')]
    [Alias("Enabled or Disabled")]
    [String] $AutoUpdateAction,
    [Parameter(Mandatory=$false)]
    [String] $AutomationAccountArmId
)
$SiteRecoveryRunbookName = "Modify-AutoUpdateForVaultForPatner"
$TaskId = [guid]::NewGuid().ToString()
$SubscriptionId = "00000000-0000-0000-0000-000000000000"
$AsrApiVersion = "2021-12-01"
$ArmEndPoint = "https://management.azure.com"
$AadAuthority = "https://login.windows.net/"
$AadAudience = "https://management.core.windows.net/"
$AzureEnvironment = "AzureCloud"
$Timeout = "160"
$AuthenticationType = "SystemAssignedIdentity"
function Throw-TerminatingErrorMessage
{
        Param
    (
        [Parameter(Mandatory=$true)]
        [String]
        $Message
        )
    throw ("Message: {0}, TaskId: {1}.") -f $Message, $TaskId
}
function Write-Tracing
{
        Param
    (
        [Parameter(Mandatory=$true)]
        [ValidateSet("Informational", "Warning", "ErrorLevel", "Succeeded", IgnoreCase = $true)]
                [String]
        $Level,
        [Parameter(Mandatory=$true)]
        [String]
        $Message,
            [Switch]
        $DisplayMessageToUser
        )
    Write-Output $Message
}
function Write-InformationTracing
{
        Param
    (
        [Parameter(Mandatory=$true)]
        [String]
        $Message
        )
    Write-Tracing -Message $Message -Level Informational -DisplayMessageToUser
}
function ValidateInput()
{
    try
    {
        if(!$VaultResourceId.StartsWith("/subscriptions", [System.StringComparison]::OrdinalIgnoreCase))
        {
            $ErrorMessage = "The vault resource id should start with /subscriptions."
            throw $ErrorMessage
        }
        $Tokens = $VaultResourceId.SubString(1).Split("/")
        if(!($Tokens.Count % 2 -eq 0))
        {
            $ErrorMessage = ("Odd Number of tokens: {0}." -f $Tokens.Count)
            throw $ErrorMessage
        }
        if(!($Tokens.Count/2 -eq 4))
        {
            $ErrorMessage = ("Invalid number of resource in vault ARM id expected:4, actual:{0}." -f ($Tokens.Count/2))
            throw $ErrorMessage
        }
        if($AutoUpdateAction -ieq "Enabled" -and [string]::IsNullOrEmpty($AutomationAccountArmId))
        {
            $ErrorMessage = ("The automation account ARM id should not be null or empty when AutoUpdateAction is enabled.")
            throw $ErrorMessage
        }
    }
    catch
    {
        $ErrorMessage = ("ValidateInput failed with [Exception: {0}]." -f $_.Exception)
        Write-Tracing -Level ErrorLevel -Message $ErrorMessage -DisplayMessageToUser
        Throw-TerminatingErrorMessage -Message $ErrorMessage
    }
}
function Initialize-SubscriptionId()
{
    try
    {
        $Tokens = $VaultResourceId.SubString(1).Split("/")
        $Count = 0
                $ArmResources = @{}
        while($Count -lt $Tokens.Count)
        {
            $ArmResources[$Tokens[$Count]] = $Tokens[$Count+1]
            $Count = $Count + 2
        }
                return $ArmResources["subscriptions"]
    }
    catch
    {
        Write-Tracing -Level ErrorLevel -Message ("Initialize-SubscriptionId: failed with [Exception: {0}]." -f $_.Exception) -DisplayMessageToUser
        throw
    }
}
function Invoke-InternalRestMethod($Uri, $Headers, [ref]$Result)
{
    $RetryCount = 0
    $MaxRetry = 3
    do
    {
        try
        {
            $ResultObject = Invoke-RestMethod -Uri $Uri -Headers $Headers
            ($Result.Value) += ($ResultObject)
            break
        }
        catch
        {
            Write-InformationTracing ("Retry Count: {0}, Exception: {1}." -f $RetryCount, $_.Exception)
            $RetryCount++
            if(!($RetryCount -le $MaxRetry))
            {
                throw
            }
            Start-Sleep -Milliseconds 2000
        }
    }while($true)
}
function Invoke-InternalWebRequest($Uri, $Headers, $Method, $Body, $ContentType, [ref]$Result)
{
    $RetryCount = 0
    $MaxRetry = 3
    do
    {
        try
        {
            $ResultObject = Invoke-WebRequest -Uri $UpdateUrl -Headers $Header -Method 'PATCH' `
                -Body $InputJson  -ContentType "application/json" -UseBasicParsing
            ($Result.Value) += ($ResultObject)
            break
        }
        catch
        {
            Write-InformationTracing ("Retry Count: {0}, Exception: {1}." -f $RetryCount, $_.Exception)
            $RetryCount++
            if(!($RetryCount -le $MaxRetry))
            {
                throw
            }
            Start-Sleep -Milliseconds 2000
        }
    }while($true)
}
function Get-Header([ref]$Header, $AadAudience){
    try
    {
        $Header.Value['Content-Type'] = 'application\json'
        Write-InformationTracing ("The Authentication Type is system Assigned Identity based.")
        $endpoint = $env:IDENTITY_ENDPOINT
        $endpoint  
        $Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" 
        $Headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER) 
        $Headers.Add("Metadata", "True")   
        $authenticationResult = Invoke-RestMethod -Method Get -Headers $Headers -Uri ($endpoint +'?resource=' +$AadAudience)
        $accessToken = $authenticationResult.access_token
        $Header.Value['Authorization'] = "Bearer " + $accessToken
        $Header.Value["x-ms-client-request-id"] = $TaskId + "/" + (New-Guid).ToString() + "-" + (Get-Date).ToString("u")
    }
    catch
    {
        $ErrorMessage = ("Get-BearerToken: failed with [Exception: {0}]." -f $_.Exception)
        Write-Tracing -Level ErrorLevel -Message $ErrorMessage -DisplayMessageToUser
        Throw-TerminatingErrorMessage -Message $ErrorMessage
    }
}
function Get-ProtectionContainerToBeModified([ref] $ContainerMappingList)
{
    try
    {
        Write-InformationTracing ("Get protection container mappings : {0}." -f $VaultResourceId)
        $ContainerMappingListUrl = $ArmEndPoint + $VaultResourceId + "/replicationProtectionContainerMappings" + "?api-version=" + $AsrApiVersion
        Write-InformationTracing ("Getting the bearer token and the header.")
        Get-Header ([ref]$Header) $AadAudience
        $Result = @()
        Invoke-InternalRestMethod -Uri $ContainerMappingListUrl -Headers $header -Result ([ref]$Result)
        $ContainerMappings = $Result[0]
        Write-InformationTracing ("Total retrieved container mappings: {0}." -f $ContainerMappings.Value.Count)
        foreach($Mapping in $ContainerMappings.Value)
        {
            if(($Mapping.properties.providerSpecificDetails -eq $null) -or ($Mapping.properties.providerSpecificDetails.instanceType -ine "A2A"))
            {
                Write-InformationTracing ("Mapping properties: {0}." -f ($Mapping.properties))
                Write-InformationTracing ("Ignoring container mapping: {0} as the provider does not match." -f ($Mapping.Id))
                continue;
            }
            if($Mapping.Properties.State -ine "Paired")
            {
                Write-InformationTracing ("Ignoring container mapping: {0} as the state is not paired." -f ($Mapping.Id))
                continue;
            }
            Write-InformationTracing ("Provider specific details {0}." -f ($Mapping.properties.providerSpecificDetails))
            $MappingAutoUpdateStatus = $Mapping.properties.providerSpecificDetails.agentAutoUpdateStatus
            $MappingAutomationAccountArmId = $Mapping.properties.providerSpecificDetails.automationAccountArmId
            $MappingHealthErrorCount = $Mapping.properties.HealthErrorDetails.Count
            if($AutoUpdateAction -ieq "Enabled" -and
                ($MappingAutoUpdateStatus -ieq "Enabled") -and
                ($MappingAutomationAccountArmId -ieq $AutomationAccountArmId) -and
                ($MappingHealthErrorCount -eq 0))
            {
                Write-InformationTracing ("Provider specific details {0}." -f ($Mapping.properties))
                Write-InformationTracing ("Ignoring container mapping: {0} as the auto update is already enabled and is healthy." -f ($Mapping.Id))
                continue;
            }
            ($ContainerMappingList.Value).Add($Mapping.id)
        }
    }
    catch
    {
        $ErrorMessage = ("Get-ProtectionContainerToBeModified: failed with [Exception: {0}]." -f $_.Exception)
        Write-Tracing -Level ErrorLevel -Message $ErrorMessage -DisplayMessageToUser
        Throw-TerminatingErrorMessage -Message $ErrorMessage
    }
}
$OperationStartTime = Get-Date
$ContainerMappingList = New-Object System.Collections.Generic.List[System.String]
$JobsInProgressList = @()
$JobsCompletedSuccessList = @()
$JobsCompletedFailedList = @()
$JobsFailedToStart = 0
$JobsTimedOut = 0
$Header = @{}
$AzureRMProfile = Get-Module -ListAvailable -Name AzureRM.Profile | Select Name, Version, Path
$AzureRmProfileModulePath = Split-Path -Parent $AzureRMProfile.Path
Add-Type -Path (Join-Path $AzureRmProfileModulePath "Microsoft.IdentityModel.Clients.ActiveDirectory.dll")
$Inputs = ("Tracing inputs VaultResourceId: {0}, Timeout: {1}, AutoUpdateAction: {2}, AutomationAccountArmId: {3}." -f $VaultResourceId, $Timeout, $AutoUpdateAction, $AutomationAccountArmId)
Write-Tracing -Message $Inputs -Level Informational -DisplayMessageToUser
$CloudConfig = ("Tracing cloud configuration ArmEndPoint: {0}, AadAuthority: {1}, AadAudience: {2}." -f $ArmEndPoint, $AadAuthority, $AadAudience)
Write-Tracing -Message $CloudConfig -Level Informational -DisplayMessageToUser
ValidateInput
$SubscriptionId = Initialize-SubscriptionId
Get-ProtectionContainerToBeModified ([ref]$ContainerMappingList)
$Input = @{
  "properties"= @{
    "providerSpecificInput"= @{
        "instanceType" = "A2A"
        "agentAutoUpdateStatus" = $AutoUpdateAction
        "automationAccountArmId" = $AutomationAccountArmId
        "automationAccountAuthenticationType" = $AuthenticationType
    }
  }
}
$InputJson = $Input |  ConvertTo-Json
if ($ContainerMappingList.Count -eq 0)
{
    Write-Tracing -Level Succeeded -Message ("Exiting as there are no container mappings to be modified.") -DisplayMessageToUser
    exit
}
Write-InformationTracing ("Container mappings to be updated has been retrieved with count: {0}." -f $ContainerMappingList.Count)
try
{
    Write-InformationTracing ("Start the modify container mapping jobs.")
    ForEach($Mapping in $ContainerMappingList)
    {
    try {
            $UpdateUrl = $ArmEndPoint + $Mapping + "?api-version=" + $AsrApiVersion
            Get-Header ([ref]$Header) $AadAudience
            $Result = @()
            Invoke-InternalWebRequest -Uri $UpdateUrl -Headers $Header -Method 'PATCH' `
                -Body $InputJson  -ContentType "application/json" -Result ([ref]$Result)
            $Result = $Result[0]
            $JobAsyncUrl = $Result.Headers['Azure-AsyncOperation']
            Write-InformationTracing ("The modify container mapping job invoked with async url: {0}." -f $JobAsyncUrl)
            $JobsInProgressList += $JobAsyncUrl;
            # Rate controlling the set calls to maximum 60 calls per minute.
            # ASR throttling for set calls is 200 in 1 minute.
            Start-Sleep -Milliseconds 1000
        }
        catch{
            Write-InformationTracing ("The modify container mappings job creation failed for: {0}." -f $Ru)
            Write-InformationTracing $_
            $JobsFailedToStart++
        }
    }
    Write-InformationTracing ("Total modify container mappings has been initiated: {0}." -f $JobsInProgressList.Count)
}
catch
{
    $ErrorMessage = ("Modify container mapping jobs failed with [Exception: {0}]." -f $_.Exception)
    Write-Tracing -Level ErrorLevel -Message $ErrorMessage -DisplayMessageToUser
    Throw-TerminatingErrorMessage -Message $ErrorMessage
}
try
{
    while($JobsInProgressList.Count -ne 0)
    {
        Sleep -Seconds 30
        $JobsInProgressListInternal = @()
        ForEach($JobAsyncUrl in $JobsInProgressList)
        {
            try
            {
                Get-Header ([ref]$Header) $AadAudience
                $Result = Invoke-RestMethod -Uri $JobAsyncUrl -Headers $header
                $JobState = $Result.Status
                if($JobState -ieq "InProgress")
                {
                    $JobsInProgressListInternal += $JobAsyncUrl
                }
                elseif($JobState -ieq "Succeeded" -or `
                    $JobState -ieq "PartiallySucceeded" -or `
                    $JobState -ieq "CompletedWithInformation")
                {
                    Write-InformationTracing ("Jobs succeeded with state: {0}." -f $JobState)
                    $JobsCompletedSuccessList += $JobAsyncUrl
                }
                else
                {
                    Write-InformationTracing ("Jobs failed with state: {0}." -f $JobState)
                    $JobsCompletedFailedList += $JobAsyncUrl
                }
            }
            catch
            {
                Write-InformationTracing ("The get job failed with: {0}. Ignoring the exception and retrying the next job." -f $_.Exception)
                # The job on which the tracking failed, will be considered in progress and tried again later.
                $JobsInProgressListInternal += $JobAsyncUrl
            }
            # Rate controlling the get calls to maximum 120 calls each minute.
            # ASR throttling for get calls is 10000 in 60 minutes.
            Start-Sleep -Milliseconds 500
        }
        Write-InformationTracing ("Jobs remaining {0}." -f $JobsInProgressListInternal.Count)
        $CurrentTime = Get-Date
        if($CurrentTime -gt $OperationStartTime.AddMinutes($Timeout))
        {
            Write-InformationTracing ("Tracing modify cloud pairing jobs has timed out.")
            $JobsTimedOut = $JobsInProgressListInternal.Count
            $JobsInProgressListInternal = @()
        }
        $JobsInProgressList = $JobsInProgressListInternal
    }
}
catch
{
    $ErrorMessage = ("Tracking modify cloud pairing jobs failed with [Exception: {0}]." -f $_.Exception)
    Write-Tracing -Level ErrorLevel -Message $ErrorMessage  -DisplayMessageToUser
    Throw-TerminatingErrorMessage -Message $ErrorMessage
}
Write-InformationTracing ("Tracking modify cloud pairing jobs completed.")
Write-InformationTracing ("Modify cloud pairing jobs success: {0}." -f $JobsCompletedSuccessList.Count)
Write-InformationTracing ("Modify cloud pairing jobs failed: {0}." -f $JobsCompletedFailedList.Count)
Write-InformationTracing ("Modify cloud pairing jobs failed to start: {0}." -f $JobsFailedToStart)
Write-InformationTracing ("Modify cloud pairing jobs timedout: {0}." -f $JobsTimedOut)
if($JobsTimedOut -gt  0)
{
    $ErrorMessage = "One or more modify cloud pairing jobs has timedout."
    Write-Tracing -Level ErrorLevel -Message ($ErrorMessage)
    Throw-TerminatingErrorMessage -Message $ErrorMessage
}
elseif($JobsCompletedSuccessList.Count -ne $ContainerMappingList.Count)
{
    $ErrorMessage = "One or more modify cloud pairing jobs failed."
    Write-Tracing -Level ErrorLevel -Message ($ErrorMessage)
    Throw-TerminatingErrorMessage -Message $ErrorMessage
}
Write-Tracing -Level Succeeded -Message ("Modify cloud pairing completed.") -DisplayMessageToUser

Kelola pembaruan secara manual

  1. Jika ada pembaruan baru untuk layanan Mobilitas yang dipasang pada komputer virtual Anda, Anda akan melihat pemberitahuan berikut: Pembaruan agen replikasi Site Recovery Baru tersedia. Klik untuk memasang.

    Replicated items window

  2. Pilih pemberitahuan untuk membuka halaman pilihan komputer virtual.

  3. Pilih VM yang ingin Anda perbarui, lalu pilih OK. Layanan Pembaruan layanan Mobilitas akan dimulai untuk setiap VM yang dipilih.

    Replicated items VM list

Masalah umum dan pemecahan masalah

Jika ada masalah dengan pembaruan otomatis, Anda akan melihat pemberitahuan kesalahan di bawah Masalah konfigurasi di dasbor kubah.

Jika Anda tidak dapat mengaktifkan pembaruan otomatis, lihat kesalahan umum berikut dan tindakan yang direkomendasikan:

  • Kesalahan: Anda tidak memiliki izin untuk membuat akun Azure Jalankan Sebagai (perwakilan layanan) dan memberikan peran Kontributor kepada perwakilan layanan.

    Tindakan yang direkomendasikan: Pastikan akun yang masuk terdaftar sebagai Kontributor dan coba lagi. Untuk informasi selengkapnya tentang menetapkan izin, lihat bagian izin yang diperlukan dari Cara: Menggunakan portal untuk membuat aplikasi Microsoft Entra dan perwakilan layanan yang dapat mengakses sumber daya.

    Untuk memperbaiki sebagian besar masalah setelah Anda mengaktifkan pembaruan otomatis, pilih Perbaiki. Jika tombol perbaikan tidak tersedia, lihat pesan kesalahan yang ditampilkan di panel pengaturan pembaruan ekstensi.

    Site Recovery service repair button in extension update settings

  • Kesalahan: Jalankan sebagai Akun tidak memiliki izin untuk mengakses sumber daya layanan pemulihan.

    Tindakan yang direkomendasikan: Hapus lalu buat ulang akun Jalankan Sebagai . Atau, pastikan bahwa aplikasi Microsoft Entra akun Automation Run As dapat mengakses sumber daya layanan pemulihan.

  • Kesalahan: Akun Jalankan Sebagai tidak ditemukan. Salah satu dari ini dihapus atau tidak dibuat - Aplikasi Microsoft Entra, Perwakilan Layanan, Peran, aset Sertifikat Automation, aset Automation Koneksi ion - atau Thumbprint tidak identik antara Sertifikat dan Koneksi ion.

    Tindakan yang direkomendasikan: Hapus lalu buat ulang akun Jalankan Sebagai .

  • Kesalahan: Sertifikat Azure Jalankan Sebagai yang digunakan oleh akun automasi akan segera kedaluwarsa.

    Sertifikat yang ditandatangani secara mandiri yang dibuat untuk akun Jalankan Sebagai kedaluwarsa satu tahun dari tanggal pembuatan. Anda dapat memperbaruinya kapan pun sebelum kedaluwarsa. Jika Anda telah mendaftar untuk notifikasi email, Anda juga akan menerima email saat tindakan diperlukan dari pihak Anda. Kesalahan ini akan ditampilkan dua bulan sebelum tanggal kedaluwarsa, dan akan berubah menjadi kesalahan kritis jika sertifikat telah kedaluwarsa. Setelah sertifikat kedaluwarsa, pembaruan otomatis tidak akan berfungsi sampai Anda memperbaruinya.

    Tindakan yang direkomendasikan: Untuk mengatasi masalah ini, pilih Perbaiki lalu Perbarui Sertifikat.

    renew-cert

    Catatan

    Setelah Anda memperbarui sertifikat, refresh halaman untuk menampilkan status saat ini.

Langkah berikutnya

Pelajari selengkapnya tentang cara memigrasikan jenis autentikasi akun Automation ke Identitas Terkelola.