amazon-web-services - 不支持带有“aws:ResourceTag”的 IAM 政策
问题描述
我正在尝试创建一个 IAM 策略,让用户可以完全访问 dynamodb,但需要注意的是表必须具有Stage
带有值的标签Dev
。基本上您可以创建一个表,但您应该在其上添加Stage
带有值Dev
的标签。您只能查看/更新等标签为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
不是此处所述的全局条件键。
全局条件键是带有 aws: 前缀的条件键。AWS 服务可以提供包含服务前缀的服务特定密钥。例如,IAM 条件键包括 iam: 前缀。
根据文档,任何带有 aws: 前缀的条件都是全局条件。但是,如果您查看其他服务的条件,例如 IOT,您将看到带有aws:
前缀的服务特定条件,这与文档冲突。
然而,ECR 将ecr:ResourceTag
和都aws:ResourceTag
列为服务特定条件。
另一方面,EC2 只有ec2:ResourceTag
. RDS 也有rds:db-tag
同样的目的。但是,DynamoDb 没有用于此目的的服务特定标签。
简而言之,aws:ResourceTag 不是全局条件键。一些服务使用 aws: 前缀创建特定于服务的标签,即使它们不应该这样做以符合 AWS 命名约定。
我建议您为开发资源创建一个单独的帐户。如果您不能这样做,您可以尝试更改策略中的逻辑作为一种解决方法,例如,代替标记条件,在您的策略中应用命名约定,例如以 dev_ 开头的任何表。
推荐阅读
- sql - sql:如何处理数字类型的案例?
- excel - 如何在 Excel 的选择案例中嵌入创建下拉列表?
- mongodb - 如何将mongodb解码结构传递给函数
- javascript - 我正在尝试部署 Heroku,但出现此错误 - code = H10, desc = app crashed method=GET path="/" status=503
- python - 如何从现有组件图中获取具有给定边数的随机组件子图?
- typeorm - 使用 createQueryBuilder 将十进制字段转换为字符串
- azure - Azure CLI 查询帮助 - JMESPath - 使用有空格的键进行过滤,提取其中有空格的键(来自 Powershell)
- python - For Loop - Range - Python - 关于增量逻辑的问题
- c# - 非静态字段需要使用 FluentValidation 返回对象验证类
- r - R中的for循环问题