Build GenAI Applications Using Amazon Bedrock With AWS PrivateLink To Protect Your Data Privacy

Build GenAI Applications Using Amazon Bedrock With AWS PrivateLink To Protect Your Data Privacy

avatar

Minh Huynh

2025.05.11

Xây dựng ứng dụng GenAI bằng Amazon Bedrock với AWS PrivateLink để bảo vệ quyền riêng tư dữ liệu của bạn.

Lab Introduction

  • AWS experience: Beginner
  • Time to complete: 35 minutes
  • AWS Region: US East (N. Virginia) us-east-1
  • Cost to complete: Free Tier
  • Services used: Amazon Bedrock, Amazon VPC, Lambda, AWS PrivateLink, IAM

Amazon Bedrock và quyền riêng tư dữ liệu trong AI tạo sinh

Data Privacy

Trong bối cảnh phân tích dữ liệu và học máy, quyền riêng tư dữ liệu (Data Privacy) là yếu tố cực kỳ quan trọng, đặc biệt khi công nghệ AI tạo sinh (Generative AI) đang phát triển mạnh mẽ. Nếu không có biện pháp bảo mật đúng cách, các công cụ AI tạo sinh rất dễ bị đánh cắp dữ liệu, dẫn đến việc tiết lộ thông tin nhạy cảm hoặc vi phạm quyền riêng tư.

Amazon Bedrock là một dịch vụ được quản lý toàn diện, hỗ trợ bạn xây dựng ứng dụng AI tạo sinh mà vẫn đảm bảo tuân thủ các tiêu chuẩn bảo mật như GDPRHIPAA.

Tính năng bảo mật chính của Amazon Bedrock

  • Dữ liệu người dùng (nội dung) như prompt, dữ liệu tinh chỉnh, dữ liệu vector với RAG... không bị chia sẻ với bên thứ ba, bao gồm cả AWS.
  • Có thể sử dụng AWS PrivateLink để kết nối riêng tư giữa các mô hình nền tảng (Foundation Models - FM) và mạng nội bộ/VPC, tránh truyền dữ liệu qua Internet công cộng.
  • Tự động phát hiện lạm dụng: Amazon Bedrock tích hợp công nghệ phát hiện hành vi sử dụng sai (abuse detection), giúp xác định và xử lý tự động các hành vi vi phạm chính sách của AWS hoặc của nhà cung cấp mô hình.

Architecture Diagram

  1. Người dùng gửi yêu cầu đến ứng dụng GenAI (Lambda function) qua HTTPS.
  2. Ứng dụng xử lý trong VPC riêng, không đi qua Internet. Ứng dụng GenAI Application chạy bên trong VPC của khách hàng, được bảo vệ bởi Security Group.
  3. Kết nối đến Bedrock được thực hiện riêng tư qua AWS PrivateLink, một kết nối riêng, không đi qua Internet công cộng, giúp bảo mật dữ liệu truyền đi và tránh rủi ro rò rỉ thông tin.
  4. Dịch vụ Bedrock xử lý yêu cầu mà không chia sẻ dữ liệu với bên thứ ba.

1. Create Lambda Functions as Part of Your GenAI Application Interacting With Foundation Models via Bedrock

Tôi sử dụng Foundation Models Claude 3.5 Sonnet của nhà Anthropic, như một ứng dụng GenAI đơn giản hóa, trong đó Lambda tương tác với Amazon Bedrock để tạo văn bản, trả lời các câu hỏi từ người dùng.

1.1 Access model từ Bedrock

Ở mục Model Access -> chọn nút Modify model access -> Tick vào model Claude 3.5 Sonnet -> Nhấn Submit.

Bạn sẽ có quyền sử dụng model khi trạng thái chuyển sang "Access granted" màu xanh lá.

1.2 Viết code Lambda

Tạo 1 lambda function tên PrivateLinkBedrock, môi trường runtime Python 3.13

Copy đoạn code boto3 hỏi đáp chatbot đơn giản bên dưới đã được chuẩn bị sẵn vào Lambda function -> Nhấn nút Deploy.

(Nếu bạn sử dụng model khác để thực hành, thay đổi ModelID cho phù hợp)

import boto3
import json

