Accessing an HTTP Server on a Private Subnet via a Public Subnet - amazon-web-services

On AWS, I have an EC2 instance with an HTTP server running on port 8888 inside a private subnet, and an EC2 instance that can communicate with it in a public subnet. How can I access the HTTP server running inside the private subnet via the public subnet? I understand that I can use the public EC2 instance as a proxy server via an SSH tunnel, but I am unable to access the server from my browser.
This is the command I am running on the public server:
ssh -R 0.0.0.0:8888:localhost:8888 -N user#private_server
When I access public_server:8888 on my browser, I am unable to connect. I may need to set up the browser to access traffic through a proxy server (via some chrome extension) but this is not what I want. Is there a way to set up the public server such that no work needs to be done by the client to access the server via their browser?

I did some more research, and realized I was looking for a reverse proxy, and could just simplify further by using an Application Load Balancer running in the public subnet that could interface with the instance running in the private subnet.

Related

auto assign public ip for ec2 webserver

I am going to deploy Nginx webserver to run my angular application in AWS ec2 and i have 2 subnets public and private. to reach my nginx web application I will use ALB which is in public subnet, now my question is
can i deploy the Nginx webserver(ec2) in private subnet.
in which case I should enable public IP to my nginx ec2 server
You should not assign a public IP address to the nginx EC2 server because:
It should only be accessed via the Load Balancer, and
It is in a private subnet, so the Public IP address will not work (that is, traffic will not be routed to the instance)
You should deploy the Load Balancer in the public subnet and the EC2 instance in the private subnet.
can i deploy the Nginx webserver(ec2) in private subnet.
Yes, you can. In ideal case the private webserver does not need any internet access.
in which case I should enable public IP to my nginx ec2 server
The server does not require public IP. If you place it in a private subnet, and you want your server to access internet (e.g. to install packages or updates) you have to setup NAT gateway in a public subnet.

SSH using Public IP over the VPN

I have an EC2 instance launched in Private Subnet.
I have also launched an AWS Client VPN and did all of the configurations and I am able to connect to my EC2 instance via Private IP.
There is a service running on Port 25, I am able to telnet to that as well using the Private IP.
But when I try to do telnet using the Public IP of the Instance, I am not able to do so. Also, I am not able to ssh into Instance when I am connected to VPN using the Public IP.
How can I ssh into my EC2 Instance using Public IP when I am connected to VPN?
I don't want to add my machine's Public IP in the Security Group and then do the SSH.
If an Amazon EC2 instance is in a private subnet (defined as having a Route Table that does not point to an Internet Gateway), then the instance will not be reachable via public IP address.
Public IP addresses are routed via the Internet Gateway. Since there is no route between the Internet Gateway and the instance, it cannot be reached via the public IP address.

Connect to CloudSQL using Private IP from a desktop client

I connect to our CloudSQL instances via CloudSQL proxy from my desktop. But all the instances are currently using Public IP (with SSL)
If we configure Private IP on CLoudSQL, can we still use the Proxy to connect from desktop clients (i.e. outside the vpc)?
I understand that we won't be able to connect to instances using the Private IP explicitly from outside the vpc.
Thanks
Using proxy requires access to the same VPC that the CloudSQL is in. The proxy only lets you connect without whitelisting in firewall the client ip, but it still requires the ip to be accessible. At docs https://cloud.google.com/sql/docs/postgres/sql-proxy under Using the proxy with private IP you can find:
If the proxy is using the same VPC network as the Cloud SQL instance, and the instance has a private IP address, the proxy can connect using private IP.
I assume if you have connected your desktop to your private VPC with Cloud VPN or Interconnect, you could be able to connect to private ip with proxy. More info on this can be found here: https://cloud.google.com/vpc/docs/configure-private-google-access-hybrid.

Connect to a web application in private through bastion host for my local machine in aws

I have an EC2 instance running in AWS and here's the scenario I'm trying to achieve. I have a VPC setup with 3 subnets. 2 of them are private with no access to the internet (even using a NAT gateway/NAT instance), and another is a public subnet.
Bastion Host configured with Public IP (55.55.55.55 for example) in the public subnet.
I have ec2 instance launched in a private subnet that hosts my application, and I want my users to be able to access the application from their workstation browsers.
If I set up the SSH connection as discussed here, it works perfectly fine for the web browser page set up on my bastion host. However, for my use case, I need to achieve another level of SSH forward like above as my application is in the private subnet for that application to be accessible from my local machine. Is that possible somehow? I also need to make sure there are no issues with the DNS.
ssh -N <Bastion_IP/HostName> -L<LocalPort>:<Internal_IP_of_Web_Server>:<WebServer_Port>
Then you can access the webserver http://localhost:<LocalPort>/
Assuming you have a web application on ec2 in a private subnet and you want to make it available for access outside AWS.
You can setup port forwarding on your bastion host following this tutorial, but I suggest you use a load balancer (ELB) as described in this guide. To use an ELB you will need another public subnet in a different AZ. If you're application is serving HTTP traffic, then it's even better to use a Application ELB (ALB). Here is more info about ALB.

Need help to winscp to the private linux instance in AWS

I have an instance in AWS with private IP (no public dns and no public ip) and I would like to connect to this instance through winscp to download few logs to my local PC. When I try to connect to this private instance through winscp I get below error, obviously because the server is in private.
Usually I ssh to bastion server which is in public subnet and then from there with private ssh key I ssh to the private instance. I could able to winscp to this bastion server which is in public but I would require to winscp to the private instance. I tried winscp connection tunnel hoping it might help somehow but I got "authentication key" error. Is there any way to winscp to private instance in AWS.
I found this tutorial http://www.revsys.com/writings/quicktips/ssh-tunnel.html to setup an SSH tunnel to be followed on the publicly accessible machine to link to the private one.
More opinions here How to setup bastion host or Jumpbox in AWS?.