首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Lightsail实例访问DynamoDB

无法从Lightsail实例访问DynamoDB
EN

Stack Overflow用户
提问于 2021-09-04 07:00:22
回答 1查看 425关注 0票数 0

我有一个Lightsail实例,运行一个简单的PHP门户,需要访问DynamoDB中的一些表。如果我尝试直接使用AWS:

代码语言:javascript
复制
$sdk = new Sdk([
    'version' => 'latest',
    'region' => 'ap-southeast-2'
]);

$db_client = $sdk->createDynamoDb()

然后,当我进行查询时,会得到一个拒绝访问的错误:

代码语言:javascript
复制
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集成,所以我知道它应该能工作,但我一直在努力获取访问权限。有什么想法吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-09-04 08:40:18

最后,我设法让我的代码使用我的AWS凭据。我就是这样解决的。

  1. 在代码中指定了一个CredentialProvider,这样它就可以尝试使用我的CLI凭据,而不是默认使用IAM角色(或者我认为这就是它所做的)。注意,ini类型强制它查找凭据文件:

代码语言:javascript
复制
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()

  1. 确保了我的凭据在~/.aws/credentials文件中。

代码语言:javascript
复制
CredentialsException: Cannot read credentials from /.aws/credentials

注意,它指定了.aws目录位于/中,而不是~/中。

  1. 将我的.aws目录复制到/。确保使用chmod

设置读取权限

  1. Success.

希望这能帮助其他人使用亚马逊似乎在没有适当文档的情况下发布的这种被遗弃的服务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69053091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档