2024-05-04 10:05:35 发布
网友
我有一个Python脚本,我想在azureresourcemanager上下文中运行azuredevops管道任务,以便能够访问Azure资源(比如azurecli或azurepowershell任务)。在
如何将存储在Azure DevOps中的Azure RM服务端点凭据作为ServicePrincipal/Secret或OAuth令牌传递到脚本中?在
这取决于您称之为python脚本,但无论哪种方式,azuredevops都没有对python sdk(或您的自定义python脚本)进行身份验证的本机支持,但是您可以将来自build\release变量的凭据传递给您的脚本,或者尝试从Azure Cli中提取该凭据(我认为它将数据存储在/home/.azure/下的某个地方)。在
/home/.azure/
基于上面4c74356b41给出的提示,并对Azure CLI进行了一些剖析,我创建了这个函数,它允许从登录到Azure DevOps-Azure CLI任务的服务原则上拉取OAuth令牌
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]
这取决于您称之为python脚本,但无论哪种方式,azuredevops都没有对python sdk(或您的自定义python脚本)进行身份验证的本机支持,但是您可以将来自build\release变量的凭据传递给您的脚本,或者尝试从Azure Cli中提取该凭据(我认为它将数据存储在
/home/.azure/
下的某个地方)。在基于上面4c74356b41给出的提示,并对Azure CLI进行了一些剖析,我创建了这个函数,它允许从登录到Azure DevOps-Azure CLI任务的服务原则上拉取OAuth令牌
相关问题 更多 >
编程相关推荐