如何在本地及GitHub Actions中用托管身份访问Azure Blob存储(Selenium Java)
解决Selenium Java测试通过托管身份访问Azure Blob存储的两种场景方案
一、本地运行自动化测试时的访问方案
步骤1:配置本地Azure身份验证
- 安装Azure CLI后,运行
az login命令,使用拥有目标Blob存储访问权限的Azure账号完成登录 - 在Azure门户中,给当前登录的账号分配Storage Blob Data Reader(或更高权限,如需要上传则用Contributor)角色,作用范围可设置为目标存储账户或具体容器
步骤2:修改Java代码适配托管身份认证
替换原有的访问密钥认证逻辑,使用Azure Identity SDK的DefaultAzureCredential自动获取本地身份凭证:
import com.azure.storage.blob.BlobClient; import com.azure.storage.blob.BlobContainerClient; import com.azure.storage.blob.BlobServiceClient; import com.azure.storage.blob.BlobServiceClientBuilder; import com.azure.identity.DefaultAzureCredential; public class BlobDownloadUtil { public static void downloadBlob(String storageAccountEndpoint, String containerName, String blobName, String localSavePath) { // DefaultAzureCredential会自动读取Azure CLI的登录身份 BlobServiceClient blobServiceClient = new BlobServiceClientBuilder() .endpoint(storageAccountEndpoint) .credential(new DefaultAzureCredential()) .buildClient(); BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName); BlobClient blobClient = containerClient.getBlobClient(blobName); blobClient.downloadToFile(localSavePath); } }
步骤3:验证权限有效性
可通过Azure CLI检查当前账号的角色分配:
az role assignment list --assignee <你的Azure账号邮箱> --scope "/subscriptions/<订阅ID>/resourceGroups<资源组名>/providers/Microsoft.Storage/storageAccounts/<存储账户名>"
二、GitHub Actions流水线中的访问方案
步骤1:创建Azure服务主体并分配角色
使用Azure CLI创建专门用于GitHub Actions的服务主体,并赋予Blob访问权限:
az ad sp create-for-rbac --name "github-actions-blob-access" --role "Storage Blob Data Reader" --scopes "/subscriptions/<订阅ID>/resourceGroups<资源组名>/providers/Microsoft.Storage/storageAccounts/<存储账户名>"
执行后记录返回的appId、password、tenantId三个参数。
步骤2:配置GitHub仓库机密
在GitHub仓库的Settings > Secrets and variables > Actions页面,添加以下三个机密:
AZURE_CLIENT_ID:对应服务主体的appIdAZURE_CLIENT_SECRET:对应服务主体的passwordAZURE_TENANT_ID:对应服务主体的tenantId
步骤3:修改GitHub Actions工作流
在测试执行步骤前添加Azure登录逻辑,确保流水线环境能获取到托管身份凭证:
name: Selenium Blob Test Pipeline on: [push, pull_request] jobs: run-tests: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 配置Java环境 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Azure身份验证 uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - name: 执行Selenium测试 run: mvn test # 根据你的项目构建工具调整命令,如gradle test
步骤4:代码适配说明
无需修改Java测试代码,DefaultAzureCredential会自动识别GitHub Actions中设置的环境变量,自动获取服务主体身份完成认证。
内容的提问来源于stack exchange,提问作者purva coder
相关产品推荐
相关产品推荐

