我有一个Lightsail实例,运行一个简单的PHP门户,需要访问DynamoDB中的一些表。如果我尝试直接使用AWS:
$sdk = new Sdk([
'version' => 'latest',
'region' => 'ap-southeast-2'
]);
$db_client = $sdk->createDynamoDb()然后,当我进行查询时,会得到一个拒绝访问的错误:
AccessDeniedException (client): User: arn:aws:sts::xyz:assumed-role/AmazonLightsailInstanceRole/i-xyz is not authorized to perform: dynamodb:GetItem on resource: arn:aws:dynamodb:ap-southeast-2:xyz:table/tablename我使用DynamoDB权限创建了一个额外的IAM角色,但是没有将Lightsail列为可以将角色附加到的服务。我也无法在Lightsail控制台上看到任何附加IAM角色的位置。此外,我看到的所有文档都告诉我,您不能修改Lightsail内置的IAM角色。
我am能够做的是在我的Lightsail实例上设置AWS并添加我的安全密钥,然后我就可以在我的实例上从CLI访问DynamoDB。但是,我不知道如何让我的代码使用这些凭据(我已经看到您可以在SDK配置中添加凭据,但我显然不想在代码中使用我的凭据。但是,它应该在我的实例的环境变量中查找它们,它们肯定存在)。
Lightsail广告DynamoDB集成,所以我知道它应该能工作,但我一直在努力获取访问权限。有什么想法吗?
谢谢。
发布于 2021-09-04 08:40:18
最后,我设法让我的代码使用我的AWS凭据。我就是这样解决的。
ini类型强制它查找凭据文件:use Aws\Sdk;
use Aws\Credentials\CredentialProvider;
$provider = CredentialProvider::ini();
$sdk = new Sdk([
'version' => 'latest',
'region' => 'ap-southeast-2'
'credentials' => $provider
]);
$db_client = $sdk->createDynamoDb()~/.aws/credentials文件中。CredentialsException: Cannot read credentials from /.aws/credentials注意,它指定了.aws目录位于/中,而不是~/中。
.aws目录复制到/。确保使用chmod设置读取权限
希望这能帮助其他人使用亚马逊似乎在没有适当文档的情况下发布的这种被遗弃的服务。
https://stackoverflow.com/questions/69053091
复制相似问题