Configuring the upgraded Security Groups

in AWS with discrimiNAT

With discrimiNAT, the Security Groups attached to the applications that need filtered access to the Internet can be annotated with a set of allowed FQDNs. This allows creating micro-segments from the protected workload to the Internet.

No need to create VPC-wide allowlists that allow discrete applications within access to what they needn’t.

discrimiNAT’s own Security Groups need not be altered.

On this page, we cover the syntax for the Cloud-native Security Groups' description fields, where the annotations live.

Table of Contents

See-Thru mode

The see-thru mode is a non-blocking configuration that allows one to build an appropriate allowlist upto a specified date. The annotation is added to the description fields of outbound rules of the protected applications to-be.

Syntax

discriminat:see-thru:YYYY-mm-dd

The rule will automatically stop working after the YYYY-mm-dd date.

Examples

discriminat:see-thru:2021-08-31

discriminat:see-thru:2022-1-1

Such a rule must allow all protocols, all ports and a destination of 0.0.0.0/ with any mask, so could be 0.0.0.0/0, 0.0.0.0/1 or 0.0.0.0/32.

Configuring this mode in the AWS web console would look like this:

In Terraform, it would be along the lines of:

resource "aws_security_group" "some-app" {
  name = "monitor-some-app"

  vpc_id = var.vpc_id

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
    description = "discriminat:see-thru:2021-08-31"
  }
}

Logs

The flow logs stream under the discrimiNAT log group in CloudWatch will have three additional fields for traffic from any workload that has a Security Group attached with a see-thru rule in it:

  1. see_thru_exerted: true when no tls or ssh protocol rules allowed this connection through and it’s only because of the see-thru rule that the connection has been let through. false when a tls or ssh protocol rule would otherwise allow this connection through. The rest of the fields in the log line remain as they would without the see-thru rule, hence indicating which tls or ssh protocol rule matched to let this connection through.

  2. see_thru_gid: The Security Group ID where the enacted see-thru was found.

  3. see_thru_days_remaining: The number of remaining days this rule will continue to work. Runs into negative if the current date goes past the specified date. These log fields are still emitted if a see-thru rule with any date, past or future, remains specified.

TLS and SSH mode

The tls and ssh modes are a blocking configuration that will only allow FQDNs set out in the allowlist. Destination protocols and FQDNs are added to the description fields of outbound rules of the protected applications.

Syntax

discriminat:<protocol>:<fqdn>[,<fqdn>]

  • Valid protocols are ssh and tls only.
  • There can be as many FQDNs as you can fit separated by commas. There cannot be whitespace, though.
  • There can be other text leading and trailing this specification, separated by whitespace.
  • All of it is case insensitive.

Examples

  • discrimiNAT:TLS:api.foo.example.com,downloads.example.net
  • discrimiNAT:SSH:sftp.txs.example.org,ssh.github.com
  • discriminat:tls:api-v2.example.com discriminat:tls:www.example.org
  • lorem ipsum discriminat:ssh:ssh.github.com,gitlab.com dolor sit amet

Configuring this mode in the AWS web console would look like this:

  • Under Type, choose any TCP protocol type and specify exactly one port number in Port range. Multiple ports, ranges, other protocols, and so on are not supported.
  • For your typical HTTPS outbound connection, the port number would be 443.
  • A typical SFTP connection has the port number of 22.
  • Destination must be set to the narrowest IP block you can think of. Now if you don’t have anything narrower than 0.0.0.0/0 that is absolutely fine! The firewall takes care of validating the destination IP address of actual packets in many ways, but the outbound rule at the AWS networking and security level must allow the packet to leave the protected workload at all. We repeat, 0.0.0.0/0 is a safe choice with the discrimiNAT firewall in the way.
  • Should you wish to use the same port number again with a different rule, set to the destination to 0.0.0.0/1 or 0.0.0.0/2 or 0.0.0.0/3 and so on.
  • Multiple such rules can be added to one Security Group and all of them will be recognised.
  • Multiple Security Groups can also be attached to the protected workloads containing such rules.

In Terraform, this would be along the lines of:

resource "aws_security_group" "acme" {
  name = "acme-reports-upload"

  vpc_id = var.vpc_id

  egress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
    description = "discriminat:tls:api.acme.com,auth.acme.com,foo.example.com,bar.example.net"
  }
}

Complete Bypass

If you would like to discuss alternate protocols or know how to completely bypass the discrimiNAT whilst still routing traffic, get in touch with our DevSecOps Concierge to discuss the best option for your use case.