Как запустить сценарий Python в DevOps Azure с учетными данными Azure Resource Manager? - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть скрипт Python, который я хочу запустить в контексте диспетчера ресурсов Azure в рамках задачи конвейера Azure DevOps, чтобы иметь возможность доступа к ресурсам Azure (например, к задачам Azure CLI или Azure PowerShell).

Как получить учетные данные конечной точки службы Azure RM, хранящиеся в DevOps Azure, переданные - как ServicePrincipal / Secret или OAuth Token - в сценарий?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

на основе подсказки 4c74356b41 выше и с некоторым разбивкой Azure CLI Я создал эту функцию, которая позволяет перетаскивать токен OAuth через ADAL из службы Принц вошел в систему в DevOps Azure - Azure CLI задача

import os
import json
import adal

_SERVICE_PRINCIPAL_ID = 'servicePrincipalId'
_SERVICE_PRINCIPAL_TENANT = 'servicePrincipalTenant'
_TOKEN_ENTRY_TOKEN_TYPE = 'tokenType'
_ACCESS_TOKEN = 'accessToken'

def get_config_dir():
    return os.getenv('AZURE_CONFIG_DIR', None) or os.path.expanduser(os.path.join('~', '.azure'))

def getOAuthTokenFromCLI():
    token_file = (os.environ.get('AZURE_ACCESS_TOKEN_FILE', None)
              or os.path.join(get_config_dir(), 'accessTokens.json'))

    with open(token_file) as f:
        tokenEntry = json.load(f)[0] # just assume first entry

    tenantID = tokenEntry[_SERVICE_PRINCIPAL_TENANT]
    appId = tokenEntry[_SERVICE_PRINCIPAL_ID]
    appPassword = tokenEntry[_ACCESS_TOKEN]
    authURL = "https://login.windows.net/" + tenantID
    resource = "https://management.azure.com/"
    context = adal.AuthenticationContext(authURL, validate_authority=tenantID, api_version=None)
    token = context.acquire_token_with_client_credentials(resource,appId,appPassword)
    return token[_TOKEN_ENTRY_TOKEN_TYPE] + " " + token[_ACCESS_TOKEN]
0 голосов
/ 11 ноября 2018

Зависит от того, что вы называете скриптом Python, но в любом случае Azure DevOps не имеет встроенной поддержки для аутентификации Python SDK (или вашего собственного скрипта Python), но вы можете передавать учетные данные из переменных build \ release в ваш скрипт, или попытайтесь извлечь это из Azure Cli (я думаю, что он хранит данные где-то под /home/.azure/.

...