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

无法从关联IAM角色的EC2实例发布到SNS,凭证读取失败

解决EC2实例向SNS发布消息的凭证读取错误

错误原因

  • 你在已关联IAM角色的EC2实例上,初始化StsClient时指定了'profile' => 'default',AWS SDK会尝试读取本地/home/webapp/.aws/credentials文件,但EC2实例通过实例元数据服务自动获取角色凭证,不需要该文件,这是报错的直接原因。
  • 现有代码逻辑冗余:EC2实例已关联具备SNS发布权限的IAM角色,无需额外调用STS AssumeRole获取其他角色凭证,直接使用实例角色权限即可。

修正方案1:直接使用EC2实例角色(推荐)

直接初始化SNS客户端,SDK会自动从EC2实例元数据获取凭证,无需手动配置:

<?php
require 'vendor/autoload.php';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

try {
    $snsClient = new SnsClient([
        'region'  => 'ap-southeast-1',
        'version' => 'latest'
    ]);

    // 示例:发布消息到指定SNS主题
    $topicArn = 'arn:aws:sns:ap-southeast-1:xxxxxxxx:your-target-topic';
    $publishResult = $snsClient->publish([
        'TopicArn' => $topicArn,
        'Message'  => '测试发布消息内容',
    ]);

    echo "消息发布成功,Message ID: " . $publishResult['MessageId'];
} catch (AwsException $e) {
    error_log("SNS发布失败:" . $e->getMessage());
}

修正方案2:若必须AssumeRole(实例角色无权限时)

如果确实需要切换到其他IAM角色,初始化StsClient时不要指定profile参数,让SDK自动使用实例角色凭证调用STS接口:

<?php
require 'vendor/autoload.php';

use Aws\Sts\StsClient;
use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

$roleToAssumeArn = 'arn:aws:iam::xxxxxxxx:role/MYSNSROLE';

try {
    $stsClient = new StsClient([
        'region'  => 'ap-southeast-1',
        'version' => 'latest'
    ]);

    $assumeResult = $stsClient->assumeRole([
        'RoleArn' => $roleToAssumeArn,
        'RoleSessionName' => 'session1'
    ]);

    $snsClient = new SnsClient([
        'region'      => 'ap-southeast-1',
        'version'     => 'latest',
        'credentials' =>  [
            'key'    => $assumeResult['Credentials']['AccessKeyId'],
            'secret' => $assumeResult['Credentials']['SecretAccessKey'],
            'token'  => $assumeResult['Credentials']['SessionToken']
        ]
    ]);

    // 执行SNS操作
    return $snsClient;
} catch (AwsException $e) {
    error_log($e->getMessage());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:30:55