请启用 Javascript 以查看内容

使用IAM通过标签分配不同用户SSM会话窗口的完整指南

 ·   ·  ☕ 3 分钟  ·  ✍ CNSRE · 👀... 阅读

作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/240917103351/
相关话题:https://www.cnsre.cn/tags/aws/


什么是SSM和IAM标签分配?

在AWS上进行多用户管理时,安全和灵活的权限控制至关重要。SSM(AWS Systems Manager)允许通过控制台或命令行接口远程管理EC2实例,而IAM(Identity and Access Management)则是定义用户和服务在AWS中的操作权限的核心组件。

使用IAM角色和标签,我们可以为不同的用户分配特定EC2实例的访问权限,确保他们只能访问与自己相关的资源。例如,如果你有10台EC2服务器,你可以使用标签将这10台服务器分为两组,让用户A和用户B分别只能访问自己的EC2实例。


为什么选择通过标签分配SSM会话权限?

直接为用户分配权限显得笨重且复杂,特别是在需要不断添加或移除资源时。通过为资源添加标签,我们可以通过IAM策略轻松控制用户的访问权限,这使得管理变得更加灵活和可扩展。

那么,如何做到这一点?我们可以通过简单几步配置IAM策略来实现这个目标。


实现IAM策略:如何分配不同用户的SSM会话权限?

要实现通过标签分配不同用户对特定EC2实例的SSM会话窗口权限,我们需要定义一个合理的IAM策略。这个策略应包含以下功能:

  1. 允许用户使用System Manager控制台:通过IAM策略,用户可以访问SSM管理控制台并查看会话窗口的相关信息。
  2. 启动特定标签资源的会话:用户只能对具有指定标签的EC2实例启动SSM会话。
  3. 终止自己的会话:用户只能终止自己启动的SSM会话,确保操作安全性。

我们可以为这个需求设计如下IAM策略:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PassRoleForSSM",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ssm.amazonaws.com"
                }
            }
        },
        {
            "Sid": "DescribeSessionsAndInstances",
            "Effect": "Allow",
            "Action": [
                "ssm:GetConnectionStatus",
                "ec2:DescribeInstances",
                "ssm:DescribeSessions",
                "iam:ListRoles",
                "ssm:DescribeInstanceProperties"
            ],
            "Resource": "*"
        },
        {
            "Sid": "StartSSMSession",
            "Effect": "Allow",
            "Action": "ssm:StartSession",
            "Resource": "arn:aws:ec2:region:account-id:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Project": "test"
                }
            }
        },
        {
            "Sid": "TerminateOwnSession",
            "Effect": "Allow",
            "Action": "ssm:TerminateSession",
            "Resource": "arn:aws:ssm:region:account-id:session/${aws:username}*"
        }
    ]
}

解析策略的关键部分

  1. PassRoleForSSM: 允许用户通过IAM角色为SSM服务授权访问权限。
  2. DescribeSessionsAndInstances: 允许用户查看当前活动的会话和EC2实例的详细信息。
  3. StartSSMSession: 用户只能启动标签为 Project=test 的EC2实例的SSM会话。通过这样的标签条件,我们可以轻松将不同的实例分配给不同的用户。
  4. TerminateOwnSession: 用户只能终止自己启动的SSM会话,确保不会影响其他人的操作。

如何通过标签分配会话?

通过为EC2实例添加标签,我们可以方便地指定哪些资源属于哪个用户。例如,我们可以为实例添加标签 Project=test,这样具有相应权限的用户就可以通过SSM访问这些实例。

举例

  • 用户A的EC2实例可以添加标签 user=A
  • 用户B的实例可以添加标签 user=B

在IAM策略中,可以根据 aws:ResourceTag 条件语句控制用户的访问权限。这意味着,用户A将只能访问带有 user=A 标签的实例,而用户B只能访问带有 user=B 标签的实例。


结论

通过IAM标签和策略,我们可以为不同用户分配特定资源的访问权限,实现精细化的权限控制。在AWS这样的复杂环境中,确保安全与灵活性并存至关重要。通过本文的策略示例和解释,我们可以轻松地为我们的用户提供合适的SSM访问权限,确保操作的安全性和可控性。


作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/240917103351/
相关话题:https://www.cnsre.cn/tags/aws/


您的鼓励是我最大的动力
alipay QR Code
wechat QR Code

Avatar
作者
CNSRE
一位只会重启的运维


目录