【发布时间】:2020-08-11 03:34:14
【问题描述】:
我已经设置了一个运行 PHP 的 EC2 实例。仅用于测试,实例位于公共子网中,其安全组允许所有流量流向0.0.0.0/0。路由表具有到 10.0.0.0/16(VPC 的 CIDR 块)的默认本地路由和到 0.0.0.0/0 的 Internet 网关的路由。与子网关联的 NACL 允许所有流量在 0.0.0.0/0 进出。我知道这很开放,但我想确保我遇到的问题与安全组和 NACL 无关。
我创建了一个 Secrets Manager 密钥 MySecret-xxxxx,并使用以下策略将 IAM 角色附加到实例以允许实例访问该密钥:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"secretsmanager:GetResourcePolicy",
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecretVersionIds"
],
"Resource": "arn:aws:secretsmanager:eu-west-2:xxxxxxxxx:secret:MySecret-xxxxx"
}
]
}
我已经在实例上的一个名为 sdks 的子文件夹中安装了适用于 PHP 的 AWS 开发工具包,最后创建了一个运行良好的“Hello World”index.php 文件,直到我尝试以简化的方式运行 getSecretValue AWS 提供的设置信息的版本。这是PHP代码:
<?php
require 'sdks/aws/aws-autoloader.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
$client = new SecretsManagerClient( [
'profile' => 'default',
'version' => 'latest',
'region' => 'eu-west-2'
] );
$secretName = 'MySecret-xxxxx';
echo '<h1>Hello World</h1>';
$result = $client->getSecretValue([
'SecretId' => $secretName,
]);
?>
只要我包含 $result = $client->getSecretValue([... 代码块,我就会收到一条 HTTP ERROR 500 错误消息,尽管没有它它工作得很好。我在 CLI 上运行 aws secretsmanager get-secret-value --secret-id MySecret-xxxxx --region eu-west-2 并正确返回了秘密详细信息。
【问题讨论】:
标签: php amazon-web-services amazon-ec2 amazon-iam aws-secrets-manager