我经常使用AWS服务,并让我的PHP SDK在与Amazon连接时自动从ec2实例中检索凭证。
我现在有一个要使用的库,在实例化该类时,还需要包含我的AWS秘密密钥和访问密钥。
如何通过AWS PHP SDK检索当前访问令牌和私钥,这样我就不会将密钥硬编码到应用程序中了?
答案 0 :(得分: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"
);
[END EDIT]
如果您使用凭据文件,最简单的答案是在文本编辑器中打开〜/ .aws / credentials并将其解压缩。否则,请遵循以下详细信息。
有关如何在加载访问密钥后提取访问密钥的实际答案,请参见底部。
以下示例将使用存储在〜/ .aws / credentials(通常由AWS CLI创建)中的凭证从名为'project1'的配置文件创建DynamoDB客户端:
$client = new DynamoDbClient([
'profile' => 'project1',
'region' => 'us-west-2',
'version' => 'latest'
]);
但是,通常您会希望SDK自动找到您的凭据。 AWS SDK将按照以下顺序搜索您的凭证(并非包括所有情况):
通常只需使用此示例,然后让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有许多凭据提供程序,因此您可以精确控制凭据的来源。
其中一项是您提到访问令牌。这意味着您正在使用STS假定角色访问类型。 PHP SDK也支持此功能。只需深入研究STS的文档即可:
将凭据加载到提供程序后,可以使用凭据类提取三个组件(AccessKeyId,AcessKeySecret和SecurityToken):