BẢO MẬT KHI TRUY CẬP CÁC DỊCH VỤ CỦA AWS TỪ ỨNG DỤNG CHẠY TRÊN AMAZON EC2

05/03/2021 158
T3. Aws 02
CODEWELL

Nếu dự án của bạn đang phát triển ứng dụng triển khai trên Amazon EC2, có liên kết tới các dịch vụ khác của AWS hay sử dụng AWS SDK để phát triển các tính năng, và bạn muốn chỉ có những tài khoản mà mình cho phép mới có thể truy cập hoặc sử dụng tài nguyên chỉ định thì sẽ có 2 cách sau để giải quyết:

  • Cách 1: Sử dụng Access Key và Secret Access Key
  • Cách 2: Sử dụng IAM Role

Trong bài viết này, CO-WELL Asia sẽ hướng dẫn chi tiết cho bạn về hai cách thức này nhé!

 

1. Sử dụng Access Key và Secret Access Key

1.1. Access Key và Secret Access Key là gì?

Access Key và Secret Access Key là một phương thức xác thực trước khi chương trình của ta có thể truy cập tới các dịch vụ của AWS.

 

1.2. Làm thế nào để ta có thể lấy được Access Key và Secret Access Key?

Mở IAM Console → Users → Add user → Tạo một “Programmatic access” user với quyền thích hợp → Download file có thông tin key dưới dạng csv

 

a 1

 

1.3. Cách sử dụng Access Key và Secret Access Key

Tùy thuộc vào platform của ứng dụng mà ta sử dụng sẽ có cách sử dụng key khác nhau. Có một số platform như Laravel sẽ hỗ trợ khai báo key trong file .env, một số thì không hỗ trợ mà chúng ta sẽ phải khai báo trong source code.

Với platform hỗ trợ khai báo key trong file .env, trước tiên ta cần access vào EC2, sau đó ta sẽ lấy thông tin Access Key và Secret Access Key trong file credential đã download trước đó và khai báo trong file .env như hình.

 

b 1

 

Hay khai báo client khi sử dụng SDK:

c

2. Cách sử dụng IAM Role

2.1. IAM Role là gì?

IAM Role là một tập các quyền mà người dùng sử dụng để truy cập các tài nguyên AWS mà mình cần. Tuy nhiên, bạn không đăng nhập vào role, role không có password or access keys mà bạn có thể switch sang role sau khi đăng nhập bằng user của bạn. Có thể hiểu role là một tài khoản với sự uỷ nhiệm (Credentials) tạm thời để giải quyết những công việc khác nhau với vai trò khác nhau.

2.2. Cách sử dụng IAM Role:

  • Đầu tiên, chúng ta tạo role cho EC2 với quyền tương ứng bằng cách:
    Mở IAM Console→ Roles → Create role → AWS Service: EC2 → Chọn policy → Nhập tên, mô tả của role

 

d

 

  • Tiếp theo, gắn role vừa tạo với EC2.
    Mở EC2 Console→ Running instances → Chọn EC2 instance tương ứng → Actions → Instance Settings → Attach/Replace IAM Role → Chọn role vừa tạo và attach

 

e

Chú ý: Mỗi EC2 instance chỉ được gắn với một role duy nhất.

 

3. So sánh 2 cách sử dụng

Hãy cùng nhìn lại 2 cách thức kia một chút. Có thể thấy rằng việc sử dụng role gắn với EC2 sẽ đơn giản hơn so với sử dụng key. Hơn nữa, khi dùng key, nếu như chẳng may key lọt vào tay người khác thì người này hoàn toàn có thể sử dụng chúng vào mục đích không tốt để phá hoại hoặc đánh cắp thông tin. Ví dụ như dùng key để tạo ra hàng loạt tài nguyên có chi phí lớn, hay truy cập vào các dịch vụ lưu trữ để đánh cắp những thông tin.

Vì vậy, AWS khuyến nghị người dùng nên sử dụng IAM Role thay thế cho key để gọi các dịch vụ khác của AWS từ EC2.

Với môi trường dev trên local, nếu muốn liên kết với các dịch vụ của AWS hay sử dụng SDK thì ta chỉ có cách duy nhất là sử dụng key. Và cho dù vậy thì chúng ta cũng cần phải giới hạn việc này.

Khi sử dụng key cho môi trường dev ở local, bạn cần chú ý giới hạn quyền đầy đủ tối thiểu, không nên cấp quyền vượt quá yêu cầu của ứng dụng; và chỉ cho phép thao tác từ IP của công ty (Từ chối tất cả action được thao tác từ bên ngoài công ty)

f

4. Cách xử lý khi bị lộ key

Nếu như chẳng may bị lộ key và phát hiện có sự truy cập trái phép đến AWS của chúng ta thì phải làm như thế nào?
Việc đầu tiên chính là kiểm tra xem đối tượng nào đang truy cập trái phép bằng cách tra lại lịch sử truy cập bằng CloudTrail (Trong trường hợp có nhiều key), sau đó ngăn chặn ngay sự truy cập trái phép đó bằng 1 trong 2 cách:

  • Xóa user tương ứng (Mở IAM Console→ Users → Chọn user tương ứng → Delete user)
  • Deactivate key (Mở IAM Console→ Users → Click vào user tương ứng → Mở tab Security credentials → Make inactive key)

 

g

 

Sau khi đã ngăn chặn sự truy cập trái phép đó, chúng ta sẽ phải kiểm tra thiệt hại, resource có bị tạo thêm hay mất đi hay không? Nhanh chóng xóa bỏ những resource tạo thêm và liên lạc với AWS qua Support Center, mô tả tình huống để nhận được sự hỗ trợ kịp thời (Có thể sẽ không bị mất phí với những resource bị kẻ xấu tạo thêm).

 

5. Lời kết

Hy vọng với chia sẻ của mình, mọi người đang và sẽ làm việc trong các dự án liên quan đến AWS sẽ có thêm những kiến thức hữu ích, nâng cao tính bảo mật cho dự án, nhận được sự tin tưởng từ khách hàng cũng như giảm thiểu các thiệt hại không đáng có cho công ty!

Trần Hữu Tài – CO-WELL Asia