AWS Elastic Beanstalk Using same IP for outbound - amazon-web-services

I currently have an elastic beanstalk setup in AWS currently whenever i make API calls it is coming from the EC2 instance's external IP. is there a way to have all servers in that group use the same IP?

Put your EC2 instances in private subnets and direct all outbound traffic through a NAT. This way, all outbound connections appear to come from the NAT's IP address.
See the following for more information. It's a different problem, but the NAT solution is the same.
How do you allocate STATIC addresses to an EBS (beanstalk) within a VPC?
Note, for security, you should follow this architecture anyways. When using ELB, don't have your EC2 instances in a public subnet.

Related

Attach Elastic IP to EC2 instance of Elastic Beanstalk

My production and development application are running on EBS's EC2 instances where I need to attach an elastic IP to each instance. I am able to associate the elastic IPs to each instance but after some time the IPs disassociated automatically due to application load balance which creates a new instance of EC2, I know it's due to Application Loadbalance but I want to know how can I persist the elastic IPs to each instance? I am using third party integration in which I have to send my static IPs to make them whitelisted.
The AWS solution for sending requests to third parties from a fixed IP (or fixed set of IPs) when running in an auto-scaled environment is to create a NAT Gateway in your public subnet (or one in each public subnet), assign Elastic IPs to the NAT Gateways, and place your EC2 instances in private subnets with a route to the NAT Gateway.
In this configuration, all outbound requests will go through the NAT Gateway(s) which will have static (Elastic) IPs that can be whitelisted by third-parties.

IP address range for outbound requests from AWS EC2 in a load-balanced Elastic Beanstalk

Suppose we have an application running on an EC2 instance in a load-balanced Elastic Beanstalk stack. And this application wants to (1) call web services served by external hosts, and/or (2) open secured TN5250 (i.e, 5250 data stream over SSL-secured Telnet) sessions on external hosts.
Is there a way we can give those external hosts a reliable IP address range from which to expect our traffic?
(Cross-posted to the AWS EC2 developer forum.)
If the Amazon EC2 instances are in a private subnet, then you will need a NAT Gateway in a public subnet to provide them with Internet access. An Elastic IP address is associated with the NAT Gateway, which remains static and can be used for whitelisting. All outbound traffic from the instances will come from the NAT Gateway's IP address.
If the Amazon EC2 instances are in a public subnet and require a static IP address, they will each require their own Elastic IP address. Please note that there are limits on the number of Elastic IP addresses in your account.

How to Whitelist AWS Beanstalk IP

My utility deployed on AWS beanstalk and push some data in one of our client's DB server. Client wants public IP of beanstalk instance for whitelisting but problem is beanstalk is on autoscaling mode and spawn instances dynamically.
Is there any way to get rid of this situation?
One way to assign static IP from the pool and associate static IP during launch time from user data, but will not recommend this approach seems easy to go with the existing server, all you need create some elastic IP and update user data in elastic beanstalk instance.
using-features-user-data
But you may be intrested the recommended approach here.
How do I assign a static source IP address for all instances in a load balanced Elastic Beanstalk environment?
Short Description
You can use a network address translation (NAT) gateway to map
multiple IP addresses into a single publicly exposed IP address. When
your Elastic Beanstalk environment uses a NAT gateway, the backend
instances in your environment are launched in private subnets. All
outbound traffic from these instances is routed through the NAT
gateway. All outbound traffic originating from your backend instances
can be uniquely identified by an Elastic IP address, which is a static
IP address required by the NAT gateway.
Resolution
In the following steps, your Amazon Elastic Compute Cloud (Amazon EC2)
instances are launched in a private subnet that uses a NAT gateway,
with an attached Elastic IP address, as a default route. The load
balancer is in a public subnet and all external traffic to and from
the load balancer is routed through an internet gateway.
For the Network card, choose Modify.
For VPC, choose your VPC. In the
Load balancer settings section, for Visibility, choose Public. In the
Load balancer subnets table, choose the public subnets. In the
Instance settings section, clear Public IP address. In the Instance
subnets table, choose only private subnets with the NAT gateway that
you set up earlier.
For more details, you can look into this elastic-beanstalk-static-IP-address

