使用PHP SDK查询AWS DynamoDB出现UnrecognizedClientException报错如何解决
报错原因
你遇到的UnrecognizedClientException报错核心原因是AWS DynamoDB服务没有识别到你请求中携带的身份凭证,要么是没有配置凭证,要么是配置的凭证无效、不匹配。
解决方案
第一步:获取有效AWS身份凭证
- 登录AWS控制台,进入IAM服务页面,创建一个专门用于DynamoDB操作的IAM用户(不要使用AWS根账号生成密钥,避免安全风险)
- 给该IAM用户分配对应DynamoDB操作权限,测试阶段可以先授予
AmazonDynamoDBFullAccess权限,生产环境请按最小权限原则配置细粒度权限 - 为该IAM用户生成访问密钥对:
Access Key ID(访问密钥ID)和Secret Access Key(私有访问密钥),如果使用的是临时安全凭证,还需要额外获取Session Token
第二步:在PHP SDK中配置凭证
AWS PHP SDK支持多种凭证配置方式,任选其一即可:
- 方式1:客户端初始化时直接传入(仅测试用,禁止硬编码到提交的代码仓库/生产环境)
$client = new Aws\DynamoDb\DynamoDbClient([ 'version' => 'latest', 'region' => 'us-west-2', 'credentials' => [ 'key' => '替换为你的Access Key ID', 'secret' => '替换为你的Secret Access Key', // 如果用临时凭证需要额外加 'token' => '你的Session Token' ], 'endpoint' => 'https://dynamodb.us-west-2.amazonaws.com' ]);
- 方式2:使用本地凭证文件(本地开发推荐)
在运行PHP服务的系统用户根目录下创建.aws/credentials文件,写入以下内容:
[default] aws_access_key_id = 替换为你的Access Key ID aws_secret_access_key = 替换为你的Secret Access Key
配置完成后初始化DynamoDB客户端时不需要手动传credentials参数,SDK会自动读取该文件的配置。
- 方式3:使用环境变量(生产部署推荐)
在运行PHP的环境中配置两个系统环境变量:AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,赋值为对应的密钥内容,SDK会自动读取,不需要在代码中写任何密钥信息。
第三步:额外排查项
- 确认你IAM用户所属的AWS区域和代码中配置的
us-west-2区域一致 - 确认你使用的访问密钥没有被AWS控制台禁用、删除,临时凭证没有过期
- 不要在前端React代码中直接调用DynamoDB接口、更不要把AWS密钥写在前端代码中,所有DynamoDB操作必须通过你的PHP后端处理,避免密钥泄露导致的安全风险和额外费用
内容的提问来源于stack exchange,提问作者Croicco
相关产品推荐
相关产品推荐

