s3 policy example

한승재·2026년 4월 7일

https://awspolicygen.s3.amazonaws.com/policygen.html?fbclid=PAT01DUAQwc7VleHRuA2FlbQIxMABzcnRjBmFwcF9pZA81NjcwNjczNDMzNTI0MjcAAacEgjL1mvq9hHlvXA-VeB-nmZdpg_lCJdDDj9VTiVjDs3ZAjZTMkRHKeunboQ_aem_HqFdO_v1NQV9vK5l-thjJA

사용자 userA가
Amazon S3 버킷 my-bucket의 userA/ 폴더 안 객체만 읽기 가능하도록 정책을 작성하시오.
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"s3:GetObject"
    			],
    			"Resource": "arn:aws:s3:::my-bucket/userA/*"
    		}
    	]
    }
사용자가 Amazon EC2 인스턴스를 중지(stop) 할 수 있도록 하되,

👉 조건
반드시 MFA 인증이 있을 때만 허용
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"ec2:StopInstances"
    			],
    			"Resource": "*",
    			"Condition": {
    				"Bool": {
    					"aws:MultiFactorAuthPresent": "true"
    				}
    			}
    		}
    	]
    }
사용자가 S3에 접근할 수 있도록 하되,

👉 조건
IP가 203.0.113.0/24일 때만 허용
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"s3:*"
    			],
    			"Resource": "*",
    			"Condition": {
    				"IpAddress": {
    					"aws:SourceIp": "203.0.113.0/24"
    				}
    			}
    		}
    	]
    }
EC2 인스턴스 중에서

👉 조건
Environment=Dev 태그가 붙은 것만
Start / Stop 가능하게 설정
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"ec2:StopInstances",
    				"ec2:StartInstances"
    			],
    			"Resource": [],
    			"Condition": {
    				"StringEquals": {
    					"aws:ResourceTag/Environment": "Dev"
    				}
    			}
    		}
    	]
    }
사용자는 S3에서 모든 작업을 할 수 있지만,

👉 조건
삭제(DeleteObject)만 절대 금지
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Deny",
    			"Action": [
    				"s3:DeleteObject"
    			],
    			"Resource": "*"
    		},
    		{
    			"Sid": "Statement2",
    			"Effect": "Allow",
    			"Action": [
    				"s3:*"
    			],
    			"Resource": "*"
    		}
    	]
    }
사용자 userA가
Amazon S3 버킷 my-bucket에서

👉 조건

userA/ 폴더 안만 보이고 (List)
그 안 객체만 읽기 가능

👉 힌트

ListBucket은 Resource가 다름 (함정)
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"s3:ListBucket"
    			],
    			"Resource": "arn:aws:s3:::my-bucket",
    			"Condition": {
    				"StringEquals": {
    					"s3:prefix": [
    						"userA/*",
    						"userA/"
    					]
    				}
    			}
    		},
    		{
    			"Sid": "Statement2",
    			"Effect": "Allow",
    			"Action": [
    				"s3:GetObject"
    			],
    			"Resource": "arn:aws:s3:::my-bucket/userA/*"
    		}
    	]
    }
사용자가 Amazon EC2 를 사용할 수 있도록 하되

👉 조건

 2020년 4월 1일 오전 9시 ~  2021년 4월 1일 오후 6시 (UTC 기준)만 허용
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"ec2:*"
    			],
    			"Resource": "*",
    			"Condition": {
    				"DateGreaterThanEquals": {
    					"aws:CurrentTime": "2020-04-01T09:00:00Z"
    				},
    				"DateLessThanEquals": {
    					"aws:CurrentTime": "2021-04-01T18:00:00Z"
    				}
    			}
    		}
    	]
    }
사용자는 모든 작업을 할 수 있지만

👉 조건

IAM 관련 작업만 금지
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"NotAction": "iam:*",
    			"Resource": "*"
    		}
    	]
    }
사용자가 S3 객체 삭제 가능하도록 하되

👉 조건

MFA 필요
회사 IP 대역(203.0.113.0/24)에서만
특정 태그 (Project=Alpha) 붙은 객체만
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"s3:DeleteObject"
    			],
    			"Resource": "*",
    			"Condition": {
    				"Bool": {
    					"aws:MultiFactorAuthPresent": "true"
    				},
    				"IpAddress": {
    					"aws:SourceIp": "203.0.113.0/24"
    				},
    				"StringEquals": {
    					"aws:ResourceTag/Project": "Alpha"
    				}
    			}
    		}
    	]
    }
사용자가 자신의 태그와 같은 리소스만 접근 가능하게 설정

👉 예

user 태그: Department=Finance
리소스 태그도 동일해야 접근 가능
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": "*",
    			"Resource": "*",
    			"Condition": {
    				"StringEquals": {
    					"aws:ResourceTag/Department": "${aws:PrincipalTag/Department}"
    				}
    			}
    		}
    	]
    }
모든 S3 접근은 허용하지만

👉 조건

HTTPS가 아닌 요청은 전부 차단
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Deny",
    			"Action": [
    				"s3:*"
    			],
    			"Resource": [],
    			"Condition": {
    				"Bool": {
    					"aws:SecureTransport": "false"
    				}
    			}
    		}
    	]
    }
사용자가 특정 Role만 EC2에 붙일 수 있도록 설정

👉 조건

다른 Role은 절대 사용 불가
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"iam:PassRole"
    			],
    			"Resource": "arn:aws:iam::123456789012:role/SpecificRole"
    		}
    	]
    }
사용자가 S3에 업로드할 수 있도록 하되

👉 조건

반드시 서버 측 암호화(SSE) 사용
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    				"s3:PutObject"
    			],
    			"Resource": "*",
    			"Condition": {
    				"StringEquals": {
    					"s3:x-amz-server-side-encryption": "AES256"
    				}
    			}
    		}
    	]
    }
사용자가 AWS 리소스를 생성할 수 있도록 하되

👉 조건

특정 리전 (예: ap-northeast-2)에서만 허용

👉 키워드

aws:RequestedRegion
  • 답지
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": "*",
    			"Resource": "*",
    			"Condition": {
    				"StringEquals": {
    					"aws:RequestedRegion": "ap-northeast-2"
    				}
    			}
    		}
    	]
    }
profile
안녕하세요

0개의 댓글