【发布时间】:2018-06-12 12:56:59
【问题描述】:
需要明确的是,我们已经创建了 EC2 策略,因此我的站点可以直接访问参数存储、S3、Amazon SES 等服务。
到目前为止,我的所有凭证都存储在 AWS Parameter Store 中,然后站点正在使用这些凭证,即 DB 凭证,diff。 API 密钥等。因此,只有硬编码的凭据是从 Parameter Store 获取参数的凭据。现在客户也想删除那些硬编码的凭据,这就是我们创建 EC2 策略的原因。
到目前为止,我们有如下代码来获取参数:
$config = array(
'version' => 'latest',
'region' => '*****',
'credentials' => array(
'key' => '*******',
'secret' => '******',
)
);
$s3_instance = new \Aws\Ssm\SsmClient($config);
$result = $s3_instance->getParameters([
'Names' => $credential_group,
'WithDecryption' => true
]);
//converting S3 private data to array to read
$keys = $result->toArray();
var_dump($keys);
现在的问题是我必须在上面的代码中更改什么,所以它应该可以在不传递这些凭据的情况下工作。
注意:我正在使用 AWS PHP 库来执行上述操作。
更新
进一步阅读文档,https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
使用环境变量中的凭据
如果您在实例化客户端对象时未向其提供凭据,SDK 会尝试在您的环境中查找凭据。 SDK 检查凭据的第一个地方是您的环境变量。开发工具包使用 getenv() 函数来查找 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 AWS_SESSION_TOKEN 环境变量。这些凭据称为环境凭据。
所以在那之后,我尝试了以下方法:
var_dump(getenv('AWS_ACCESS_KEY_ID'));
但它返回 bool(false)。那么我需要在环境凭据中手动设置它们吗?
我需要在上面的代码中更改哪些内容?
更新
基于此文档:https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_configuration.html#credentials
我做了以下更改(从数组中删除了凭据部分):
$config = array(
'version' => 'latest',
'region' => '*****'
);
然后系统抛出以下警告:
警告:include(Test_Role_Cognitoaccess_from_instanceRole.php):打开流失败
警告:include():无法打开“Test_Role_Cognitoaccess_from_instanceRole.php”以包含(include_path='.:/usr/share/pear:/usr/share/php')
警告:include(Test_Role_Cognitoaccess_from_instanceRole.php):打开流失败
警告:include():无法打开“Test_Role_Cognitoaccess_from_instanceRole.php”以包含(include_path='.:/usr/share/pear:/usr/share/php')
【问题讨论】:
标签: php amazon-web-services amazon-ec2 aws-sdk