无法将我的凭据传递给AWS PHP SDK

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将我的凭据传递给AWS PHP SDK相关的知识,希望对你有一定的参考价值。

我安装了AWS php SDK并尝试使用SES。我的问题是,它(显然)试图阅读~/.aws/credentials无论我做什么。我目前有这个代码:

$S3_AK = getenv('S3_AK');
$S3_PK = getenv('S3_PK');
$profile = 'default';
$path = '/home/franco/public/site/default.ini';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = SesClient::factory(array(
      'profile' => 'default',
      'region' => 'us-east-1',
      'version' => "2010-12-01",
      'credentials' => [
        'key'    => $S3_AK,
        'secret' => $S3_PK,
      ]
  )); 

我仍然得到“无法读取来自〜/ .aws / credentials的凭据”错误(过了一段时间)。

我当然试过'凭证'=> $提供商,这是个主意,但由于它不起作用我恢复了硬编码凭证。我已经抛弃了$ S3_AK和$ S3_PK并且它们很好,我实际上正在为S3使用它们,但是我有Zend的包装器。我已经尝试了〜/ .aws / credentials(没有“.ini”)来获得相同的结果。这两个文件都拥有777权限。

奇怪的信息:我必须将内存限制设置为-1,这样就可以var_dump异常。异常的html大约是200mb。

我更喜欢使用环境变量,尽管凭证文件很好。我只是不明白为什么它似乎试图读取文件,即使我已经硬编码凭证。

编辑:所以一个朋友给我看了this,我删除了配置文件,并修改了try / catch并注意到客户端似乎是正确创建的,错误来自于尝试实际发送电子邮件。

答案

诀窍是从工厂参数中删除'profile' => 'default',如果定义了这个,我们就不能使用自定义凭证文件或环境变量。没有记录,但只是工作。

我正在使用Sns和Sdk v3。

<?php
use AwsCredentialsCredentialProvider;

$profile = 'sns-reminders';
$path = '../private/credentials';

$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);

$sdk = new AwsSdk(['credentials' => $provider]);

$sns = $sdk->createSns([
//        'profile' => $profile,
        'region'  => 'us-east-1',
        'version' => 'latest',
]);
另一答案

此解决方案可能仅在您使用SDK的第3版时才有效。我使用类似的东西:

$provider = CredentialsProvider::memoize(CredentialsProvider::ini($profile, $path));
$client = new SesClient([
    'version' => 'latest',
    'region'  => 'us-east-1',
    'credentials' => $provider]);

我将它用于S3ClientDynamoDbClient和其他一些客户端,所以我假设SesClient构造函数支持相同的参数。

另一答案

好的,我设法修复它。我无法读取凭证文件,但这不是我的想法。发生的事情是成功创建了实际的客户端,但try / catch也包含了sendEmail。这就是失败的原因。关于使用显式凭据创建客户端:如果指定region,it will try and read a credentials file

关于SendEmail,this is the syntax that worked for me,我在AWS docs网站上发现了另一个,但那个失败了。它一定是旧的SDK。

以上是关于无法将我的凭据传递给AWS PHP SDK的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给查询时,Php PDO 无法正常工作?

将凭据传递给 Sql Report Server 2008

将 NTLM 凭据传递给远程 Web 服务

使用 JDBC 将自己制作的 Windows 凭据传递给 SQL Server

如何将用户凭据传递给 Web 服务?

将SMTP凭据传递给PHPMailer配置,而不在heroku中公开它