web-dev-qa-db-ja.com

セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

すべてのアウトバウンドトラフィックをブロックするAWSセキュリティグループの出力ルールを設定しようとしています。デフォルトでは、セキュリティグループはすべてのアウトバウンドトラフィックを許可することが知られています。

AWS CloudFormationを使用していますが、適切なセキュリティ出力ルールをどのように定義する必要がありますか?

7
Chiranga Alwis

セキュリティグループは常にALLOWトラフィックを定義します。セキュリティグループにはDENYの概念はありませんがあります。

したがって、すべてのトラフィックを拒否する場合は、単に空のセキュリティグループを作成します

ただし、セキュリティグループはステートフルであることに注意してください。これは、インバウンドセキュリティグループが接続を許可する場合(たとえば、Webサーバーに着信する要求)、応答は自動的に終了することを許可されますサーバーを意味します。したがって、(構成に応じて)インバウンドとアウトバウンドの両方のセキュリティグループが空の場合にのみ、真にブロックされます。

サーバーをブロックするための他のオプションは、ホストベースのファイアウォールルール(つまり、オペレーティングシステム内の構成)またはサブネットレベルで動作するネットワークアクセス制御リスト(NACL)の使用です。 NACLには、サブネットに出入りするトラフィックをブロックできるDENYルールがあります(ただし、特定のインスタンスへのトラフィックはブロックできません)。

更新

出力ルールが指定されていない場合、デフォルトの「すべて許可」ルールがセキュリティグループに適用されることがわかります。

したがって、デフォルトのルールが適用されないように、何もしないルールを指定する必要があります。

例えば:

"InstanceSecurityGroup": {
  "Type": "AWS::EC2::SecurityGroup",
  "Properties": {
    "VpcId": {
      "Ref": "VPC"
    },
    "SecurityGroupIngress": [
      {
        "IpProtocol": "tcp",
        "FromPort": "80",
        "ToPort": "80",
        "CidrIp": "0.0.0.0/0"
      }
    ],
    "SecurityGroupEgress": [
      {
        "IpProtocol": "tcp",
        "FromPort": "1",
        "ToPort": "1",
        "CidrIp": "0.0.0.0/32"
      }
    ]
  }
12
John Rotenstein

CloudFormationは空のSecurityGroupEgressまたはSecurityGroupIngressプロパティを許可していませんが、ローカルホストへのすべてのアウトバウンドトラフィックのみを許可することでそれをだますことができます。

AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
  InstanceSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties: 
      GroupName: block-outbound
      GroupDescription: Allow http to client Host
      SecurityGroupEgress:
        - IpProtocol: -1
          CidrIp: 127.0.0.1/32
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
      VpcId: !Ref myVPC

これにより、すべてのアウトバウンドトラフィックをブロックするという目的が達成されます。

4
Raf

CloudFormationスクリプトでは、以下に示すように、「SecurityGroupEgress」属性の下にカスタムルールを含めることができます。

"InstanceSecurityGroup" : {
   "Type" : "AWS::EC2::SecurityGroup",
   "Properties" : {
      "GroupDescription" : "Allow http to client Host",
      "VpcId" : {"Ref" : "myVPC"},
      "SecurityGroupIngress" : [{
            "IpProtocol" : "tcp",
            "FromPort" : "80",
            "ToPort" : "80",
            "CidrIp" : "0.0.0.0/0"
         }],
      "SecurityGroupEgress" : [{
         "IpProtocol" : "tcp",
         "FromPort" : "80",
         "ToPort" : "80",
         "CidrIp" : "0.0.0.0/0"
      }]
   }
}

詳細については、 AWS UserGuide を確認してください。

0
Ashan