amazon-web-services - 为 IAM 角色的操作定义两个语句
问题描述
是否可以在 IAM 角色中有两个语句用于同一操作?对于不同的操作,它可以正常工作,但是在为相同的操作创建新语句时它不起作用。
例子:
IamDeploymentRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: "iam-deployment"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
AWS:
- !Sub "arn:aws:iam::${ManagementAccountID}:root"
Action:
- "sts:AssumeRole"
Condition:
IpAddress:
X
- Effect: "Allow"
Principal:
Service:
- "some service"
Action:
- "sts:AssumeRole"
我正在尝试这样做,但这就像声明中的第二项被忽略了。我不知道这个过滤器究竟是如何工作的。例如,当一个语句匹配动作但不匹配条件时,它会继续吗?还是在第一次知道没有它停止?
我尝试了很多文档,但找不到答案。
条件: https ://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html
政策和权限:https ://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html
解决方案
您似乎正在定义IAM 角色AssumeRolePolicyDocument
的信任策略。
我通过使用信任 Amazon EC2 和 AWS Lambda 的信任策略创建 IAM 角色来测试这一点:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
然后,我为该角色分配了 Amazon S3 权限。
测试:
- EC2:我尝试使用此角色启动 Amazon EC2 实例,但该角色未出现在下拉列表中。
- Lambda:我能够成功地将角色附加到 AWS Lambda 函数并访问 Amazon S3。
然后我交换了信任关系的顺序:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
这没有任何影响— Lambda 运行良好,但 EC2 无法识别该角色。
然后我从信任关系中删除了 Lambda:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
这导致该角色从 Lambda 控制台中消失,而且奇怪的是,它也没有出现在 EC2 控制台中使用。
然后我创建了一个相同的角色(只有 EC2 作为受信任的实体),它运行良好。
底线:当信任策略中有多个服务时,服务似乎会混淆。几乎就好像它“记住”了第一个服务而忽略了其他服务,即使修改了信任策略也是如此。因此,您似乎只能在信任策略中指定一项服务。
推荐阅读
- ethereum - Ledger Nano-S 助记符到 MyEtherWallet
- jquery - 防止在数据表中单击行时重新排序
- xml - windows7 cygwin perl XML::Parser libexpat*:安装失败
- javascript - Java 和 JavaScript 中的逻辑相似,但 DFS 的结果不同
- python - 我正在用 discord.py 制作一个音乐机器人,但我在播放命令时遇到了一些问题
- java - 如何使框架/面板适合具有固定宽度但可变高度的文本标签
- excel - 在 DAX 中使用 QUARTILES 计算
- javascript - Vue,以“xhxxm”格式添加/增加时间
- django - Django Signals 如何创建克隆或复制对象?
- c# - 如何在 C# 中用值填充新的 List 对象