AWS Braket SDK/CLI调用量子设备报显式拒绝授权错误求解
Amazon Braket 显式拒绝访问问题解决方案
核心原因
IAM权限判定规则中,*显式拒绝(Explicit Deny)*优先级高于所有允许策略,即使你给用户绑定了AdministratorAccess全权限策略,只要存在任意一条规则对目标操作/资源配置了拒绝,就会触发你看到的报错,和你安装的SDK、CLI版本无关,是权限规则层面的拦截。
排查解决步骤
按以下优先级逐一排查:
- 检查组织服务控制策略(SCP)拦截
如果你的账号属于AWS Organizations企业组织下的成员账号,90%的概率是组织管理员配置的SCP默认拦截了Braket服务访问。很多企业会在根OU、业务OU层级挂载SCP,默认禁止未审批的公共服务访问,Braket作为较新的量子计算服务经常在默认拦截列表里。你需要联系组织管理员,检查对应账号挂载的SCP规则,移除针对braket:*操作的Deny配置,或者给你的IAM用户/角色加例外规则。 - 检查IAM用户的权限配置
进入IAM控制台打开hblab-rnd用户的权限详情页,逐一检查所有挂载的规则:- 除了你手动添加的三个Braket相关托管策略,还要检查是否存在自定义内联策略、其他托管策略里写了
"Effect": "Deny",且Action覆盖braket:GetDevice/braket:*、Resource匹配报错里的设备ARN - 重点检查权限边界(Permissions Boundary):如果给该用户配置了权限边界,边界规则里没有允许的Braket操作,哪怕用户本身有AdministratorAccess权限,也会被显式拒绝
- 除了你手动添加的三个Braket相关托管策略,还要检查是否存在自定义内联策略、其他托管策略里写了
- 确认服务开通状态与区域配置
- 首次使用Braket需要先登录AWS控制台进入Amazon Braket服务页,完成服务条款确认、开通服务,服务未手动开通时会直接返回显式拒绝错误
- 你执行命令和跑代码时没有显式指定区域,会默认读取
aws configure配置的默认区域,要确认该区域是Braket已上线的区域(支持的区域包括us-east-1、us-west-2、eu-west-2、ap-northeast-1等),如果默认区域配了未上线Braket的区域(比如中国区站点、部分新上线区域),也会报同类权限错误
- 检查资源级策略
同账号访问Braket资源时这步概率极低,如果前面三步都没找到问题,再检查账号下是否配置了Braket资源级策略,显式拒绝了你的用户访问对应设备。
验证方式
排查完成后先显式指定支持的区域跑CLI命令验证:aws braket get-device --device-arn arn:aws:braket:::device/qpu/ionq/ionQdevice --region us-east-1
命令能正常返回设备信息后,再运行调整后的Python代码(显式指定区域避免默认配置读错):
import boto3 from braket.aws import AwsDevice from braket.circuits import Circuit # 显式指定Braket可用区域 boto3.setup_default_session(region_name="us-east-1") device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1") bell = Circuit().h(0).cnot(0, 1) task = device.run(bell, shots=100) print(task.result().measurement_counts)
内容的提问来源于stack exchange,提问作者voxter
相关产品推荐
相关产品推荐