def lambda_handler(event, context):
    # Câu hỏi người dùng truyền vào
    user_question = event.get('question', 'Explain generative AI in simple terms.')

    # Khởi tạo client Bedrock Runtime
    client = boto3.client('bedrock-runtime', region_name='us-east-1')

    # Tạo prompt theo định dạng Anthropic Claude
    body = {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 500,
        "temperature": 0.7,
        "messages": [
            {
                "role": "user",
                "content": user_question
            }
        ]
    }

    # Gọi model Claude 3.5 Sonnet
    response = client.invoke_model(
        modelId="anthropic.claude-3-5-sonnet-20240620-v1:0",
        body=json.dumps(body),
        contentType="application/json",
        accept="application/json"
    )

    # Parse kết quả
    result = json.loads(response['body'].read())
    answer = result['content'][0]['text']

    return {
        'statusCode': 200,
        'body': answer
    }

Tiếp theo, cập nhật role Lambda function cho phép gọi đến Bedrock. Vào tab Configuration -> Permission -> Click Role name.

Chọn Attach policies -> Thêm quyền AmazonBedrockFullAccess.

2. Create VPC with Private subnets

Truy cập dịch vụ VPC, chọn Create VPC. Chọn option VPC and more

  • Nhập tên: Lambda-Bedrock-PrivateLink
  • IPv4 CIDR block: 10.0.0.0/16
  • Tenancy: Default
  • Number of AZs: 2
  • Number of public subnets: 0
  • Number of private subnets: 2
  • NAT gateway: None
  • VPC endpoint: None

Nhấn Create VPC.

3. Create a Security Group in the VPC

Tiếp theo, tạo 1 security group bao gồm các thông tin:

  • Security group name: Lambda-Bedrock-SG
  • Description: Allow all traffics request client from application
  • VPC: chọn vpc đã tạo trước đó (Lambda-Bedrock-PrivateLink)
  • Inbound rules: All traffic. Source: Anywhere/ 0.0.0.0/0
  • Outbound rules: All traffic/ 0.0.0.0/0

Nhấn Create security group.

Lưu ý: Khi triển khai thực tế, mọi người nên giới hạn traffic ở Inbound rules.

4. Connect Your Lambda Functions to Your VPC

  • Mặc định, AWS Lambda chạy trong VPC của dịch vụ Lambda, nơi có quyền truy cập Internet công cộng.
  • Nếu muốn kết nối Lambda với VPC riêng, hãy sử dụng Hyperplane ENI (Elastic Network Interface).
  • Hyperplane ENI hoạt động như một NAT, cho phép truyền dữ liệu từ VPC Lambda sang VPC của bạn.
  • Mỗi khi tạo hoặc cập nhật Lambda kết nối VPC, AWS sẽ tạo một Hyperplane ENI cho mỗi subnet được cấu hình.

4.1 Before connecting your Lambda function to your VPC, you need to give extra permission to the lambda function's execution role

  • Vào IAM role của Lambda function, thêm quyền AWSLambdaVPCAccessExecutionRole

4.2. Configure Lambda VPC access

Add the private subnets and security group to the Lambda function's VPC configuration.

Chọn tab Configuration -> Chọn mục VPC -> Chọn nút Edit.

Cấu hình như sau:

  • VPC: chọn VPC đã tạo trước đó (Lambda-Bedrock-PrivateLink).
  • Subnets: chọn 2 private subnet đã tạo trước đó.
  • Security groups: Chọn SG đã tạo trước đó.

Nhấn nút Save.

Bây giờ, Lambda function chạy trong Custom VPC, follow theo như kiến trúc ban đầu.

5. Create a Bedrock VPC Endpoint

Để kết nối VPC và Amazon Bedrock của bạn bằng AWS PrivateLink (Interface VPC endpoint).

Vào VPC -> Chọn Endpoint -> Create endpoint.

Nhập tên Endpoint: lambda-bedrock-endpoint. Chọn Bedrock VPC endpoint as "bedrock runtime".

Chọn VPC và private subnets đã tạo ở trên.

Control Bedrock VPC endpoint access via endpoint policy.

{
   "Statement": [
      {
         "Principal": "*",
         "Effect": "Allow",
         "Action": [
            "bedrock:InvokeModel",
            "bedrock:InvokeModelWithResponseStream"
         ],
         "Resource":"*"
      }
   ]
}

Cuối cùng là nhấn Create endpoint. Kết quả sau khi tạo thành công.

Truy cập Lambda function PrivateLinkBedrock, ở tab Test nhập thông tin như bên dưới:

  • Event name: TestEvent
  • Event json:
{
  "question": "AI là gì? giải thích ngắn gọn"
}

Nhấn nút SaveTest.

Check the response:

Clean up resources

  • Xóa VPC endpoint
  • Xóa VPC, Subnet, SG
  • Xóa Lambda function