我想以编程方式列出我的RDS数据库实例和群集快照,因此我将以下IAM策略直接附加到我的一个用户:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadProdSnapshotsAndInstances",
"Effect": "Allow",
"Action": [
"rds:DescribeDBInstances",
"rds:DescribeDBClusterSnapshots"
],
"Resource": "*"
}
]
}
但当我以该用户身份执行以下操作时(使用AWS Node.js SDK)...
rds.describeDBInstances({}, (error, data) => {
...
});
...我收到以下错误:
AccessDenied: User: arn:aws:iam::<accountId>:user/<userName> is not authorized to perform: rds:DescribeDBInstances
知道我做错了什么吗?这看起来应该很简单。
答案 0 :(得分:0)
您的策略对于显示RDS实例和群集快照是正确的。发布您的整个代码,以便我们可以看到问题所在。还要仔细检查您对凭证的使用情况。
注意:我没有测试Aurora只有RDS SQL Server。
我通过IAM策略模拟器运行您的策略。其他命令失败时,DescribeDBInstances
和DescribeDBClusterSnapshots
已通过。
我创建了一个新用户&#34; testusers3&#34;。我将您的政策附加到此用户。
我下载了这个新用户的凭据并创建了个人资料&#34; testusers3&#34;使用AWS CLI。
AWS CLI命令aws --profile testusers3 rds describe-db-instances
正常运行。其他命令(例如aws --profile testusers3 rds stop-db-instance --db-instance-identifier XXX
)无法正确失败。
然后我编写了以下Python程序进行测试。该程序可以正确显示我们的RDS实例。
import boto3
session = boto3.Session(profile_name='testusers3')
client = session.client('rds')
r = client.describe_db_instances();
for i in r['DBInstances']:
print(i['DBInstanceIdentifier'], i['DBInstanceClass'], i['Endpoint']['Address'])