AWS ALB different ingress rules for different url paths - amazon-web-services

I have internet-facing AWS ALB. I must accept all HTTP traffic only from whitelist set of ip addresses. At the same time there's one exclusion for mydomain.com/some_path - it should accept HTTP traffic from all IPs (0.0.0.0/0).
Am I on the right way trying to configure this logic with ALB? Should I use path condtions for this purpose?

You can't do that via ELB settings and you can't do that via security groups. One option would be to attach a Web Application Firewall (WAF) to the ELB and then create the appropriate IP matching rules there.

Related

Blocking inbound traffic for AWS VPC except from load balancer and select addresses

I have a couple of HTTP services running in containers using AWS Fargate. These services are meant to be accessed using an Application Load Balancer, and from a list of selected IP addresses. However, with default settings, the services are open to all inbound traffic.
The containers are all in the same VPC, Security Group and Subnets. The same goes for the load balancer.
I tried restricting the inbound traffic using Network ACLs, but this also blocked connections from the load balancer. What is the correct way of achieving the desired behavior (blocking external traffic)?
Both ECS tasks and service supports security groups. So you update the "Inbound traffic" of the security group to allow traffic only from ALB, read more about it here: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-application-load-balancer.html
I think for your case it is better to use AWS WAF, If you want to allow some web requests and block others based on the IP addresses that the requests originate from, create an IP match condition for the IP addresses that you want to allow and another IP match condition for the IP addresses that you want to block. see the following link: here

Outgoing rule based on host in AWS

I have an app that requires connecting to port 587 of Google's stmp servers in the domain stmp.gmail.com.
I want to create an outbound security rule that allow that specific traffic and nothing else, but the problem is AWS security rules only allow CIDR filtering (i.e. static IP address).
What is the combination of AWS services and configurations to make this happen?
I think you'll need to allow traffic to all the IPs; by default security groups allow ALL outgoing traffic - 0.0.0.0/0 destination: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html
You can restrict this to allow only 587 port but you cannot use DNS name directly.
You can check these resources to find more info:
https://forums.aws.amazon.com/thread.jspa?threadID=123159
Can I add dns name in aws security group

504 Gateway Time-out on ALB

I created an EC2 instance with apache installed on it and allowed HTTP/SSH traffic for my system only. I was able to access Web page using public IP of EC2. Then I configured ALB with same SG, registered same EC2 instance with ALB. Tried to access Web page using DNS name of ALB, got error -504 Gateway Time-out.
Increased time out interval to see if this resolves issue, didn't work. Then I revisited lesson and thought lets allow HTTP traffic to everyone(since it was allowed in lecture) in SG to see if it works and YES, it worked. I again changed SG to allow traffic only for my system and it failed again.
In this configuration, your security group needs to allow traffic from itself -- create rules that allow the appropriate ports, but use the security group sg-xxxx in place of an IP address, as the source. Merely being members of the same security group does not allow two systems to communicate with each other.
A better configuration would be for the balancer to have its own security group, and your instance's group would allow traffic from the balancer's group.
Note also that without the security group configuration being correct, you should also find that the health checks on the balancer are failing.

Routing Traffic to different instance using ELB

I have a website hosted on Site Ground let's say www.test.com
I create a subdomain xyz.test.com and routed the traffic to a backend server A through a load balancer which is hosted in a privated subnet in a VPC. It works fine since I have create a listener on which forwards the traffic from 443 to 3000. Now I want to add one backend server B in the same private subnet and want the traffic hitting port 444 of the ELB to be routed to this server.I want the requests xyz.test.com:444 to go to to port 3010 of the server B. In short I want to route traffic to different instances behind a load balancer but my URL is the same just the ports are different.
How can I achieve this?
You want to setup an Application Load Balancer. From the documentation (emphasis mine):
A load balancer serves as the single point of contact for clients. The load balancer distributes incoming application traffic across multiple targets, such as EC2 instances, in multiple Availability Zones. This increases the availability of your application. You add one or more listeners to your load balancer.
A listener checks for connection requests from clients, using the protocol and port that you configure, and forwards requests to one or more target groups, based on the rules that you define. Each rule specifies a target group, condition, and priority. When the condition is met, the traffic is forwarded to the target group. You must define a default rule for each listener, and you can add rules that specify different target groups based on the content of the request (also known as content-based routing).
Some of the benefits that may interested you, over a Classic Load Balancer are:
Support for path-based routing. You can configure rules for your
listener that forward requests based on the URL in the request. This
enables you to structure your application as smaller services, and
route requests to the correct service based on the content of the URL.
Support for host-based routing. You can configure rules for your listener that forward requests based on the host field in the HTTP
header. This enables you to route requests to multiple domains using a
single load balancer.
Support for routing requests to multiple applications on a single EC2 instance. You can register each instance or IP address with the
same target group using multiple ports.
Support for registering targets by IP address, including targets outside the VPC for the load balancer.

AWS ELB to multiple EC2s with subdomains

First things first, I don't know how AWS components work or are configured. I'm just designing an architecture from a top perspective, and then some sysadmin is going to implement it.
If I have an ELB and EC2 instances either running a HTTPS server or accepting WSS connections using a wildcard certificate (server1.domain.com, server2.domain.com...), should the ELB listen to different ports (like ELB:443 -> server1, ELB:444 server2...) or can it listen just to 443 and 8080 (for WSS) and then redirect to the specific server?
ELB does not work like that. ELB will take requests and forward them to any EC2 instance that is listening behind it. You cannot direct requests to specific EC2 instances in any way (port, domain, etc.).
If you want certain domains to go to specific EC2 instances, then you would either map your domain to the EC2 instances directly via your DNS server (and use Elastic IP addresses), or you would have individual ELBs infront of the different EC2 instances.