从PHP SDK获取AWS IAM凭据



我经常使用AWS服务,当我连接到亚马逊时,我的PHP SDK会自动从我的ec2实例中检索凭据。

我现在有了一个我想使用的库,它还要求在实例化类时包含我的AWS密钥和访问密钥。

我如何通过AWS PHP SDK检索当前的访问令牌和密钥,这样我就不会将密钥硬编码到我的应用程序中?

您将AWS凭据存储在哪里?在凭据文件或IAM角色中?

[在OP提供特定用例详细信息后编辑]

从您提供的链接中,将示例修改为如下所示。注意:我还没有测试代码,但这将是关闭:

// Require Composer's autoloader
require_once __DIR__ . "/vendor/autoload.php";
use AwsCredentialsCredentials
use AwsCredentialsCredentialProvider;
use AwsExceptionCredentialsException;
use EddTurtleDirectUploadSignature;
// Use the default credential provider
$provider = CredentialProvider::defaultProvider();
$credentials = $provider()->wait();
$upload = new Signature(
$credentials->getAccessKeyId(),
$credentials->getSecretKey(),
"YOUR_S3_BUCKET",
"eu-west-1"
);

[结束编辑]

如果使用凭据文件,最简单的答案是在文本编辑器中打开~/.aws/credentials并提取它们。否则,请遵循以下详细信息。

请参阅底部,了解加载访问密钥后如何提取访问密钥的实际答案。

以下示例将使用名为"project1"的配置文件中~/.aws/credentials(通常由aws CLI创建(中存储的凭据创建DynamoDB客户端:

$client = new DynamoDbClient([
'profile' => 'project1',
'region'  => 'us-west-2',
'version' => 'latest'
]);

但是,通常您会希望SDK自动定位您的凭据。AWS SDK将按以下顺序搜索您的凭据(不包括所有情况(:

  1. 环境变量(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY等(
  2. 在~/.aws/credentials的默认配置文件部分
  3. EC2 IAM角色

通常只使用此示例,并让SDK为您找到凭据:

use AwsCredentialsCredentialProvider;
use AwsS3S3Client;
// Use the default credential provider
$provider = CredentialProvider::defaultProvider();
// Pass the provider to the client
$client = new S3Client([
'region'      => 'us-west-2',
'version'     => '2006-03-01',
'credentials' => $provider
]);

SDK有许多凭据提供程序,因此您可以准确控制凭据的来源。

PHP类CredentialProvider

其中一项是您提到Access Token。这意味着您正在使用STS"假定角色"类型的访问。PHP SDK也支持这一点。只需深入了解STS的文档:

PHP STS客户端

一旦您将凭据加载到提供者中,就可以使用credentials类提取三个组件(AccessKeyId、AcessKeySecret、SecurityToken(:

PHP类凭据

最新更新