是否可以定义 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
我可以确认它正在按预期工作。
我正在尝试定义一个 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
我可以确认它正在按预期工作。