如何确保基于 EC2 映像内的 AWS 用户的可审计性和最小特权?

如何确保基于 EC2 映像内的 AWS 用户的可审计性和最小特权?

我在一家在 AWS 环境中运营的公司实习,并开始研究锁定用户权限,因此我正在寻找保护 EC2 实例的方法。具体来说,我想找到一种方法来避免分发授予无条件访问权限的密钥对ec2-user,而使用默认的 Amazon Linux sudo 策略,这实际上是 root还有一个缺点,就是没有审计日志(所以如果有人在通过 SSH 进入 EC2 实例时运行了一些恶意程序,就无法知道是谁,因为执行命令的 Linux 用户始终是ec2-user)。

我的第一个想法是通过 PAM 来实现这一点,类似于 LDAP 通过pam_ldap或类似方式集成到 PAM 中,但我找不到任何可以让我使用 IAM 作为身份验证后端的东西。我可以手动添加用户,因为实际上需要访问权限的人很少,但这似乎容易出现人为错误,而且随着时间的推移,这种情况不可避免地会变得越来越不一致。

我也搜索过网络,但没有找到。

这里的最佳做法是什么?

答案1

我的第一个想法是通过 PAM 来实现这一点,类似于 LDAP 通过 pam_ldap 或类似方式集成到 PAM 中,但我找不到任何可以让我使用 IAM 作为身份验证后端的东西

我认为你从错误的角度考虑了这个问题,首先尝试将你的域扩展到 IAM,以便用户使用他们的域凭证而不是单独的 IAM 凭证登录 AWS。IAM 最有用的方面是基于角色的访问和针对 AWS 用户的策略 - 这不会扩展到云实例,因此需要配置更传统的域性,例如创建虚拟私有云(VPC - 读取 VPN)和引导实例,以便专门为你的域配置它们。

具体来说,我想找到一种方法来避免分发授予 ec2-user 无条件访问权限的密钥对,使用默认的 Amazon Linux sudo 策略,该密钥对本质上是 root,并且还有一个缺点,即没有审计日志(因此,如果有人在通过 SSH 进入 EC2 实例时运行恶意程序,则无法分辨是谁,因为执行命令的 Linux 用户始终是 ec2-user)。

引导云实例

正如您所知,当您在云中启动一个实例时,您会将该实例与一个映像、一个网络、一个安全组、一个公钥等相关联,然后您可以使用私钥或密码通过 ssh 或 rdp 进入实例,通常以用户 ec2-user 或 windows 的 admin 身份 - 但您也可以使用名为 cloud-init 的服务来引导实例,在启动实例时选择“高级选项”

AWS 仪表板启动实例向导

在文本框中,您可以粘贴您的 cloud-init 脚本,cloud-init 是您的基本引导程序,您可以使用它来安装软件包、运行脚本、修改系统、添加用户和组等。它被称为“用户数据”云实例通过在实例环回地址(重定向)上发出 http 请求来查找任何用户提供的数据

GET http://169.254.169.254/2009-04-04/user-data

下面是一个脚本示例,它将添加一些用户和其他授权密钥

#cloud-config
users:
  - name: demo
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf0q4PyG0doiBQYV7OlOxbRjle026hJPBWD+eKHWuVXIpAiQlSElEBqQn0pOqNJZ3IBCvSLnrdZTUph4czNC4885AArS9NkyM7lK27Oo8RV888jWc8hsx4CD2uNfkuHL+NI5xPB/QT3Um2Zi7GRkIwIgNPN5uqUtXvjgA+i1CS0Ku4ld8vndXvr504jV9BMQoZrXEST3YlriOb8Wf7hYqphVMpF3b+8df96Pxsj0+iZqayS9wFcL8ITPApHi0yVwS8TjxEtI3FDpCbf7Y/DmTGOv49+AWBkFhS2ZwwGTX65L61PDlTSAzL+rPFmHaQBHnsli8U9N6E4XHDEOjbSMRX [email protected]
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcthLR0qW6y1eWtlmgUE/DveL4XCaqK6PQlWzi445v6vgh7emU4R5DmAsz+plWooJL40dDLCwBt9kEcO/vYzKY9DdHnX8dveMTJNU/OJAaoB1fV6ePvTOdQ6F3SlF2uq77xYTOqBiWjqF+KMDeB+dQ+eGyhuI/z/aROFP6pdkRyEikO9YkVMPyomHKFob+ZKPI4t7TwUi7x1rZB1GsKgRoFkkYu7gvGak3jEWazsZEeRxCgHgAV7TDm05VAWCrnX/+RzsQ/1DecwSzsP06DGFWZYjxzthhGTvH/W5+KFyMvyA+tZV4i1XM+CIv/Ma/xahwqzQkIaKUwsldPPu00jRN user@desktop
runcmd:
  - touch /test.txt

这种方法将允许您开发一种引导用户帐户和权限的方法(这与设置 ec2-user 的方法相同)。或者,您可以使用 cloud-init 或 cloud form 在启动时将实例加入域。

http://cloudinit.readthedocs.io/en/latest/

希望有帮助。

相关内容