본문으로 바로가기

S3 버켓 정책 및 사용자 정책

category AWS/☁️ AWS 2020. 7. 11. 23:29
 

버킷 정책 및 사용자 정책 사용 - Amazon Simple Storage Service

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

앞서 S3의 버켓 수준의 정책을 정책 생성기를 통해서 지정한 적이 있다.

전체 사용자에 대해서 getObject만 허용하는 정책이었다.

{
    "Version": "2012-10-17",
    "Id": "Policy1594463565651",
    "Statement": [
        {
            "Sid": "Stmt1594463549355",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::s3testing/*"
        }
    ]
}

 

이번에는 공식 문서를 통해 조금 더 세부적인 내용의 S3 정책을 알아보도록하자.

 

Statement 이하의 Resource는 ARN 형식으로 리소스를 식별한다.

S3는 다음과 같은 형식을 띄고 있다.

// ARN 형식
arn:partition:service:region:namespace:relative-id

// S3
arn:aws:s3:::bucket_name/key_name

// S3 examplebucket 버킷 아래의 모든 파일
arn:aws:s3:::examplebucket/*

// 계정의 모든 S3 버킷
arn:aws:s3:::*

// example1bucket, example2bucket 등
arn:aws:s3:::example?bucket/*

 

Principal은 해당 정책이 적용되는 유저를 말합니다. 만약 root 계정 외에 다른 서브 계정이 많은 기업이라면 이런 권한 속성이 중요하겠죠. 또, 해당 버킷이 만약에 웹 서비스를 한다면 모든 유저(*)에게 열어둬야겠죠?

 

"Principal":{"AWS":"arn:aws:iam::AccountNumber-WithoutHyphens:root"}

// 모든 유저(웹을 이용하는 불특정 다수)
"Principal":"*"

 

Action 부분은 무엇을 허용/금지할 것인지에 대한 구체적인 행동을 나타냅니다.

액션 뿐만 아니라 그 외의 속성에 주는 값들은 아래 문서를 통해 자세한 설명을 읽어볼 수 있습니다.

(https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/list_amazons3.html)

 

 

이제 아마존 공식 문서에서 예시로 든 구체적인 정책을 살펴보겠습니다. Condition 속성이 적용된 경우가 많습니다.

 

버킷 정책 예제 - Amazon Simple Storage Service

이 정책을 사용하기 전에 이 예제의 IP 주소 범위를 사용 사례에 적합한 값으로 바꾸십시오. 그렇지 않으면 버킷에 액세스할 수 없습니다.

docs.aws.amazon.com

 

 

 

IP 밴

 

특정한 아이피만 S3에 접근할 수 없도로 막은 정책입니다.

s3에 대한 모든 액션은 Deny하도록 했으며 조건은 54.240.143.0/24 아이피일 경우입니다.

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",

  "Statement": [

    {
      "Sid": "IPAllow",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}

      }
    }
  ]
}

 

 

HTTP Referer 체크를 통한 액세스 제한

 

http referer란 무엇인가

 

말 그대로 언급(refer)한 곳이다. 어디를 거쳐 현재 위치로 오게 되었는 지를 알 수 있다.

네이버에서 구글로 이동하면 구글이 받은 request 헤더의 referer로 naver가 남는 셈이다.

 

A라는 웹 페이지에 B 사이트로 이동하는 하이퍼링크가 존재한다고 하자. 이때 웹 사이트 이용자가 이 하이퍼링크를 클릭하게 되면 웹 브라우저에서 B 사이트로 참조 주소(리퍼러)를 전송하게 된다. B 사이트의 관리자는 이 전송된 리퍼러를 보고 방문객이 A 사이트를 통해 자신의 사이트에 방문한 사실을 알 수 있다. (위키피디아)

 

 

 

많은 이미지를 서빙하는 웹은 referer를 체크하여 특정 접근을 막아둘 필요가 있습니다. 

 

 

http referer를 체크하여 적절한 경로를 통해 접근하지 않으면 s3를 이용할 수 없게 하는 정책입니다.

www.example.com이나 example.com을 경유해 접속하지 않으면 이용할 수 없게 만들었습니다. 

우리 웹에서만 이 이미지를 쓸 수 있도록 하겠다! 라면 이런 방법을 쓰시면 되겠습니다.

 

{
  "Version":"2012-10-17",
  "Id":"http referer policy example",
  "Statement":[
    {
      "Sid":"Allow get requests originating from www.example.com and example.com.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition":{
        "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
      }
    }
  ]
}

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체