Vai trò, thông tin xác thực tạm thời và SigV4

Sử dụng AWS Security dành cho Developer

Rahul Singh

Technical Product Manager

Chiếc key sống lâu hơn công việc

Để làm việc nhanh hơn, một key được tạo trong script và lưu trong tệp cấu hình.

Trong tệp, nó:

  • Không bao giờ xoay vòng
  • Không bao giờ bị thu hồi
  • Không bao giờ hết hạn

Một access key tỏa ra sáu vị trí lưu trữ, với trục thời gian bên phải cho thấy vẫn còn hiệu lực ở tháng mười tám

Sử dụng AWS Security dành cho Developer

Chiếc key sống lâu hơn công việc

Để làm việc nhanh hơn, một key được tạo trong script và lưu trong tệp cấu hình.

Trong tệp, nó:

  • Không bao giờ xoay vòng
  • Không bao giờ bị thu hồi
  • Không bao giờ hết hạn

 

Sau 18 tháng, nó vẫn còn hiệu lực

Một access key tỏa ra sáu vị trí lưu trữ, với trục thời gian bên phải cho thấy vẫn còn hiệu lực ở tháng mười tám

Sử dụng AWS Security dành cho Developer

Thông tin xác thực tự hết hạn

Đặt mặc định là có hạn dùng với AWS STS

  1. Yêu cầu một role, nhận thông tin xác thực có đồng hồ tích hợp

  2. Security Token Service (STS): có hạn dùng kèm, mặc định một giờ

Một ứng dụng gọi AssumeRole trên AWS STS, và STS trả về thông tin xác thực kèm đồng hồ tích hợp.

Sử dụng AWS Security dành cho Developer

Thông tin xác thực tự hết hạn

Đặt mặc định là có hạn dùng với AWS STS

  1. Yêu cầu một role, nhận thông tin xác thực có đồng hồ tích hợp

  2. Thông tin xác thực tạm thời bắt đầu bằng ASIA và kèm session token

  3. Security Token Service (STS): có hạn dùng kèm, mặc định một giờ

Một ứng dụng gọi AssumeRole trên AWS STS và nhận thông tin xác thực có đồng hồ tích hợp. Bên dưới là hai loại thông tin xác thực đặt cạnh nhau: key sống lâu bắt đầu bằng AKIA không có session token và không bao giờ hết hạn, và thông tin xác thực tạm thời bắt đầu bằng ASIA có session token và hết hạn sau một giờ.

Sử dụng AWS Security dành cho Developer

Thông tin xác thực tự hết hạn

Đặt mặc định là có hạn dùng với AWS STS

  1. Yêu cầu một role, nhận thông tin xác thực có đồng hồ tích hợp

  2. Thông tin xác thực tạm thời bắt đầu bằng ASIA và kèm session token

  3. Cùng lời gọi đó lúc đầu được chấp nhận, rồi không còn nữa

  4. Security Token Service (STS): có hạn dùng kèm, mặc định một giờ

Một ứng dụng gọi AssumeRole trên AWS STS và nhận thông tin xác thực có đồng hồ tích hợp. Bên dưới, một key sống lâu bắt đầu bằng AKIA không bao giờ hết hạn bên cạnh thông tin xác thực tạm thời bắt đầu bằng ASIA có session token và hết hạn sau một giờ. Bên dưới nữa, cùng lời gọi GetObject trả về 200 OK lúc 10 giờ và ExpiredToken lúc 11 giờ 05.

Sử dụng AWS Security dành cho Developer

Mã của bạn tìm chúng như thế nào

Kiểm tra chuỗi nhà cung cấp thông tin xác thực

  • AWS SDK, thư viện trong mã của bạn, sẽ thực hiện việc tìm kiếm
  • Danh sách cố định, kiểm tra theo thứ tự
  • Dừng ở kết quả khớp đầu tiên

Thứ tự tra cứu thông tin xác thực: một key truyền trong code bị gạch bỏ phía trên chuỗi, sau đó tìm kiếm lần lượt qua biến môi trường, tệp cấu hình và thông tin xác thực của container, dừng ở kết quả khớp đầu tiên và không bao giờ tới metadata của instance

Sử dụng AWS Security dành cho Developer

Mã của bạn tìm chúng như thế nào

Kiểm tra chuỗi nhà cung cấp thông tin xác thực

  • AWS SDK, thư viện trong mã của bạn, sẽ thực hiện việc tìm kiếm
  • Danh sách cố định, kiểm tra theo thứ tự
  • Dừng ở kết quả khớp đầu tiên

 

Các key hard-code được kiểm tra trước, vì vậy cần xóa chúng

