Ủy quyền truy cập dịch vụ với IAM

Triển khai Ứng dụng trên AWS

Dunieski Otano

Amazon Web Services Solutions Architect

Key trong commit

  • Một access key sống lâu bị commit vào repo
  • Bot quét phát hiện và làm đội chi phí
  • Vai trò và nguyên tắc đặc quyền tối thiểu ngăn điều này

Một AWS access key vô tình rò rỉ trong commit, được gắn cờ là rủi ro bảo mật

Triển khai Ứng dụng trên AWS

Principal IAM: user, role và policy

Sơ đồ ba cột IAM: Principal (người dùng, dịch vụ, hoặc vai trò) bên trái, tài liệu Policy với hành động Allow/Deny ở giữa, IAM Role với thông tin xác thực tạm thời, ngắn hạn bên phải

  • Principal: ai đang gửi yêu cầu
  • Policy: tài liệu JSON cấp quyền
  • Role: tập quyền mà một thực thể có thể đảm nhận
  • Role được assume; user giữ thông tin xác thực sống lâu
Triển khai Ứng dụng trên AWS

Thông tin xác thực lập trình đúng cách

  • Lambda: execution role cấp quyền
  • EC2: instance profile cung cấp thông tin xác thực role
  • ECS: task role giới hạn quyền theo tác vụ
  • Không có access key sống lâu trong code hay config

Ba dịch vụ tính toán AWS dùng role không có key sống lâu: Lambda với execution role, EC2 với instance profile, và ECS với task role, mỗi dịch vụ đều tự động xoay vòng thông tin xác thực

Triển khai Ứng dụng trên AWS

AssumeRole và STS

  • STS AssumeRole: lấy thông tin xác thực tạm thời cho một role
  • Dùng cho truy cập cross-account
  • Trust policy kiểm soát ai được assume role
  • Thông tin xác thực ngắn hạn và tự hết hạn

Luồng STS AssumeRole cross-account: caller ở Account A yêu cầu thông tin xác thực từ STS, trust policy trên role của Account B cho phép, STS trả về thông tin xác thực ngắn hạn tự hết hạn

Triển khai Ứng dụng trên AWS

Đặc quyền tối thiểu và cấu trúc policy

Một policy statement có ba phần bắt buộc (Effect, Action, và Resource) cộng Condition tùy chọn:

{
  "Effect": "Allow",
  "Action": "dynamodb:PutItem",
  "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/Orders",
  "Condition": {
    "Bool": { "aws:SecureTransport": "true" }
  }
}
Triển khai Ứng dụng trên AWS

Giới hạn của IAM và nơi code của bạn bắt đầu


IAM: tầng dịch vụ

  • Ủy quyền AWS API calls: role này có được gọi thao tác này không?
  • Không thể áp đặt quy tắc theo tenant hoặc theo bản ghi

Code của bạn: tầng dữ liệu

  • Kiểm tra người dùng đã xác thực so với dữ liệu được yêu cầu
  • Dùng cả hai: IAM bảo vệ dịch vụ, code bảo vệ dữ liệu
Triển khai Ứng dụng trên AWS

Vai trò thực thi theo đặc quyền tối thiểu

Execution role tối thiểu cho Lambda: chỉ cấp quyền DynamoDB PutItem trên một ARN bảng, không dùng wildcard cho action hay resource

  • Một Lambda cần ghi vào đúng một bảng DynamoDB
  • Chỉ cấp dynamodb:PutItem trên ARN của bảng đó
  • Không dùng wildcard cho action hay resource
  • Chỉ thêm quyền khi lệnh gọi thực tế bị từ chối
Triển khai Ứng dụng trên AWS

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

Triển khai Ứng dụng trên AWS

Preparing Video For Download...