2017-02-23 3 views
0

Actuellement, j'ai deux abonnements: S01 et S02. J'ai un runbook fonctionnant dans S02 qui doit accéder aux ressources dans S01.Comment accéder à un abonnement différent à partir d'un runbook

Lorsque j'exécute la commande Get-AzureRmSubscription -SubscriptionName S01, il ne trouve même pas l'abonnement. Ci-dessous un exemple de code et de sortie:

$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 "===============================================================" 

Sortie:

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 


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

Je suppose que tout tourne autour de la AzureRunAsConnection et AzureRunAsCertificate et en utilisant le ServicePrincipal. Je suppose que je dois me connecter en utilisant AzureRunAsConnect de S01, ce qui signifie que je dois obtenir le certificat de S01 et S02, mais je n'ai pas beaucoup de chance d'exporter et d'importer le RunAsCertificate de S01, en S02.

J'ai essayé de créer ma propre application AD, mais je n'arrive pas à l'obtenir non plus.

Je suis sûr que cela doit être possible, mais comment? Suis-je proche et quelle est la bonne façon?

P.S. Les deux abonnements "partagent" la même Azure AD.

TIA

Répondre

1

Vous ne pouvez pas exporter une fois le certificat affecté à Service Principal. Donc, vous avez deux options:

  1. Créer un nouveau directeur de service avec un certificat et utiliser le même certificat pour les deux abonnements
  2. Si vous avez une copie du certificat de service principal existant puis l'utiliser pour authentifier votre deuxième Azure abonnement.

Quelle que soit l'approche que vous choisissez, vous devriez jeter un oeil ici pour description étape par étape de création du service principal de certificat, etc .: https://docs.microsoft.com/en-us/azure/automation/automation-sec-configure-azure-runas-account#update-an-automation-account-using-powershell

+0

Merci. Donc, je suis sur le bon chemin. Je suivais un peu cette page, mais je suis tombé sur un "AsymmetricX509Cert". Même si je courais le script sur Windows 10, il a la bonne version du module PKI. Si je me souviens bien, j'ai besoin d'installer quelque chose pour me donner le bon espace de noms. Je vais essayer encore une fois et faire un rapport. Merci. – woter324

+0

Essayez de commenter: # $ KeyCredential.Type = "AsymmetricX509Cert" # $ KeyCredential.Usage = "verify" Il a fonctionné pour moi. –