How to connect my Amazon Workspace with AWS RDS? - amazon-web-services

I have an Amazon Workspace running inside the Private Subnet. In the same subnets i have launched my RDS. I have give access to the Workspace security group to access the RDS inside RDS security group.
Even after all this configuration, i'm getting timedout error whenver i'm trying to connect to RDS from the workspace.

You must allow outbound access for the specific port on the security group attached to the WorkSpace and inbound access from the WorkSpace on the RDS security group (you can reference the security group IDs instead of ip-addresses).
Take also a look on the AWS Reachability Analyzer to check if everything should work. (use the network interface of your WorkSpace)
https://docs.aws.amazon.com/vpc/latest/reachability/getting-started.html

Related

How to connect my AppRunner instance to RDS?

I've configured RDS with the suggested defaults and no public access.
Then I put my AppRunner instance in the same security group as RDS by creating a VPC connector. I can see the same VPC and subnets listed on both sides yet I somehow don't have a connection to RDS still (my AppRunner instance can't connect). What am I doing wrong? Isn't it enough to put them in the same security group and VPC?

Accessing RDS from Lambda

RDS Database details:
I have an publicly accessible RDS database which is restricted to be accessible to only specific IP address.
The RDS have 2 security groups attached to the RDS:
1st security group allows a specific IP address to access it.
2nd security group allows multiple specific IP addresses to access
it.
Note: I know I can just keep a single security group for this purpose.
This RDS database have the default VPC and 3 public subnets. All these subnets have 2 routes in route tables:
Destination: default vpc's cidr range and Target: local
Destination: 0.0.0.0/0 and Target: internet gateway
Lambda function details:
I have a lambda function, which does not have any vpc configured.
I am trying to access the RDS database from code in the lambda function. Since lambda doesn't have any specific IP address, I couldn't add inbound rule in RDS's security group to allow it. When I simply add inbound rule in RDS's security group to allow access from all IPs then my lambda function code is able to connect to RDS database and work with it.
I wouldn't want my RDS database to be allowed access from anywhere on the internet, what configuration/settings do I need to make to be able to access RDS from lambda.
I also tried configuring the lambda function to be in same vpc and same subnets as that of for RDS instance; but I haven't been successful in making a connection to the RDS database.
Best in this case is to use the same VPC for your lambda as the RDS instance. This is cheaper and is more secure. You don't have to setup a internet gateway and elastic IP. And you can only access your RDS instance from within the VPC.
You can enable this using Lambda management console. Select Lambda function which need access to RDS instance and then go to Configuration -> Advanced settings and select the VPC (which is your RDS instance is in) you need it to access.
For instances attached to the same security group—make the security group the source for the inbound rule and the destination for the outbound rule.
For instances in different security groups—make sure that both security groups allow access to one another.
If this is still not working check the error message that is returned when setting up the connection with RDS. Timeout means issue with network.
find out more here https://aws.amazon.com/premiumsupport/knowledge-center/connect-lambda-to-an-rds-instance/

AWS Security Group Puzzle

I have an AWS Security group that I use for my RDS Instances.
I also have an AWS Security group that I use for my EC2 Instances.
I have it set up so the security group for the EC2 instances is used as Ingress for the security group I use for the RDS instances.
From my EC2 instances, I can use mysql commands to access the RDS instances without a problem.
However, if I try to use a PHP Script with MySQLi to access the RDS instance, it fails to connect.
If I add the actual AWS IP address of the EC2 instance as Ingress to the RDS Security group, then the PHP script using MySQLi works fine.
Any idea why this is the case?
More details:
Both RDS and EC2 security groups are on the same VPC.
Software is connecting fine when the EC2 private address is added with no other changes.
This is why the behavior is puzzling
The typical security configuration would be:
A Security Group on the Amazon EC2 instance (App-SG) with desired Inbound permissions and default 'Allow All' Outbound permissions
A Security Group on the Amazon RDS database (DB-SG) that permits inbound access on port 3306 (MySQL) from App-SG
That is, the DB-SG specifically references App-SG in its Inbound rules.
The software on the EC2 instance should refer to the RDS database via its DNS Name, which will resolve to a private IP address (assuming that the EC2 instance and RDS database are in the same VPC).
If your configuration works with the mysql command on the EC2 instance, then it should also work for MySQLi access since they would both be connecting to the same destination DNS name on the same port (3306).

Cannot connect to rds from ec2

I cannot connect to my rds instance from ec2 instance, the error I am getting is connect: connection timed out. However, I am able to connect from mysql workbench running on my local machine.
RDS instance set to publicly available
RDS instance and ec2 instance are in the same security group
Security group when configured to allow connections from anywhere still produces same error
traceroute outputs *** for all when run from ec2 to rds, however provides normal output when run from local machine provides output showing that it's not blocked by firewall
RDS instance and ec2 instance are in same availability zone, not multi-zone rds
Opening the connection using the following golang:
conn, err = sql.Open("mysql", fmt.Sprintf("%s:%s#tcp(%s:%s)/%s", os.Getenv("db_user"), os.Getenv("db_pass"), os.Getenv("db_endpoint"), os.Getenv("db_port"), os.Getenv("db_name")) + "?parseTime=true")
It seems like a firewall issue but changing security group permissions is not helping.
Putting resources in the same security group does not grant access between those resources. This is because the security group rules are applied to each resource individually. Therefore, the security group would need to "allow access from itself" to permit the connection. However, since your RDS database is configured for public access, this won't actually work because the RDS database will have a public IP address.
Given that your database is publicly accessible, its DNS name will resolve to a public IP address. Therefore, your configuration should be:
Create a security group for the Amazon EC2 instance (App-SG) that permits appropriate Inbound permissions (eg HTTP, SSH) and has default Outbound rules (Allow All)
Create a security group for the Amazon RDS database (DB-SG) that permits inbound access from the EC2 instance's public IP address
If, however, the RDS database was not configured for public access, you would configure the security group to permit inbound access from App-SG. That is, the DG-SG would specifically refer to App-SG.

Cannot connect Lambda to ElastiCache Redis cluster

I am having issues connecting Elasticache from a Lambda function
I have done the following:
Created a new security group
Assign security group to Lambda and assigned two private subnets of same VPC
Created an Elasticache redis cluster and assigned the above security group
Created a NAT gateway address, assigned and ElasticIP (for the above VPC)
Internet works and I verified this by opening stackoverflow.com URL. However Elasticache auto discovery times out. Is there any additional configuration that needs to be done?
Update
I added inbound rule for Security Group to port 6379 and now still times out.
You will need to attach an IAM policy to the Lambda execution role that grants it the appropriate access permission to ElastiCache. If you are restricting access you will also need to check the VPC setting of the Lambda function and make sure it has the ability to access the subnet the EC cluster is located.
Take a look at the following article for specifics:
https://docs.aws.amazon.com/lambda/latest/dg/services-elasticache-tutorial.html