Adding an additional static IP to elastic beanstalk instances

I have a few elastic beanstalk applications on the same VPC (which can also be reduced to one application), and I'd like them to be accessible both via one IP address (both inbound and outbound traffic), and via their own URL. I've seen that this can be done via NAT, but I haven't found documentation on whether this is all traffic (in both directions) and if it can be done alongside the original endpoints. Another question is whether there is a better way to do this.
NAT is used to provide access to internet for instances in private subnets. In this case all instances in the subnet will have the same external IP. But you won't be able to access your private instances using that IP, it's only for outbound traffic.
In your case I'd go with a ELB. Following the best practices, keep your instances with running applications in private subnets and:
Have an external facing ELB in public subnets (you'll need at least 2 public subnets in different AZs).
Create a Target Group and add your instances with running apps to it.
Assign the Target Group to the listener on your ELB.
Configure the security groups on ELB and app instances to allow the traffic on the port the applications are serving (usually it's 8080).
As a result you'll have your instances accessible by the ELB URL. If you want to have a pretty URL, you can configure it in Route 53 and resolve it to the ELB URL.
Its not possible by using aws provided NAT cluster but can be achieved by hosting a box with both Load balancer and NAT running in the same instance with EIP, map your domain with that IP for incoming traffic, for outgoing traffic in the route table of private app subnet you configure the NAT as target for all the 0.0.0.0/0 route, But it is not the recommended approach since the front facing instance becomes SPOF.
The recommended way is using ELB as a front facing and NAT cluster as outgoing for high HA.

Static IP using Elastic Beanstalk

I need the static IP to allow access to a firewalled network not on the AWS network.
Is it possible to get a static IP for a load balanced app using Elastic Beanstalk? I'm following the AWS docs regarding using Route 53 to host my app with a domain name, but from what I've read, this does not ensure a static IP because it is essentially using a CNAME allowing the IP behind the scenes to change. Is that the right understanding? Is it possible at all?
This post helped me get a static IP for outgoing requests by using a NAT Gateway, and routing specific requests through it.
I needed this static IP in order to be whitelisted from an external API provider.
I found this way much easier than the provided by AWS, without the need of creating a new VPC and a private and public subnets.
Basically, what I did was:
Create a new subnet to host the NAT Gateway.
Create the NAT Gateway in the above subnet, and assign a new Elastic IP. This one will be our outgoing IP for hitting external APIs.
Create a route table for the NAT subnet. All outbound traffic (0.0.0.0/0) should be routed through the NAT Gateway. Assign the created subnet to use the new route table.
Modify the main route table (the one that handles all our EC2 instances requests), and add the IP(s) of the external API, setting its target to the NAT Gateway.
This way we can route any request to the external API IPs through the NAT Gateway. All other requests are routed through the default Internet Gateway.
As the posts says, this is not a Multi AZ solution, so if the AZ that holds our NAT Gateway fails, we may lose connection to the external API.
Update:
See #TimObezuk comment to make this a Multi-AZ solution.
Deploy your beanstalk environment in VPC, and with the right configuration, a static IP for outbound traffic is easy.
In this setup, your instances all relay their outbound traffic through a single machine, which you can assign an elastic IP address to. All of the inside-originated, Internet-bound traffic from all of the instances behind it will appear, from the other network, to bw using that single elastic IP.
The RDS portion of the following may be irrelevant to your needs but the principles are all the same.
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo-vpc-rds.html
Deploy your beanstalk environment in VPC, and with the right configuration, a static IP for outbound traffic is easy.
In this setup, your instances all relay their outbound traffic through a single machine, which you can assign an elastic IP address to. All of the inside-originated, Internet-bound traffic from all of the instances behind it will appear, from the other network, to bw using that single elastic IP.
The RDS portion of the following may be irrelevant to your needs but the principles are all the same.
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo-vpc-rds.html