IAM Policy - Nâng cao

2 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem

IAM Conditions

AWS IAM xử lý các policy theo thứ tự sau:

  1. Explicit Deny → luôn được ưu tiên cao nhất (chặn chắc chắn).
  2. Explicit Allow → cho phép nếu không bị deny.
  3. Implicit Deny (ngầm định) → mọi thứ không được allow rõ ràng đều bị từ chối.

Giới hạn địa chỉ IP client mà từ đó các lệnh API được thực hiện.

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Deny",
     "Action": "*",
     "Resource": "*",
     "Condition": {
       "NotIpAddress": {
         "aws:SourceIp": ["192.0.2.0/24", "203.0.113.0/24"]
       }
     }
   }
 ]
}

👉 IAM Policy trên sẽ từ chối tất cả các hành động (Action: "*") trên mọi tài nguyên (Resource: "*") nếu IP nguồn không thuộc các dải IP được chỉ định (NotIpAddress với aws:SourceIp).

Giới hạn vùng (region) mà các lệnh API được thực hiện đến.

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Deny",
     "Action": ["ec2:*", "rds:*", "dynamodb:*"],
     "Resource": "*",
     "Condition": {
       "StringEquals": {
         "aws:RequestedRegion": ["eu-central-1", "eu-west-1"]
       }
     }
   }
 ]
}

👉 Policy này từ chối tất cả hành động liên quan đến EC2, RDS và DynamoDB nếu yêu cầu được gửi đến các vùng eu-central-1 hoặc eu-west-1 (theo điều kiện StringEquals với aws:RequestedRegion).

Giới hạn thao tác EC2 dựa trên Tag

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Action": ["ec2:StartInstances", "ec2:StopInstances"],
     "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*",
     "Condition": {
       "StringEquals": {
         "ec2:ResourceTag/Project": "DataAnalytics",
         "aws:PrincipalTag/Department": "Data"
       }
     }
   }
 ]
}

Cho phép người dùng khởi động (Start) và tắt (Stop) các EC2 instance chỉ khi:

  • EC2 đó có tag Project = DataAnalytics
  • Và người dùng (Principal) có tag Department = Data

Bắt buộc dùng MFA để thực hiện hành động nguy hiểm

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Action": "ec2:*",
     "Resource": "*"
   },
   {
     "Effect": "Deny",
     "Action": ["ec2:StopInstances", "ec2:TerminateInstances"],
     "Resource": "*",
     "Condition": {
       "BoolIfExists": {
         "aws:MultiFactorAuthPresent": false
       }
     }
   }
 ]
}
  • Cho phép thực hiện mọi thao tác EC2
  • Nhưng từ chối hai hành động quan trọng là StopInstances và TerminateInstances nếu người dùng không bật MFA

IAM for S3

  • Bucket-level permission:
    • s3:ListBucket áp dụng cho:
      → arn:aws:s3:::test

👉 Nghĩa là: quyền thao tác ở cấp độ bucket

  • Object-level permission:
  • Các quyền:
    s3:GetObject, s3:PutObject, s3:DeleteObject áp dụng cho:
    → arn:aws:s3:::test/*

👉 Nghĩa là: quyền thao tác ở cấp độ object trong bucket

Resource Policies & aws:PrincipalOrgID

  • aws:PrincipalOrgID có thể được dùng trong bất kỳ resource policy nào để giới hạn quyền truy cập chỉ dành cho các tài khoản là thành viên của một AWS Organization.
Bạn thấy bài này thế nào?