VPC Endpoints
VPC Endpoint là một dịch vụ AWS cho phép truy cập dịch vụ AWS mà không cần đi qua internet hoặc điểm cuối NAT. Nó cho phép truy cập trực tiếp vào dịch vụ mà không cần thông qua internet, điều này giúp tăng cường tính bảo mật và hiệu suất.
Thay vì truy cập vào các dịch vụ AWS thông qua internet và điểm cuối NAT, các yêu cầu của VPC Endpoint được gửi trực tiếp từ VPC đến dịch vụ AWS. Điều này giảm thiểu độ trễ và phụ thuộc vào mạng internet, giảm thiểu chi phí mạng và tăng tính bảo mật.
VPC Endpoint có thể được sử dụng để truy cập nhiều dịch vụ AWS khác nhau, ví dụ như Amazon S3, Amazon DynamoDB, Amazon Kinesis và nhiều hơn nữa.
VPC Endpoints (AWS PrivateLink)
VPC Endpoints là một tính năng của AWS PrivateLink cho phép kết nối đến các dịch vụ AWS một cách riêng tư thông qua mạng nội bộ, thay vì sử dụng Internet công cộng. Với VPC Endpoints, bạn không cần phải sử dụng Internet Gateway (IGW), NAT Gateway hay các phương tiện kết nối khác để truy cập các dịch vụ này, giúp tăng cường tính bảo mật và giảm thiểu chi phí. VPC Endpoints được thiết kế để hoạt động với tính đảm bảo tính sẵn sàng cao, đồng thời cung cấp khả năng mở rộng ngang hàng.
Trong trường hợp xảy ra sự cố, người dùng cần kiểm tra các cài đặt DNS và bảng định tuyến của VPC để đảm bảo VPC Endpoint hoạt động đúng cách.
Types of Endpoints
VPC Endpoints có hai loại:
- Interface Endpoints (sử dụng PrivateLink): Đây là loại Endpoint sử dụng một ENI (Elastic Network Interface) với một địa chỉ IP riêng để kết nối với dịch vụ AWS. Loại này hỗ trợ hầu hết các dịch vụ của AWS và có tính phí theo giờ sử dụng và theo lưu lượng dữ liệu xử lý.
Gateway Endpoints: Đây là loại Endpoint sử dụng một Gateway để kết nối với dịch vụ AWS. Loại này hỗ trợ S3 và DynamoDB và không sử dụng Security Groups. Loại Endpoint này được cung cấp miễn phí.
Cả hai loại Endpoint này đều cho phép kết nối với dịch vụ AWS bằng mạng riêng tư thay vì thông qua internet công khai. Điều này giúp giảm thiểu rủi ro bảo mật và tăng tốc độ kết nối. Trong trường hợp xảy ra sự cố, người dùng cần kiểm tra cài đặt DNS Resolution và bảng định tuyến trong VPC của mình để khắc phục.
Gateway or Interface Endpoint for S3?
Để truy cập vào Amazon S3 thông qua mạng riêng ảo (VPC), bạn có thể sử dụng Endpoint Gateway hoặc Interface Endpoint. Tuy nhiên, trong các kỳ thi, Endpoint Gateway thường được ưu tiên hơn bởi nó miễn phí và đơn giản hơn Interface Endpoint.
Endpoint Gateway sử dụng một tài nguyên route table trong VPC để xác định đích đến của traffic được gửi đến Amazon S3. Nó không sử dụng bất kỳ security group nào, và cũng không cho phép bạn giới hạn quyền truy cập vào Amazon S3. Do đó, nếu bạn cần kiểm soát chặt chẽ quyền truy cập vào Amazon S3, bạn nên sử dụng Interface Endpoint thay vì Endpoint Gateway.
Interface Endpoint sử dụng một Elastic Network Interface (ENI) để tạo một điểm vào cho Amazon S3 trong VPC của bạn. Nó cho phép bạn sử dụng security group để kiểm soát quyền truy cập vào Amazon S3 và có thể sử dụng với nhiều loại dịch vụ của AWS khác nhau. Interface Endpoint có phí sử dụng theo giờ và theo lưu lượng dữ liệu xử lý. Nếu bạn cần truy cập vào Amazon S3 từ on-premises hoặc từ một VPC khác hoặc một khu vực khác, Interface Endpoint là giải pháp tốt hơn.
VPC Endpoints Hands On
Đầu tiên mình sẽ tắt 2 instance không cần thiết như hình và tại Privatelnstance mình sẽ tiến hành thiết lập IAM role cho nó.
Bấm vào Create new IAM role.
Tiếp tục bấm vào Create role.
Tại Select type of trusted entity chọn AWS service, common use cases chọn EC2 và bấm Next: Pereissions.
Bạn hãy lọc policy là s3 và tìm đến AmazonS3ReadOnlvAccess, bấm Next: Tags.
Đi tiếp tới phần review bằng cách bấm vào Next: Review.
Đặt tên cho role và bấm vào Create role.
Thông báo The role DemoRoleEC2-S3ReadOnly has been created cho biết bạn đã tạo role thành công.
Hãy tải lại IAM role và chọn DemoRoleEC2-S3ReadOnly vừa tạo xong.
Thông báo “Successfully attached DemoRoleEC2-53ReadOnly to instance i-0915c87058589527b” cho biết bạn đã thiết lập xong role. Hãy xác nhận việc tạo role thành công bằng cách bấm vào Privatelnstance (1), qua thẻ Security (2) bạn sẽ nhìn thấy DemoRoleEC2-S3ReadOnly (3) đã xuất hiện ở đây.
Bây giờ bạn vào BastionHost và thử list s3 và bạn nhận được kết quả là thành công với 4 bucket. Lý do đơn giản là vì hiện tại Privatelnstance của bạn đang đi được internet (bằng chứng là lệnh curl google thành công).
Giờ chúng ta vào route table PrivateRouteTable (1) và bạn để ý ở (2) đang có 1 default route chúng ta đã tạo ở bài trước đi qua 1 nat gateway. Bây giờ chúng ta hãy bỏ route này bằng cách vào Edit routes (3).
Bạn hãy xoá defaul route đi và lưu lại.
Kết quả bây giờ bạn không thể list được bucket và lệnh curl thất bại.
Mình sẽ giải thích các tuỳ chọn tại Service category như sau:
- Các dịch vụ AWS (AWS services) là các dịch vụ mà AWS cung cấp và hỗ trợ kết nối qua VPC Endpoint bằng AWS PrivateLink.
- PrivateLink Ready partner services là các dịch vụ được cung cấp bởi các đối tác AWS được phép tích hợp với PrivateLink và có sẵn để sử dụng trong tài khoản AWS của bạn.
- AWS Marketplace services là các dịch vụ được cung cấp bởi các bên thứ ba trên AWS Marketplace và được hỗ trợ kết nối qua VPC Endpoint bằng AWS PrivateLink.
- Other endpoint services là các dịch vụ mà bạn tự xây dựng hoặc sử dụng từ bên thứ ba và được hỗ trợ kết nối qua VPC Endpoint bằng AWS PrivateLink.
Mình sẽ lựa chọn service endpoint là s3, lựa chọn type là Gateway và lựa chọn VPC mà endpoint sẽ triển khai.
Trong quá trình cấu hình VPC Endpoint, bạn có thể chọn PrivateRouteTable, để chỉ định các đích mà các yêu cầu được gửi đến thông qua endpoint. Với cấu hình này, bạn sẽ tạo ra một bản sao của các route trong bảng định tuyến mà nó được gắn liền, tuy nhiên, các route này sẽ chỉ định một IP address nhất định (Endpoint ID). Bằng cách chỉ định PrivateRouteTable cho endpoint, các yêu cầu đến các dịch vụ AWS thông qua endpoint sẽ được định tuyến qua một subnet và Internet Gateway sẽ không được sử dụng.
Khi các yêu cầu được gửi đến endpoint, chúng sẽ đi đến subnet được chỉ định trong PrivateRouteTable, sau đó đi đến endpoint và được chuyển tiếp đến dịch vụ AWS tương ứng. Việc sử dụng PrivateRouteTable giúp đảm bảo rằng lưu lượng được truyền qua các endpoint không đi qua Internet, do đó tăng tính bảo mật và giảm độ trễ.
Để demo bạn có thể policy là full access.
Thông báo cho biết bạn đã tạo thành công endpoint. Mình có một số lưu ý sau:
Trong AWS VPC, mỗi subnet phải được liên kết với một bảng định tuyến (route table). Mặc định, mỗi VPC có một bảng định tuyến chính (main route table) và tất cả các subnet trong VPC đều được liên kết với bảng định tuyến này.
Khi tạo một endpoint VPC, bạn có thể chọn một hoặc nhiều subnet để liên kết với nó. Bạn cũng phải chọn một bảng định tuyến để gán cho endpoint, và đó sẽ là bảng định tuyến mà các subnet được liên kết với endpoint sẽ sử dụng.
Trường “Main” trong bảng định tuyến có nghĩa là đây là bảng định tuyến chính cho VPC, và tất cả các subnet trong VPC mặc định sử dụng bảng định tuyến này. Khi trường “Main” được đặt là “no” trong bảng định tuyến của endpoint, có nghĩa là bảng định tuyến đó không phải là bảng định tuyến chính cho VPC và không được sử dụng mặc định cho các subnet trong VPC. Thay vào đó, các subnet được liên kết với endpoint sẽ sử dụng bảng định tuyến được chỉ định để điều hướng lưu lượng đến các dịch vụ AWS.
Và bây giờ bạn hãy vào Privatelnstance tiến hành các thao tác như lúc đầu. Bạn sẽ nhận được kết quả curl thất bại nhưng bạn vẫn có thể list được bucket.