AWS DeviceFarm CLI调用ScheduleRun始终返回AccessDeniedException
解决AWS DeviceFarm ScheduleRun CLI/API权限拒绝问题
问题现象
使用IAM用户通过CLI或API调用ScheduleRun启动DeviceFarm运行时,持续收到如下错误:
An error occurred (AccessDeniedException) when calling the ScheduleRun operation: User: <user-arn> is not authorized to perform: devicefarm:ScheduleRun on resource: <upload-arn>
即便为用户附加了AdministratorAccess全权限策略(内容如下),问题仍未解决,但通过AWS控制台手动启动运行可正常执行。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
执行的CLI命令示例:
aws devicefarm schedule-run --region=us-west-2 --project-arn=<project-arn> --test='type=APPIUM_PYTHON,testPackageArn=<package-arn>,testSpecArn=<spec-arn>'
可能原因及解决步骤
1. 权限边界(Permission Boundary)限制
IAM用户的权限边界会覆盖附加的权限策略,即使有AdministratorAccess,如果权限边界禁止了devicefarm:ScheduleRun操作,仍会触发拒绝。
- 操作步骤:
- 进入IAM控制台,找到目标用户
- 切换到「权限边界」标签页,查看是否有附加的策略
- 若存在权限边界,检查策略中是否包含
devicefarm:ScheduleRun的允许规则;或直接移除权限边界进行测试
2. CLI凭证缓存或配置错误
CLI可能使用了旧的、非目标用户的凭证,导致权限验证失败。
- 操作步骤:
- 执行
aws configure list查看当前CLI使用的Access Key ID,确认是否与目标IAM用户的凭证一致 - 若不一致,执行
aws configure重新配置正确的凭证;或删除~/.aws/credentials和~/.aws/config中的旧缓存文件后重新配置
- 执行
3. AWS组织服务控制策略(SCP)限制
若账号属于AWS组织,组织层面的SCP可能禁止了DeviceFarm的相关操作。
- 操作步骤:
- 登录AWS组织控制台,检查应用到该账号的SCP规则
- 确保没有拒绝
devicefarm:*或devicefarm:ScheduleRun的语句
4. 临时会话策略限制(若使用角色凭证)
如果是通过aws sts assume-role获取临时凭证调用CLI,角色的会话策略可能限制了权限。
- 操作步骤:
- 检查角色的信任策略,确认目标用户有权限承担该角色
- 检查角色附加的会话策略,确保允许
devicefarm:ScheduleRun操作
5. 测试DeviceFarm专属权限策略
尝试给用户单独附加AWS DeviceFarm Full Access策略,验证是否能正常执行命令:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "devicefarm:*", "Resource": "*" } ] }
补充说明
AWS控制台操作正常,是因为控制台可能通过AWS管理控制台的服务角色间接执行操作,而CLI/API直接使用用户自身的权限,因此会触发更严格的权限检查。
内容的提问来源于stack exchange,提问作者Andrey Bobkov
相关产品推荐
相关产品推荐

