infra, cloud/aws

s3 버킷 정책사용 퍼블릭 액세스 제어

worldint 2023. 7. 22. 15:36

s3버킷에 대해 접근을 제어 하는 방식은 아래와 같이 버킷 정책, ACL, IAM 제어 3가지가 있다

출처 : https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-S3-%EB%B2%84%ED%82%B7-%EC%83%9D%EC%84%B1-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%8B%A4%EC%A0%84-%EA%B5%AC%EC%B6%95

아래와 같이 버킷정책을 사용하면 퍼블릭 액세스 막을 수 있음

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "PublicListGet",
			"Effect": “Deny”,
			"Principal": "*",
			"Action": "*",
			"Resource": [
				"arn:aws:s3:::printcity-image",
				"arn:aws:s3:::printcity-image/*"
			],
			"Condition": {
                		"StringNotEquals": {
                    			"aws:Referer": [
			                        "https://www.my-site.com/*",
                       				 "https://www.my-site2.com/*",
			                    ]
               			 },
		                 "NotIpAddress" : {
                			    "aws:SourceIp": “여기에 아이프 123.123.1.0" 
		                } 
	            }
		}
	]
}

Sid:  statement Id의 약자이고 지금은 하나인데 여려개를 쓸 때, 각각의 statement를 식별할 때 사용한다

 

Effect:  여기에는 Allow랑 Deny 둘 중에 하나가 올 수 있다 (대소문자 구분 주의) default 값은 deny이다

 

Principal: 이 요소는 사용자, 계정, 서비스 또는 리소스에 대한 액세스의 주체를 지정합니다.

 

Action : putObject,getObject, get bucket 처럼 이 버킷에 어떤 액션에 대해 제어를 할 것인지 쓰면된다

               Action:[ "s3:PutObject", "s3:PutObjectAcl" ] 이런식으로 쓸 수 있다

              예제에서는 *로 모든 action을 지칭한다

 

Resource: 어떤 객체나 폴더에 이 정책을 적용할 것인지를 쓰는 부분인다

                   arn은 아마존 리소스 네임의 약자이고

                   아래에서 어떤 규칙으로 쓰는 건지 확인 할 수 있다

                  https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference-arns.html

 

Condition: 이 부분에 조건들을 쓸 수 있다.

                  위에 써진 내용은 StringNotEquals:{"aws:Referer":} 이부분은 referer헤더와 문자열이 같지 않으면 이라는 뜻

                  NotIpAddress: "aws:sourceIp"이 부분은 해당 ip가 아니라면 이라는 뜻