Arc*_*rex 4 policy tagging amazon-web-services ssm
我希望所有用户都能够使用 AWS SSM(系统管理器)“startsession”命令连接到 EC2 实例,但限制他们可以通过 EC2 实例上的标签连接到哪些实例。属于“webserver-dev”组的 IAM 用户将拥有一个策略,允许他们访问aws ssm start-session --target i-12341234标签名称为“SSMTag”且值为“WebServer”的任何 EC2 实例。devserver-dev 组中的任何用户都可以使用 SSMTag = 'DevServer' 等连接到实例。
我有一个允许访问连接到任何EC2 实例的策略,但只要我在策略 JSON 中添加“条件”子句,访问就会始终被拒绝(或始终允许)。
我尝试过为策略、aws:TagKeys、ssm:ResourceTag、ec2:ResourceTag 和其他一些语法添加条件,但似乎都不允许我做我想做的事情。该文档 似乎表明我可以做到这一点,但要么我不明白标记的工作原理,要么误解了文档。
我当前的开发服务器政策如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringEquals": {
"ssm:ResourceTag/SSMTag": "DevServer"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "ssm:TerminateSession",
"Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我还尝试过以下条件线变化:
"Condition": {
"StringEquals": {
"aws:ResourceTag/SSMTag": "DevServer"
}
}
Run Code Online (Sandbox Code Playgroud)
和
"Condition": {
"ForAllValues:StringEquals": {
"ec2:ResourceTag:SSMTag": "DevServer"
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是,如果用户不属于 webserver-dev 组,他们就无法运行aws ssm start-session并连接到任何 ec2 实例,除非它们被标记为带有 WebServer 值的 SSMTag 标签。
结果是属于策略附加到的组的用户要么被拒绝访问,要么被允许连接到任何实例,无论附加到它的标签如何。
我读过很多类似问题的解决方案,基本上都是“某些函数不支持资源级别标记,但文档似乎明确表示它支持。
我收到了一封来自 AWS 支持的电子邮件,看来是条件的“StringEquals”部分的方式存在问题。该策略正确运行:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"ForAnyValue:StringEqualsIfExists": {
"ssm:resourceTag/SSMTag": "DevServer"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "ssm:TerminateSession",
"Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
语法差异是"ForAnyValue:StringEqualsIfExists": {
希望这对将来的人有帮助。
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |