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

PHP调用AWS account:ListRegions遇403权限拒绝问题排查

问题分析与解决方案

代码中的核心错误

  • RoleArn格式不正确:调用assumeRole时,RoleArn必须传入完整的ARN(例如arn:aws:iam::123456789012:role/myrole),仅填写myrole会导致STS无法定位到正确的IAM角色——即便你成功获取了临时凭证,实际使用的角色可能并非预期的带AdministratorAccess权限的角色。
  • AccountClient区域配置错误:AWS Account Management服务的ListRegions是全局操作,必须将客户端区域指定为us-east-1,使用eu-central-1会导致请求发送到无效端点,直接引发权限验证失败。

权限相关排查要点

  • 检查角色权限边界:即使角色关联了AdministratorAccess策略,若角色设置了权限边界,边界策略可能会禁止account:ListRegions操作,需确认边界策略是否包含该权限。
  • 排查组织SCP限制:如果账号属于AWS组织,组织级别的服务控制策略(SCP)优先级高于IAM权限,需确认SCP未阻止account:ListRegions操作。
  • 跨账号权限验证:若查询的目标账号(12345678)与角色所在账号不同,需要目标账号的资源策略允许你的角色执行该操作,同时角色策略需明确包含对目标账号的account:ListRegions权限。

修正后的代码示例

<?php 

$stsClient = new StsClient([
    'version'     => 'latest',
    'region'      => 'eu-central-1',
    'credentials' => [
        'key'    => 'xxx',
        'secret' => 'yyy',
    ],
]);

$random = rand(10000, 99999);

// 使用完整的角色ARN
$response = $stsClient->assumeRole([
    'RoleArn' => 'arn:aws:iam::角色所在账号ID:role/myrole',
    'RoleSessionName' => "session_$random",
]);

$credentials = new Credentials(
    $response['Credentials']['AccessKeyId'],
    $response['Credentials']['SecretAccessKey'],
    $response['Credentials']['SessionToken']
);

// AccountClient必须指定us-east-1区域
$client = new AccountClient([
    'version'     => 'latest',
    'region'      => 'us-east-1',
    'credentials' => $credentials
]);

$r = $client->ListRegions(["AccountId" => '12345678']);

return $r['Regions'];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:57:53