Danh tính, tài nguyên và ranh giới

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

Rahul Singh

Technical Product Manager

Chính sách nào quyết định?

Chỉnh sửa mà không đổi gì

  • Chương một: từ chối tường minh, hoặc không cho phép
  • Ở đây: một nguyên nhân thứ ba

Một yêu cầu gặp ba lớp kiểm tra chính sách, với dấu hỏi ở chỗ quyết định.

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

Chính sách nào quyết định?

Tối đa ba lớp

  1. Chính sách theo danh tính trên bên gọi
  2. Chính sách theo tài nguyên trên tài nguyên
  3. Ranh giới ở trên, chỉ bớt đi

Trong chính tài khoản bạn, một trong hai chính sách cho phép là đủ

Bị từ chối bởi bất kỳ lớp nào nó gặp

Một yêu cầu chảy từ trên xuống qua ba kiểm tra theo thứ tự: chính sách danh tính, chính sách tài nguyên, và ranh giới quyền, trước khi được cho phép.

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

Hai nơi chính sách có thể tồn tại

Chính sách theo danh tính

  • Gắn trên bên gọi
  • Danh tính đó được làm gì
  • Như thẻ ra vào bạn đeo

Một role ở trên mang chính sách theo danh tính, với khoảng trống bên dưới cho phía tài nguyên của cùng yêu cầu.

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

Hai nơi chính sách có thể tồn tại

Chính sách theo danh tính

  • Gắn trên bên gọi
  • Danh tính đó được làm gì
  • Như thẻ ra vào bạn đeo

Chính sách theo tài nguyên

  • Gắn trên tài nguyên
  • Ai được chạm vào nó
  • Cần cho bên gọi liên tài khoản

Một role ở trên mang chính sách theo danh tính còn một S3 bucket bên dưới mang chính sách theo tài nguyên, và một yêu cầu đi xuống giữa chúng.

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

Được quản lý sẵn, hay do bạn quản lý

Hai loại chính sách theo danh tính

  • AWS managed: do AWS sở hữu
  • Customer managed: do bạn sở hữu

Hai thẻ xếp chồng so sánh một chính sách AWS managed, do AWS sở hữu và mặc định rộng, với một chính sách customer managed, do bạn sở hữu và khoanh theo tác vụ.

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

Được quản lý sẵn, hay do bạn quản lý

Hai loại chính sách theo danh tính

  • AWS managed: do AWS sở hữu
  • Customer managed: do bạn sở hữu

 

Tiện lợi hay chính xác

  • AWS managed: làm nhanh
  • Customer managed: đặc quyền tối thiểu

Hai thẻ xếp chồng so sánh một chính sách AWS managed, do AWS sở hữu và mặc định rộng, với một chính sách customer managed, do bạn sở hữu và khoanh theo tác vụ.

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

Ranh giới giới hạn những gì chính sách cấp

Vì sao tài khoản gắn thêm

  • Dev tạo role, không ai tự ý leo quyền

Permissions boundary

  • Trần trên những gì chính sách cấp
  • Hiệu lực: phải được cả hai cho phép

Ba quyền do chính sách danh tính cấp đi xuống ranh giới quyền chỉ cho phép hành động S3, nơi quyền iam:CreateUser bị chặn và hai quyền còn lại tiếp tục vào phần quyền hiệu lực bên dưới.

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

Ranh giới giới hạn những gì chính sách cấp

Vì sao tài khoản gắn thêm

  • Dev tạo role, không ai tự ý leo quyền

Permissions boundary

  • Trần trên những gì chính sách cấp
  • Hiệu lực: phải được cả hai cho phép

Vì sao iam:CreateUser không tác dụng

  • Chỉ bớt đi, không bao giờ cấp thêm

Ba quyền do chính sách danh tính cấp đi xuống ranh giới quyền chỉ cho phép hành động S3, nơi quyền iam:CreateUser bị chặn và hai quyền còn lại tiếp tục vào phần quyền hiệu lực bên dưới.

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

Ranh giới giới hạn những gì chính sách cấp

Vì sao tài khoản gắn thêm

  • Dev tạo role, không ai tự ý leo quyền

Permissions boundary

  • Trần trên những gì chính sách cấp
  • Hiệu lực: phải được cả hai cho phép

Vì sao iam:CreateUser không tác dụng

  • Chỉ bớt đi, không bao giờ cấp thêm

Session policy: cho một phiên AssumeRole

Ba quyền do chính sách danh tính cấp đi xuống ranh giới quyền chỉ cho phép hành động S3, nơi quyền iam:CreateUser bị chặn và hai quyền còn lại tiếp tục vào phần quyền hiệu lực bên dưới.

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

Điều kiện thu hẹp phạm vi allow

Condition key

  • Thu hẹp lệnh allow theo ngữ cảnh yêu cầu

  • aws:SourceIp: mạng nguồn của nó

Một lệnh allow đọc đối tượng S3 đi qua dải điều kiện liệt kê khóa mạng nguồn và khóa thẻ của bên gọi, rồi tách thành nhánh cho phép khi ngữ cảnh khớp và nhánh từ chối khi không khớp.

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

Điều kiện thu hẹp phạm vi allow

Condition key

  • Thu hẹp lệnh allow theo ngữ cảnh yêu cầu

  • aws:SourceIp: mạng nguồn của nó

  • aws:PrincipalTag: thẻ trên bên gọi

ABAC: attribute-based access control

  • Một chính sách, nhiều principal

Một lệnh allow đọc đối tượng S3 đi qua dải điều kiện liệt kê khóa mạng nguồn và khóa thẻ của bên gọi, rồi tách thành nhánh cho phép khi ngữ cảnh khớp và nhánh từ chối khi không khớp.

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

Một bảng, mỗi lần một tenant

Một bảng dùng chung

  • DynamoDB, một partition key mỗi tenant
  • Tự nó không đủ cô lập

Bên gọi tenant A đi qua điều kiện LeadingKeys vào một bảng DynamoDB dùng chung, nơi các hàng tenant A được trả về và hàng của tenant B, C bị chặn.

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

Một bảng, mỗi lần một tenant

"Condition": {
  "ForAllValues:StringEquals": {
    "dynamodb:LeadingKeys": ["${aws:PrincipalTag/tenant}"]
  }
}

Một bảng dùng chung

  • DynamoDB, một partition key mỗi tenant
  • Tự nó không đủ cô lập

Một điều kiện để thu hẹp

  • ForAllValues: mọi khóa cung cấp phải khớp
Sử dụng AWS Security dành cho Developer

Một bảng, mỗi lần một tenant

"Action": ["dynamodb:Query", "dynamodb:GetItem", "dynamodb:Scan"],
"Condition": {
  "ForAllValues:StringEquals": {
    "dynamodb:LeadingKeys": ["${aws:PrincipalTag/tenant}"]
  }
}

Một bảng dùng chung

  • DynamoDB, một partition key mỗi tenant
  • Tự nó không đủ cô lập

Một điều kiện để thu hẹp

  • ForAllValues: mọi khóa cung cấp phải khớp
Lỗ hổng còn lại: không phải yêu cầu nào cũng nêu partition
  • dynamodb:Scan không cung cấp khóa, nên không có gì để trượt điều kiện
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...