Cross-account VPC peering connection to RDS - amazon-web-services

I have two AWS accounts (A and B). Each of them has a VPC with no overlapping CIDR blocks, both are in the same region. I have successfully created a VPC peering connection between them (which is active). The requester and receiver both allow remote vpc dns resolution.
I have specified in each VPC table routes the other's VPC cidr block as a destination with the peering connection as a target.
I have an EC2 instance running in a public subnet inside the VPCA of AccountA, attached to a security group SecurityGroupA. SecurityGroupA enables inbound from all sources in the default security group of VPCA, as well as inbound from AccountBId/SecurityGroupB, and all outbounds.
I have a RDS postgres instance running in the VPCB of AccountB, attached to a security group SecurityGroupB. SecurityGroupB enables inbound TCP on port 5432 (postgres default port) from AccountAId/SecurityGroupAId.
When running aws ec2 describe-security-group-references --group-id SecurityGorupAId, I get
{
"SecurityGroupReferenceSet": [
{
"GroupId": "SecurityGroupAId",
"ReferencingVpcId": "VPCBId",
"VpcPeeringConnectionId": "pcx-XXXXXXXXXXXXXXXXX"
}
]
}
Which seems to indicate that the security group is correctly referenced. But when trying to connect from the EC2 instance to the RDS instance, I'm getting a connection timed out error.

Related

Getting connection timed out error when mounting AWS EFS across accounts

I'm trying to mount an AWS EFS file system to an EC2 instance that is in another account. I followed the below steps:
Account A:
VPC-A: 172.31.0.0/16
Created EFS in the VPC
Security group-A: Allows all inbound traffic from VPC-B(10.210.0.0/16) in Account B, also allows all outbound traffic to the internet. And this security group is attached to the EFS file system.
Accepted VPC peering connection request from VPC-B(10.210.0.0/16)
Route table-A: contains the route to VPC-B(10.210.0.0/16) via peering connection
Account B:
VPC-B: 10.210.0.0/16
Launched an EC2 instance(10.210.0.165) in a private subnet in VPC-B
Security group-B: Allows both inbound and outbound traffic from/to VPC-A(172.31.0.0/16)
Created a VPC Peering connection with VPC-A
Route table-B: contains the route to VPC-A(172.31.0.0/16) via peering connection
Note: I made sure that the region and availability zones of both the EFS in account A and EC2 instance in account B are the same. Also connecting to the EFS endpoint in the correct AZ using the mount by IP option
Still, I'm getting "mount.nfs4: Connection timed out error"
Please help!
Edit:
Just to test the setup and connectivity, I launched one EC2 instance in account A and ping worked from the EC2 instance in account B.

In AWS Tried connecting rds from ec2 both are in same vpc(not default vpc) getting error

Tried connecting an Amazon RDS database to an EC2 instasnce. Both are in new VPC getting this error:
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
I have 1 public subnet for EC2 and 2 private subnets for database, created subnet group and security groups.
RDS security group tried with below inbound rules:
option: 1
PostgreSQL TCP 5432 0.0.0.0/0 Traffic from EC2
All traffic All All sg-0706b9fb2d2c2dbce / public-sc-eks-demo Public Subnet SC
option: 2
PostgreSQL TCP 5432 <ec2 ip address> Traffic from EC2
All traffic All All sg-0706b9fb2d2c2dbce / public-sc-eks-demo Public Subnet SC
Do we need outbound rules for EC2 security group?
It appears that you have:
An Amazon EC2 instance in the same VPC as an Amazon Redshift database
You wish to connect to the Redshift database from the EC2 instance
From security standpoint, you should have two security groups:
One security group on the Amazon EC2 instance (EC2-SG) with sufficient Inbound rules for you to be able to login, and default Outbound rules that Allow All traffic, and
One security group on the Amazon RDS instance (DB-SG) that permits Inbound access on port 5432 from EC2-SG
That is, the DB-SG should specifically reference EC2-SG in the Inbound rules.

Connect to RDS in a different region from EC2 instance

So I have a primary RDS in us-east-1 & a replica in us-west-1. Both are inside VPCs in their respective regions. I want to have one of my EC2 instances in us-east-1 connect to the replica instance.
A simple solution is to enable public access for the RDS replica and add the IP of the EC2 to its security group and it works.
But instead of allowing a static IP, I would like to allow access to the entire CIDR range of my us-east-1 VPC and also I don't want my instances to be public accessible.
To do this, I've setup a VPC peering connection between the two regions and I have added entries in the routing tables of both the VPCs to forward traffic to each other's CIDR ranges to the peering connections.
The CIRD range of the EC2 instance is 172.31.0.0/16 and I have added this to the security group of the RDS replica in the us-west-1 region. But for some reason the RDS is not reachable from my EC2.
Have I missed anything else? Thanks!
To summarize my setup:
US EAST:
VPC CIDR: 172.31.0.0/16
Route Table entry: Destination 10.0.0.0/16 routes to the peering connection of us-west-1 VPC.
EC2 IP: 172.31.5.234
US WEST:
VPC CIDR: 10.0.0.0/16
Route Table entry: Destination 172.31.0.0/16 routes to the peering connection of us-east-1 VPC.
RDS:
Public Accessible: Yes
Security Group: Allow connections from 172.31.0.0/16
To reproduce your situation, I did the following:
In us-east-1:
Created a VPC in us-east-1 with a CIDR of 172.31.0.0/16 using the "VPC with Public and Private Subnets" VPC Wizard
Launched an Amazon EC2 Linux instance in the public subnet
In us-west-1:
Created a VPC in us-west-1 with a CIDR of 10.0.0.0/16 using the "VPC with Public and Private Subnets" VPC Wizard
Added an additional private subnet to allow creation of an Amazon RDS Subnet Group that uses multiple AZs
Created an RDS Subnet Group across the two private subnets
Launched an Amazon RDS MySQL database in the private subnet with Publicly accessible = No
Setup peering:
In us-east-1, created a Peering Connection Request to the VPC in us-west-1
In us-west-1, accepted the Peering Request
Configure routing:
In us-east-1, configured the Public Route Table (used by the EC2 instance) to route 10.0.0.0/16 traffic to the peered VPC
In us-west-1, configured the Private Route Table (used by the RDS instance) to route 172.31.0.0/16 traffic to the peered VPC
Security Groups:
In us-east-1, created a security group (App-SG) that allows inbound port 22 connections from 0.0.0.0/0. Associated it to the EC2 instance.
In us-west-1, created a security group (RDS-SG) that allows inbound port 3306 connections from 10.0.0.0/16 (which is the other side of the peering connection). Associated it to the RDS instance.
Test:
Used ssh to connect to the EC2 instance in us-east-1
Installed mysql client (sudo yum install mysql)
Connected to mysql with:
mysql -u master -p -h xxx.yyy.us-west-1.rds.amazonaws.com
This successfully connected to the RDS database across the peering connection.
FYI, the DNS name of the database resolved to 10.0.2.40 (which is in the CIDR range of the us-west-1 VPC). This DNS resolution worked from both VPCs.
In summary, the important bits are:
Establish a 2-way peering connection
Configure the security group on the RDS instance to permit inbound connections from the CIDR of the peered VPC
No need to make the database publicly accessible

What are the security group rules for Amazon RDS dbinstance and EC2 instance over the different VPCs with VPC Peering?

What security group rules should I set for my db instance and my EC2 instance for accessing DB instance from my EC2 instance?
Both are in different VPCs and I used VPC Peering between them.
I did following configuration:
I created two VPC's
One is with public subnet and another is with private subnet
Launch EC2 web instance with public VPC and MySQL db instance with private subnet
Set VPC peering between them and they both have different security groups
Created a NAT Gateway in public subnet
So, how should I set both security group rules for establishing connections between them?
You should configure:
A security group on the Amazon EC2 instance (App-SG) that permits access to the instance/application as desired
A security group on the Amazon RDS DB instance (DB-SG) that permits inbound access on port 3306 for App-SG
That is, DB-SG should specifically refer to App-SG in the inbound rules.
When connecting from the EC2 to the database, make sure you are using the DNS Name of the RDS database. This should resolve to a private IP address.
The NAT Gateway is not required for the above connection.

Unable to access amazon RDS mysql instance from lightsail instance

I am new to AWS and not a network admin, mere a developer, and need your help.
I am unable to connect to my aws RDS (mysql) from my lightsail ubuntu instance. when trying to connect, it just wait for a minute and then fails.
I am unable to ping my RDS either.
here is the setup
the lightsail instance has vpc peering enabled in lon-zone-A
I have created a mysql RDS instance in aws and used default vpc peering. mysql is restricted to VPC and using default security group which has a rule for inbound - All traffic for default security group source
the default VPC have 2 subnets in CIDR 172.31.16.0/20 and 172.31.0.0/16 for two availability zone A and B.
In route table of the subnet, i have
172.26.0.0/16 as destination and target to vpc peering which further has
Requester VPC CIDRs 172.26.0.0/16
Accepter VPC CIDRs 172.31.0.0/16
My lightsail instance has private IP 172.26.15.xxx and in lon-Zone-A
When i ping my mysql intance, i get ip 172.31.10.9
command using to connect mysql -h xxxxxx.xxxxx.eu-west-2.rds.amazonaws.com -P 3306 -u db_master_username -p
To enable access from AWS Lightsail to AWS RDS you can accomplish in two separate ways:
Method 1.
Make RDS publicly accessible.
In RDS pick you instance and click 'Modify'. In section 'Network & Security' choose 'Publicly accessible' to Yes. Apply settings and wait until they are effective. Your RDS has public IP now.
Add your Lightsail public IP to the RDS security group inbound traffic.
Use CIDR: x.x.x.x/32 where x.x.x.x is your Lightsail instance public IP.
Method 2. (better, RDS with no public IP)
Make sure you Lightsail instance is in the same Availability Zone as RDS.
Set up VPC peering beetween Lightsail VPC and Amazon VPC.
Add your Lightsail local IP to the RDS security group inbound traffic.
I managed to solve. it.
I had to add my lightsail instance IP CIDR in the RDS inbound rule as mysql/aurora TCP allowed traffic.
:-)