【问题标题】:AccessDenied: Not authorized to perform rds:DescribeDBInstancesAccessDenied:无权执行 rds:DescribeDBInstances
【发布时间】:2018-07-02 19:42:29
【问题描述】:

我想以编程方式列出我的 RDS 数据库实例和集群快照,因此我已将以下 IAM 政策直接附加到我的一位用户:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ReadProdSnapshotsAndInstances",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBInstances",
                "rds:DescribeDBClusterSnapshots"
            ],
            "Resource": "*"
        }
    ]
}

但是当我以该用户身份执行以下操作时(使用 AWS Node.js 开发工具包)...

rds.describeDBInstances({}, (error, data) => {
    ...
});

...我收到以下错误:

AccessDenied: User: arn:aws:iam::<accountId>:user/<userName> is not authorized to perform: rds:DescribeDBInstances

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

【问题讨论】:

  • 是否有任何其他策略附加到该用户,明确拒绝 rds 操作?
  • 不,没有附加其他政策。如果我附加内置的AmazonRDSFullAccess 策略,我的代码将按预期工作。
  • Action 为 "rds:Describe*" 是否有效?
  • 您如何向 AWS 进行身份验证?我在使用 Cognito 时遇到了同样的问题,发现默认情况下 Cognito 增强身份验证不允许访问 RDS,您必须使用基本身份验证。我在这里发布了我的解决方案:stackoverflow.com/questions/67761849/…

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


【解决方案1】:

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

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

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

我创建了一个新用户“testusers3”。我已将您的政策附加到该用户。

我下载了这个新用户的凭证并使用 AWS CLI 创建了配置文件“testusers3”。

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'])

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 2016-02-16
    • 2021-10-01
    • 2021-10-14
    • 2015-02-16
    • 1970-01-01
    • 2021-02-10
    • 2018-11-07
    • 2016-03-18
    相关资源
    最近更新 更多