amazon-web-services - AWS IAM:条件上下文键“aws:RequestTag”如何工作?
问题描述
我有一个附加了角色的 EC2 实例。我的目标是提供对 AWS 服务(例如 Lambda)的完全访问权限,但仅限于某些资源(基于标签)。我发现这aws:RequestTag
是这样做的方法。
下面是附加到该角色的 IAM 策略。
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1614664562621",
"Action": "lambda:*",
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringLike": {
"aws:ResourceTag/app": "prod"
}
}
}
]
}
我在所需的 lambda 函数上添加了标签app:prod
,但是当我尝试列出 lambda 时出现AccessDeniedException
错误。下面是错误信息
调用 ListFunctions 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::123456789:assumed-role/iam-role-name/i-01abcd456abcd 无权执行:lambda:ListFunctions on resource: *
如何制作aws:RequestTag
作品?我哪里错了?
下面的类似问题:(该解决方案对我不起作用) aws:RequestTag on s3 bucket 不起作用(在担任角色时)
解决方案
您可能希望aws:ResourceTag
在您的条件中使用并标记此策略应允许访问的资源(即 Lambda 函数)。
aws:RequestTag
用于控制在 AWS API 调用中可以携带哪些标签,例如在资源上添加/编辑/删除资源标签或在会话上添加会话标签(通过sts:TagSession
调用)。它们并不是为了保护对具有特定标签的资源的访问。
此外,在您的角色上添加标签并不意味着任何调用者身份(即假定的会话角色)都会将此标签作为请求/会话标签。因此,它不会控制对具有该标签的资源的任何授权/访问。您标记的 IAM 角色是另一个AWS 资源,现在应用了资源标签。
此外,当 EC2 担任您在 EC2 实例中的角色时,您甚至无法控制会话标签,因此您无法控制 EC2 实例的会话/请求标签。
编辑:lambda:ListFunctions
但是,在您的特定示例中,这不是特定于资源的操作,您无法通过具有 API 调用者策略允许的特定资源标签的 Lambda 函数来控制/过滤列表。
在使用多个环境/阶段时,拥有多个 AWS 账户(每个环境/阶段一个)实际上是最佳实践。如果您还没有使用多个 AWS 账户,您甚至可以使用AWS Organizations进行合并计费等。
推荐阅读
- c++ - 如何对 unique_ptrs 列表进行排序?
- c - 运行 fork() 时子进程接管父进程
- python - 如何在python中存储到mysql之前评估数据大小
- python - 从变量python调用字典
- python - 如何标准化从 - inf 到 +inf 在 0,1 之间的数据,其中值 0 在标准化时始终等于 0.5?
- c# - 空引用 - 如何判断哪个变量是空引用?
- twitter-bootstrap - bootstrap (3.3.7) youtube 风格的图像轮播
- c++ - 指向派生类的基类指针不能访问派生类方法
- javascript - 如何使用 Node.js 在 Heroku 中绑定端口
- vue.js - Vue.js 非渐进式渲染