Как получить доступ к другой подписке из Runbook

В настоящее время у меня есть две подписки: S01 и S02. У меня есть runbook, работающий в S02, который нуждается в доступе к ресурсам в S01.

Когда я запускаю команду Get-AzureRmSubscription -SubscriptionName S01, он не может даже найти подписку. Ниже приведен пример кода и вывода:

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection = Get-AutomationConnection -Name $connectionName         

    Write-Output "Logging in to Azure..."
    $Account = Add-AzureRmAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint `
        -Verbose `
        -ErrorAction Stop

    Write-Output "***** LOGGED IN ($((Get-AzureRmContext).Subscription.SubscriptionName)). *******"
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } 
    else
    {
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

 Write-Output "Current subscription using Get-AzureRmSubscription:"
 Get-AzureRmSubscription
 Write-Output "==============================================================="

 Write-Output "Switch subscription using Select-AzureRmSubscription:"
 Get-AzureRmSubscription -SubscriptionName "S01" | Select-AzureRmSubscription
 Write-Output "==============================================================="

 Write-Output "Switch subscription using Set-AzureRmContext:"
 Set-AzureRmContext -SubscriptionName "S01"
 Write-Output "==============================================================="

Выход:

Logging in to Azure...

VERBOSE: Performing the operation "log in" on target "ServicePrincipal account in environment 'AzureCloud'".

***** LOGGED IN (S02). *******

Current subscription using Get-AzureRmSubscription:

WARNING: Unable to acquire token for tenant 'Common'

SubscriptionId            : 2f301a20-22a3-b321-2a3c-829ac3d4e39a
SubscriptionName          : S02
State                     : Enabled
TenantId                  : e2g374a3-8732-3466-9876-a7cd32b208de
CurrentStorageAccountName : 

===============================================================

Switch subscription using Select-AzureRmSubscription:

WARNING: Unable to acquire token for tenant 'Common'

ERROR: Get-AzureRmSubscription : Subscription S01 was not found in tenant . Please verify that the subscription 
exists in this tenant.
At line:37 char:2
+  Get-AzureRmSubscription -SubscriptionName "S01" | Sele ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzureRmSubscription], PSArgumentException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.GetAzureRMSubscriptionCommand


===============================================================

Switch subscription using Set-AzureRmContext:

ERROR: Set-AzureRmContext : Provided subscription S01 does not exist
At line:41 char:2
+  Set-AzureRmContext -SubscriptionName "S01"
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Set-AzureRmContext], ArgumentException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.SetAzureRMContextCommand


===============================================================

Я предполагаю, что все вращается вокруг AzureRunAsConnection и AzureRunAsCertificate и с использованием ServicePrincipal. Я предполагаю, что мне нужно войти в систему, используя AzureRunAsConnect S01, который, как я предполагаю, означает, что мне нужно получить сертификат из S01 и в S02, но мне не очень повезло, экспортируя и импортируя RunAsCertificate из S01 в ​​S02.

Я пытался создать свое собственное AD-приложение, но я не могу заставить его работать.

Я уверен, что это должно быть возможно, но как? Я близко и каков правильный путь?

PS Обе подписки "разделяют" один и тот же Azure AD.

ТИА

1 ответ

Вы не можете экспортировать один раз назначенный сертификат для Принципала. Итак, у вас есть два варианта:

  1. Создайте нового участника службы с сертификатом и используйте один и тот же сертификат для обеих подписок.
  2. Если у вас есть копия существующего сертификата участника службы, используйте ее для аутентификации во второй подписке Azure.

Независимо от того, какой подход вы выберете, вы должны посмотреть здесь пошаговое описание создания участника службы, сертификата и т. Д.: https://docs.microsoft.com/en-us/azure/automation/automation-sec-configure-azure-runas-account

Другие вопросы по тегам