aws 组织 SCP 策略拒绝具有公共 IP 的任何 VPC 中的任何 ec2 实例

Bil*_*ill 3 amazon-web-services amazon-iam aws-organizations

根据公司合规政策,我正在寻找解决方案来阻止客户端(100多个aws账户)创建具有公共IP的ec2实例,或者在创建后尝试在其上附加弹性IP。

我正在考虑使用AWS Organization SCP来实现它,所以我不需要在个人账户中设置它。但无法获得适当的 SCP 政策来做到这一点。

供您参考的 SCP 策略,我可以使用以下策略阻止 s3 公共访问,我需要类似于 ec2 实例。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutAccountPublicAccessBlock"
            ],
            "Resource": "*",
            "Effect": "Deny"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,使用正确的 SCP 策略,当客户端在 Orgainzation OU 下的帐户中时,如果允许公共 IP,则无法创建 ec2 实例,或者在创建 ec2 后,当他们尝试附加弹性 IP 时,scp 应阻止它。

更新

谢谢,@约翰

让我试试这个政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:AssociateAddress"
            ],
            "Resource": "*",
            "Effect": "Deny"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

更新#2

上述 scp 策略不起作用,我仍然可以使用公共 IP 创建新实例

Bil*_*ill 7

最后我得到了AWS支持的帮助。

@john的目标方向是部分正确的,真正的scp政策如下

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2:RunInstances"
      ],
      "Condition": {
        "BoolIfExists": {
          "ec2:AssociatePublicIpAddress": "true"
        }
      },
      "Resource": "arn:aws:ec2:*:*:network-interface/*"
    },
    {
      "Action": [
        "ec2:AssociateAddress"
      ],
      "Resource": "*",
      "Effect": "Deny"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

解释

  • 第一条语句阻止客户端使用公共 IP 创建新的 ec2 实例 ( aws ec2 run-instances --associate-public-ip-address xxxx )
  • 第二条语句阻止客户端将 EIP 附加到 ec2 实例。

更新

这个方案最终没有实施,因为太麻烦了。

特别是自动化IaC代码需要针对这一变化进行调整,例如Cloudformation、terraform、CDK等

我与 AWS CLI 共享了一个示例并解释了更改,您必须添加--no-associate-public-ip-address

aws ec2 run-instances --image-id ami-0c9f90931dxxxx --count 1 --instance-type t3.micro \
  --key-name bill-import-key --no-associate-public-ip-address --subnet-id subnet-0613b48exxxx
Run Code Online (Sandbox Code Playgroud)

其次,当您从aws控制台创建ec2实例时,您必须选择“disable 自动分配公共IP”。 在此输入图像描述

该解决方案仍然是保证整个组织的 aws 账户中的 ec2 实例没有公共 IP 的唯一解决方案,但组织中没有人喜欢它。