从PHP SDK获取AWS IAM凭据

问题描述 投票:0回答:1

我定期使用AWS服务,让我的PHP SDK在与Amazon连接时自动从ec2实例中检索凭据。

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

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

php amazon-web-services amazon-iam aws-php-sdk
1个回答
3
投票

您在哪里存储AWS凭证?在凭证文件或IAM角色?

[OP提供具体用例详情后的编辑]

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

// Require Composer's autoloader
require_once __DIR__ . "/vendor/autoload.php";

use Aws\Credentials\Credentials
use Aws\Credentials\CredentialProvider;
use Aws\Exception\CredentialsException;
use EddTurtle\DirectUpload\Signature;

// 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开发工具包将按以下顺序搜索您的凭据(并非所有情况都包括在内):

  1. 环境变量(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY等)
  2. 在〜/ .aws / credentials的默认配置文件部分中
  3. 现在EC2作用

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

use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

// 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 Class CredentialProvider

一个项目是你提到访问令牌。这意味着您正在使用STS Assume Role类型的访问权限。 PHP SDK也支持这一点。只需深入了解STS的文档:

PHP STS Client

将凭据加载到提供程序后,可以使用Credentials类提取三个组件(AccessKeyId,AcessKeySecret,SecurityToken):

PHP Class Credentials

© www.soinside.com 2019 - 2024. All rights reserved.