是否可以定义 AWS IAM 权限以仅创建具有特定标签的 RDS 实例?

Is it possible to define AWS IAM Permissions to create only RDS Insances with specific tags?

我正在尝试定义一个 IAM 角色 + 策略,用于通过 Cloudformation 部署和管理 RDS 实例。所以我正在编写一个 IAM 角色,它将传递给 Cloudformation 进行部署。

角色应允许部署和管理具有特定标签的 RDS 实例,并且不得创建任何没有标签的实例。

所以我在这个角色中尝试的是这个(IAM 政策):

    {
        "Condition": {
            "StringEquals": {
                "rds:req-tag/Project": "myproject" 
            }
        },
        "Action": [
            "rds:Create*",
            "rds:Restore*"
        ],
        "Resource": "*",
        "Effect": "Allow"
    },

然而,当我尝试使用 Cloudformation 创建带有标签 Project=myproject 的 RDS 实例时,我得到:

API: rds:CreateDBInstance User: <me> is not authorized to perform: rds:CreateDBInstance on resource: arn:aws:rds:eu-central-1:078433912766:db:ss9wm5ynvx3n8i because no identity-based policy allows the rds:CreateDBInstance action

在我看来,通过 CloudTrail 查看,Cloudformation 在创建实例时不发送标签,这可能是失败的原因。

所以我想知道:我正在做的事情有可能吗?还是我必须接受这样一个事实,即我无法限制 Cloudformation,使其只能创建具有特定标签的 RDS 实例?

我测试了以下策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Condition": {
                "StringEquals": {
                    "rds:req-tag/Project": "myproject"
                }
            },
            "Action": [
                "rds:Create*",
                "rds:Restore*",
                "rds:AddTagsToResource"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

使用以下 CLI 命令

aws rds create-db-instance \
    --db-instance-identifier test-mysql-instance \
    --db-instance-class db.t3.micro \
    --engine mysql \
    --master-username admin \
    --master-user-password secret99 \
    --allocated-storage 20 \
    --region us-east-1 \
    --tags Key=Project,Value=myproject

我可以确认它正在按预期工作。