不支持带有“aws:ResourceTag”的 IAM 策略
IAM Policy with `aws:ResourceTag` not supported
我正在尝试创建一个 IAM 策略,让用户可以完全访问 dynamodb,但需要注意的是 tables 必须具有标签 Stage
和值 Dev
。基本上您可以创建一个 table,但您应该在其上添加值为 Dev
的标签 Stage
。您只能 view/update 等那些具有 Stage=Dev
.
标签的 table
AWS 文档提到了一种使用 Global Context Keys 轻松做到这一点的方法:aws:ResourceTag
但是当我使用可视化编辑器时,我无法在上下文键列表中找到该键。如果我手动编辑 JSON 并添加相同的内容,我会收到警告 condition key is not supported
这是我的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OnlyDynamoDBWithTagValueDev",
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:*:accountnumber:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Stage": "Dev"
}
}
}
]}
我这里可能做错了什么?
我认为你没有做错任何事。 AWS 文档只是不正确且具有误导性。 aws:ResourceTag
不是 here 所述的全局条件键。
Global condition keys are condition keys with an aws: prefix. AWS services can provide service-specific keys that include the service prefix. For example, IAM condition keys include the iam: prefix.
根据文档,任何带有 aws: 前缀的条件都是全局条件。但是,如果您查看其他服务的条件,例如 IOT,您将看到带有 aws:
前缀的服务特定条件,这与文档冲突。
然而,ECR 将 ecr:ResourceTag
和 aws:ResourceTag
条件都列为特定于服务的条件。
另一方面,EC2 只有 ec2:ResourceTag
。 RDS 有 rds:db-tag
用于相同的目的。但是,DynamoDb 没有用于此目的的服务特定标签。
简而言之,aws:ResourceTag 不是全局条件键。某些服务使用 aws: 前缀创建特定于服务的标签,即使它们不应该这样做以符合 AWS 命名约定。
我建议您为开发资源创建一个单独的帐户。
如果您不能这样做,您可以尝试更改政策中的逻辑作为解决方法,例如而不是标签条件,在您的策略中应用命名约定,例如任何以 dev_.
开头的 table
DynamoDB 不支持基于标签的授权,因此您尝试执行的操作将不起作用。请参阅 here 以获取支持的服务列表。
我正在尝试创建一个 IAM 策略,让用户可以完全访问 dynamodb,但需要注意的是 tables 必须具有标签 Stage
和值 Dev
。基本上您可以创建一个 table,但您应该在其上添加值为 Dev
的标签 Stage
。您只能 view/update 等那些具有 Stage=Dev
.
AWS 文档提到了一种使用 Global Context Keys 轻松做到这一点的方法:aws:ResourceTag
但是当我使用可视化编辑器时,我无法在上下文键列表中找到该键。如果我手动编辑 JSON 并添加相同的内容,我会收到警告 condition key is not supported
这是我的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OnlyDynamoDBWithTagValueDev",
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:*:accountnumber:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Stage": "Dev"
}
}
}
]}
我这里可能做错了什么?
我认为你没有做错任何事。 AWS 文档只是不正确且具有误导性。 aws:ResourceTag
不是 here 所述的全局条件键。
Global condition keys are condition keys with an aws: prefix. AWS services can provide service-specific keys that include the service prefix. For example, IAM condition keys include the iam: prefix.
根据文档,任何带有 aws: 前缀的条件都是全局条件。但是,如果您查看其他服务的条件,例如 IOT,您将看到带有 aws:
前缀的服务特定条件,这与文档冲突。
然而,ECR 将 ecr:ResourceTag
和 aws:ResourceTag
条件都列为特定于服务的条件。
另一方面,EC2 只有 ec2:ResourceTag
。 RDS 有 rds:db-tag
用于相同的目的。但是,DynamoDb 没有用于此目的的服务特定标签。
简而言之,aws:ResourceTag 不是全局条件键。某些服务使用 aws: 前缀创建特定于服务的标签,即使它们不应该这样做以符合 AWS 命名约定。
我建议您为开发资源创建一个单独的帐户。 如果您不能这样做,您可以尝试更改政策中的逻辑作为解决方法,例如而不是标签条件,在您的策略中应用命名约定,例如任何以 dev_.
开头的 tableDynamoDB 不支持基于标签的授权,因此您尝试执行的操作将不起作用。请参阅 here 以获取支持的服务列表。