AccessDenied:无权执行rds:DescribeDBInstances

时间:2018-01-23 21:20:26

标签: amazon-web-services aws-sdk rds

我想以编程方式列出我的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

知道我做错了什么吗?这看起来应该很简单。

1 个答案:

答案 0 :(得分:0)

您的策略对于显示RDS实例和群集快照是正确的。发布您的整个代码,以便我们可以看到问题所在。还要仔细检查您对凭证的使用情况。

注意:我没有测试Aurora只有RDS SQL Server。

我通过IAM策略模拟器运行您的策略。其他命令失败时,DescribeDBInstancesDescribeDBClusterSnapshots已通过。

我创建了一个新用户&#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'])