Thứ tự tra cứu thông tin xác thực: một key truyền trong code bị gạch bỏ phía trên chuỗi, sau đó tìm kiếm lần lượt qua biến môi trường, tệp cấu hình và thông tin xác thực của container, dừng ở kết quả khớp đầu tiên và không bao giờ tới metadata của instance

Sử dụng AWS Security dành cho Developer

Chuỗi, từng mắt xích

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • Khớp đầu tiên là thắng
  • Xóa key đã lưu, tìm kiếm sẽ tiếp tục tới role
Sử dụng AWS Security dành cho Developer

Chứng minh danh tính từ ngoài AWS

Pipeline code thường chạy ngoài AWS, nên không gắn được chuỗi thông tin xác thực

  • Chạy trên GitHub hoặc GitLab
  • Chuỗi không có gì để tìm

Một CI runner và nền tảng của nó vẽ ngoài ranh giới AWS, runner được đánh dấu là không có role để gắn, và nền tảng ký một OIDC token nêu tên một repository và một workflow

Sử dụng AWS Security dành cho Developer

Chứng minh danh tính từ ngoài AWS

Pipeline code thường chạy ngoài AWS, nên không gắn được chuỗi thông tin xác thực

  • Chạy trên GitHub hoặc GitLab
  • Chuỗi không có gì để tìm

 

OIDC token (OpenID Connect)

  • Được ký và sống ngắn
  • Là tuyên bố danh tính, không phải thông tin xác thực

Một CI runner và nền tảng của nó vẽ ngoài ranh giới AWS, runner được đánh dấu là không có role để gắn, và nền tảng ký một OIDC token nêu tên một repository và một workflow

Sử dụng AWS Security dành cho Developer

Một quy tắc thay cho key lưu trữ

Một OIDC token nêu tên một repository, được đổi qua AssumeRoleWithWebIdentity lấy thông tin xác thực tạm thời hết hạn sau một giờ, vì trust policy của role đã nêu trước issuer đó và repository đó

Đổi token lấy thông tin xác thực

Sử dụng AWS Security dành cho Developer

Một quy tắc thay cho key lưu trữ

Một OIDC token nêu tên một repository, được đổi qua AssumeRoleWithWebIdentity lấy thông tin xác thực tạm thời hết hạn sau một giờ, vì trust policy của role đã nêu trước issuer đó và repository đó

Đổi token lấy thông tin xác thực

  • AssumeRoleWithWebIdentity: AssumeRole, với token từ ngoài làm bằng chứng
  • Trust policy: viết sẵn trên role, không lưu trong pipeline
  • Claim: một mẩu thông tin bên trong token
  • Issuer dùng chung cho mọi repository trên nền tảng, nên ghim thêm repository

Repository secrets: giờ trống

Sử dụng AWS Security dành cho Developer

Mọi yêu cầu đều được ký

Signature Version 4, hay SigV4

  • Chứng minh thông tin xác thực nào đã gửi yêu cầu
  • Chứng minh yêu cầu không bị thay đổi khi truyền
  • CLI và SDK ký mọi lời gọi

Luồng ký trong đó một yêu cầu và thông tin xác thực của bạn tạo ra chữ ký gửi trong header Authorization, AWS tính lại và so sánh, chấp nhận nếu khớp và trả về SignatureDoesNotMatch nếu không khớp

Sử dụng AWS Security dành cho Developer

Một chữ ký có thể trao cho người khác

Thông tin xác thực tạm thời

  • Nhiều hành động, bị giới hạn bởi role
  • Do mã của bạn nắm giữ

Mã của bạn gọi bốn dịch vụ AWS, S3, DynamoDB, SQS và KMS, với thông tin xác thực tạm thời

Sử dụng AWS Security dành cho Developer

Một chữ ký có thể trao cho người khác

Thông tin xác thực tạm thời

  • Nhiều hành động, bị giới hạn bởi role
  • Do mã của bạn nắm giữ

Pre-signed URL

  • Một đối tượng, một hành động, và ai có link cũng dùng được
  • Hết hạn theo thời gian bạn chọn, rồi vô hiệu
  • Mang quyền của bạn, không phải của người giữ link

Mã của bạn gọi bốn dịch vụ AWS, S3, DynamoDB, SQS và KMS, với thông tin xác thực tạm thời

Trình duyệt của người khác chỉ truy cập đúng một đối tượng qua một đường dẫn, bị chặn bởi một chiếc đồng hồ ghi thời gian hết hạn bạn đặt

Sử dụng AWS Security dành cho Developer

Cùng luyện tập nào!

Sử dụng AWS Security dành cho Developer

Preparing Video For Download...