Quay lại

Kết Nối AWS Lambda với Amazon RDS: Hướng Dẫn Chi Tiết Chuyên mục Devops    2025-08-08    1 Lượt xem    0 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Tối ưu và Bảo mật kết nối với RDS Proxy

Khi làm việc với kiến trúc serverless trên AWS, việc kết nối hàm Lambda với cơ sở dữ liệu Amazon RDS là một tác vụ cơ bản nhưng cần được cấu hình đúng cách. Bài viết này sẽ hướng dẫn bạn các bước thiết lập chi tiết, từ cách kết nối trực tiếp đến việc sử dụng RDS Proxy để tối ưu và tăng cường bảo mật.

1. Kết Nối Trực Tiếp: Đặt Lambda trong VPC

Để một hàm Lambda có thể kết nối với cơ sở dữ liệu RDS nằm trong mạng riêng (VPC), cả hai tài nguyên này phải cùng nằm trong một VPC và được cấu hình Security Group (SG) để cho phép lưu lượng truy cập.

Các bước cấu hình chi tiết:

  1. Cấu hình Security Group của RDS (Ví dụ: rds-sg)

    • Truy cập AWS Console, vào mục VPC > Security Groups.

    • Tìm SG của RDS Instance của bạn.

    • Chọn tab Inbound rules và nhấp vào Edit inbound rules.

    • Thêm một quy tắc mới:

      • Type (Loại): Chọn PostgreSQL (hoặc MySQL tùy theo DB của bạn).

      • Port range (Dải cổng): 5432 (hoặc 3306).

      • Source (Nguồn): Chọn Security Group của Lambda (ví dụ: lambda-sg). Khi gõ, hệ thống sẽ tự động gợi ý.

    • Điều này có nghĩa là, rds-sg sẽ cho phép mọi yêu cầu đến từ lambda-sg được kết nối trên cổng của cơ sở dữ liệu.

  2. Cấu hình Security Group của Lambda (Ví dụ: lambda-sg)

    • Vào VPC > Security Groups.

    • Tìm SG của Lambda Function của bạn.

    • Chọn tab Outbound rules và nhấp vào Edit outbound rules.

    • Thêm một quy tắc mới:

      • Type (Loại): Chọn PostgreSQL (hoặc MySQL).

      • Port range (Dải cổng): 5432 (hoặc 3306).

      • Destination (Đích): Chọn Security Group của RDS (ví dụ: rds-sg).

    • Quy tắc này cho phép Lambda gửi lưu lượng truy cập ra ngoài đến các tài nguyên thuộc rds-sg.

  3. Cấu hình VPC cho Lambda Function

    • Bước 3.1: Mở cấu hình

      • Trên giao diện của hàm Lambda, chọn tab Configuration và vào mục VPC.

      • Nhấp vào Edit.

    • Bước 3.2: Chọn VPC

      • Trong trường VPC, chọn cùng VPC mà RDS của bạn đang hoạt động.

    • Bước 3.3: Chọn Subnets

      • Trong trường Subnets, chọn ít nhất hai private subnets. Việc này giúp đảm bảo Lambda có đường đi đến RDS nhưng không có đường truy cập trực tiếp ra internet, tăng cường bảo mật.

    • Bước 3.4: Chọn Security Group

      • Trong trường Security groups, chọn Security Group của Lambda (lambda-sg) mà bạn đã cấu hình ở trên.

    • Bước 3.5: Lưu lại

      • Nhấp vào Save để lưu lại các thay đổi.

TẠO policy để có thể tạo VPC cho lambda

LambdaVPCNetworkingPolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        }
    ]
}

2. Sử Dụng RDS Proxy: Tối Ưu và An Toàn Hơn

Để tối ưu hóa quản lý kết nối và tăng cường bảo mật, bạn nên sử dụng RDS Proxy. Proxy sẽ đóng vai trò trung gian, quản lý pool kết nối đến DB và hỗ trợ xác thực bằng IAM.

Cấu hình Permissions với IAM Policy:

Khi sử dụng RDS Proxy, việc kết nối của Lambda cần được xác thực bằng IAM. IAM Role của Lambda phải được cấp quyền để "kết nối" đến Proxy.

  1. Tạo IAM Policy để cấp quyền kết nối

    • Vào IAM > Policies > Create policy.

    • Chọn tab JSON và dán đoạn mã sau vào. Đây là chính sách cho phép kết nối đến một hoặc nhiều RDS Proxy.

    JSON
     
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "rds-db:connect",
                "Resource": [
                    "arn:aws:rds-db:ap-northeast-1:123456789012:dbuser:db-proxy-example/app_user"
                ]
            }
        ]
    }
    • Giải thích chi tiết:

      • Action: "rds-db:connect": Là hành động IAM cho phép kết nối đến cơ sở dữ liệu thông qua Proxy.

      • Resource: Đây là ARN của tài nguyên Proxy. Lưu ý, bạn cần thay thế các thông tin sau:

        • ap-northeast-1: Vùng của Proxy.

        • 123456789012: ID tài khoản của bạn.

        • dbuser:db-proxy-example/app_user: Tên proxy và tên người dùng DB mà bạn sẽ sử dụng.

    • Đặt tên cho chính sách (ví dụ: RDS-Proxy-Connect-Policy) và tạo.

  2. Đính kèm Policy vào IAM Role của Lambda

    • Vào IAM > Roles.

    • Tìm và chọn IAM Role của hàm Lambda của bạn.

    • Trong tab Permissions, nhấp vào Add permissions > Attach policies.

    • Tìm và chọn RDS-Proxy-Connect-Policy đã tạo, sau đó nhấp vào Attach policy.

Code ví dụ (Python với RDS Proxy):

Khi sử dụng Proxy, code của bạn sẽ kết nối đến endpoint của Proxy, không phải của DB.

import os
import psycopg2

PROXY_ENDPOINT = os.environ['PROXY_ENDPOINT']
DB_NAME = os.environ['DB_NAME']
DB_USER = os.environ['DB_USER']
DB_PASSWORD = os.environ['DB_PASSWORD']

def lambda_handler(event, context):
    conn = None
    try:
        conn = psycopg2.connect(
            host=PROXY_ENDPOINT,  # Sử dụng endpoint của Proxy
            dbname=DB_NAME,
            user=DB_USER,
            password=DB_PASSWORD
        )
        print("Kết nối thành công qua RDS Proxy!")
        # ... Thực hiện các tác vụ với DB
    except Exception as e:
        print(f"Lỗi: {e}")
        return {'statusCode': 500, 'body': 'Lỗi kết nối.'}
    finally:
        if conn:
            conn.close()

 

Việc sử dụng RDS Proxy không chỉ giúp tối ưu hóa kết nối mà còn là một phương pháp bảo mật hiệu quả, tách biệt quyền truy cập của ứng dụng và DB.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday