Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 编写IAM策略以通过EC2标记限制AWS SSM与EC2实例的连接_Amazon Web Services_Tagging_Ssm - Fatal编程技术网

Amazon web services 编写IAM策略以通过EC2标记限制AWS SSM与EC2实例的连接

Amazon web services 编写IAM策略以通过EC2标记限制AWS SSM与EC2实例的连接,amazon-web-services,tagging,ssm,Amazon Web Services,Tagging,Ssm,我希望所有用户都能够使用AWS SSM(系统管理器)“startsession”命令连接到EC2实例,但通过EC2实例上的标记限制他们可以连接到哪些实例。属于“webserver dev”组的IAM用户将有一个策略,允许他们aws ssm启动会话--将i-12341234定位到标记名为“SSMTag”、值为“webserver”的任何EC2实例。devserver dev组中的任何用户都可以连接到SSMTag='devserver'等的实例 我有一个允许访问任何EC2实例的策略,但只要我在策略J

我希望所有用户都能够使用AWS SSM(系统管理器)“startsession”命令连接到EC2实例,但通过EC2实例上的标记限制他们可以连接到哪些实例。属于“webserver dev”组的IAM用户将有一个策略,允许他们
aws ssm启动会话--将i-12341234
定位到标记名为“SSMTag”、值为“webserver”的任何EC2实例。devserver dev组中的任何用户都可以连接到SSMTag='devserver'等的实例

我有一个允许访问任何EC2实例的策略,但只要我在策略JSON中添加一个“condition”子句,访问总是被拒绝(或总是被允许)

我尝试过为策略、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}-*"
        }
    ]
}
我还尝试了以下条件行变化:

            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/SSMTag": "DevServer"
                }
            }

我想要的是,如果用户不是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}-*"
        }
    ]
}
语法差异为“ForAnyValue:StringEqualsIfExists”:{


希望这对将来的人有所帮助。

当你说“开发服务器的当前策略看起来像这样”时,你的意思是“开发服务器开发组的当前策略看起来像这样”,是吗?是的,我错了。这是附加到用户所在组的策略。
{
    "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}-*"
        }
    ]
}