You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Device Farm中安全传递第三方API凭证的最佳实践咨询

解决AWS Device Farm中Cucumber测试访问Secrets Manager的凭证问题

我来帮你搞定这个问题——我之前在Device Farm运行自动化测试时也碰到过一模一样的凭证加载失败情况,给你两个安全且符合AWS最佳实践的解决方案,完全不用明文存储敏感信息:

方案1:使用Device Farm内置的加密环境变量(快速上手)

Device Farm本身就支持存储加密的环境变量,这些变量会在测试运行时自动注入到测试环境中,不需要你在测试规范或代码里明文写任何敏感信息:

  • 步骤:

    1. 登录AWS控制台,进入Device Farm服务,打开你的测试项目
    2. 创建新的测试运行(或编辑现有定时任务)
    3. 在环境变量部分,点击「添加环境变量」,输入你的凭证键名(比如API_USERNAME、API_PASSWORD)和对应的值
    4. 勾选每个变量后面的「加密」选项,AWS会自动加密存储这些值
    5. 保存测试运行配置,之后定时任务或手动运行时,这些变量会作为环境变量存在测试容器里
  • 代码里读取方式:
    直接通过Java读取环境变量即可,比如:

    String username = System.getenv("API_USERNAME");
    String password = System.getenv("API_PASSWORD");
    

这个方案最适合快速解决问题,不需要修改IAM权限或SDK配置。

方案2:给Device Farm的服务角色附加Secrets Manager访问权限(更符合AWS权限模型)

如果你的团队已经在使用Secrets Manager统一管理所有敏感凭证,那更推荐这个方案——让Device Farm的测试环境自动获取临时IAM凭证来访问Secrets Manager,完全不需要手动传递任何密钥:

配置步骤:

  1. 打开IAM控制台,搜索并找到Device Farm默认使用的服务角色:AWSDeviceFarmServiceRole(如果你自定义了角色,就找对应的那个)
  2. 给这个角色添加一个内联政策,允许访问你需要的Secrets Manager资源:
    政策JSON示例(记得替换区域、账号ID和你的秘密ARN):
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "secretsmanager:GetSecretValue",
                "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:your-api-credentials-*"
            }
        ]
    }
    
  3. 保存政策后,回到你的测试代码——不需要修改任何凭证加载逻辑,AWS SDK会自动通过Device Farm测试容器的EC2元数据服务获取临时凭证,之前报错里的EC2ContainerCredentialsProvider就能正常工作了。

为什么之前失败?

之前的错误是因为默认的Device Farm服务角色没有Secrets Manager的访问权限,不是找不到元数据服务。给角色加权限后,SDK的默认凭证链会自动找到临时凭证,顺利读取秘密。

方案对比

  • 方案1:适合快速实现,管理少量凭证,不需要改动IAM权限
  • 方案2:适合统一管理多个AWS服务的凭证,符合最小权限原则,长期维护更规范

不管选哪个,都能避免明文存储敏感信息,完全符合你的需求。

内容的提问来源于stack exchange,提问作者simeona cruz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:02:31