我经常使用 AWS 服务,当我连接到 Amazon 时,我的 PHP SDK 会自动从我的 ec2 实例检索凭证。
我现在有一个我想使用的库,它还需要在我实例化该类时包含我的 AWS key 和访问 key 。
如何通过 AWS PHP SDK 检索当前的访问 token 和 key ,这样我就不会将 key 硬编码到我的应用程序中?
最佳答案
您将 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 并提取它们。否则请遵循以下详细信息。
有关加载访问 key 后如何提取访问 key 的实际答案,请参阅底部。
以下示例将使用存储在 ~/.aws/credentials 中的凭据(通常由 AWS CLI 创建)从名为“project1”的配置文件创建 DynamoDB 客户端:
$client = new DynamoDbClient([
'profile' => 'project1',
'region' => 'us-west-2',
'version' => 'latest'
]);
但是,通常您会希望 SDK 自动定位您的凭据。 AWS 开发工具包将按以下顺序搜索您的凭证(并非包括所有情况):
- 环境变量(AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 等)
- 在 ~/.aws/credentials 的默认配置文件部分
- 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 有许多凭据提供程序,因此您可以准确控制凭据的来源。
其中一项是您提到了访问 token 。这意味着您正在使用 STS Assume Role 访问类型。 PHP SDK 也支持这一点。只需深入研究 STS 的文档:
将凭据加载到提供程序后,您可以使用类 Credentials 提取三个组件(AccessKeyId、AcessKeySecret、SecurityToken):
关于php - 从 PHP SDK 获取 AWS IAM 凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51524499/