我正在使用文档的ssm:tag基于用户角色和文档标签来限制对用户的访问。我为IAM政策添加了条件,并且该规则正在运行。但是,当我尝试使用交叉帐户执行此操作时,它不起作用。
1)我的SSM文档位于主帐户中,与子帐户共享
2)限制基于标签的访问的IAM策略位于子帐户中(标签键:Role)
3)向子帐户提出了请求
方案1:从IAM策略中删除条件后,我可以成功执行文档。因此,子AWS账户可以从Master AWS账户获取SSM文档。
方案2:根据代码(即添加到IAM策略中的条件)过滤后,我无法执行文档。这表明子AWS账户无法从Master AWS账户获取SSM文档标签。 有人可以帮我吗?随附IAM政策以供参考。
IAM政策文件:
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ssm:SendCommand",
"Resource": [
"arn:aws:s3:::ssm-deliverables/ssm-*",
"arn:aws:ec2:ap-south-1:20**********:instance/*"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "ssm:ListCommandInvocations",
"Resource": "*"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "ssm:SendCommand",
"Resource": "arn:aws:ssm:::document/*",
"Condition": {
"StringEquals": {
"ssm:resourceTag/Role": "${aws:PrincipalTag/Role}"
}
}
}
]
}
答案 0 :(得分:1)
aws:PrincipalTag 是aws全局条件上下文键之一。我们必须使用上面的密钥将附加到委托人发出请求的标签与您在策略中指定的标签进行比较。
在这种情况下,主体是附加了上述策略的IAM用户/角色。因此,应该使用IAM政策中提到的相同值来标记IAM用户/角色本身。
例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:StartInstances",
"Resource": "*",
"Condition": {"StringEquals": {"ec2:resourceTag/Name": "${aws:PrincipalTag/Name}"
}
}
}
]
}
假设上述策略已附加到想要启动EC2实例的IAM用户,则如果该用户使用与IAM中提到的资源标签相同的标签进行了标记,则该用户将能够启动EC2实例。政策。
因此,您必须使用“角色”和“值”键将角色名称或arn标记为SSM文档标记,从而将IAM用户发出的请求标记为SSM。