从 PHP SDK 获取 AWS IAM 凭证

Get AWS IAM credentials from PHP SDK

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

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

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

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

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

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

// 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 并提取它们。否则请遵循以下详细信息。

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

以下示例将使用存储在 ~/.aws/credentials 中的凭据(通常由 AWS CLI 创建)从名为 'project1':

的配置文件创建 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. 的默认配置文件部分
  4. EC2 IAM 角色

通常只使用此示例,让 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

将凭据加载到提供商后,您可以使用 class 凭据提取三个组件(AccessKeyId、AcessKeySecret、SecurityToken):

PHP Class Credentials