S3 버킷 정책 작성 방법 요약

5093 단어 policyS3AWS
최근 AWS를 공부하기 시작했지만 정책을 작성할 때마다 잃어버리기 때문에
버킷 정책을 중심으로 리소스 기반 정책을 작성하는 방법을 요약합니다.

전제



예를 들어 S3을 정적 호스팅 대상으로 설정하는 경우,
· 블록 공개 액세스 차단 비활성화
· 정적 웹사이트 호스팅 활성화
이러한 작업을 수행하지만, 그냥 엔드포인트에 액세스할 수 없습니다.


↑액세스하면 이렇게 된다

무엇이 부족한지 버킷 정책 설정입니다.
S3의 버킷 정책은 기본적으로 완전히 거부됩니다.

버킷 정책 전모


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1621068192000",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::${ここにバケットの名前を入れる}"
        }
    ]
}

위와 같이 설명합니다.

각 항목에 대해서는 여기 공식 참조에서 확인할 수 있습니다.

버전



이것은 IAM 정책의 문법 버전입니다.
현재 (2021/5/15)는 2012-10-17입니다.
이미 상당히 긴 것 변하지 않았습니다.

Statement.Sid



이것은 정책 문서에 임의로 주는 식별자입니다. 각 명령문에 할당할 수 있으며 정책 내에서 중복되어서는 안 됩니다.

Statement.Effect



허가 목록인 Allow(화이트리스트)로 할 것인지, 금지 목록인 Deny(블랙리스트)로 할 것인지 선택할 수 있습니다.

Statement.Principal



어느 상대(Principal)에 대해서 허가 또는 거부할지를 지정합니다.
지정할 수 있는 대표적인 프린시펄은 아래와 같은 것이 있습니다.
  • AWS 계정/루트 사용자
  • IAM 사용자
  • IAM 롤
  • AWS 서비스
  • "Principal": { "AWS": "arn:aws:iam::AWSアカウントID:user/userネーム" }
    // 下記だと全てのユーザーに対して許可となる
    "Principal": { "AWS": "*" }
    

    Statement.Action



    허용 또는 거부할 조치를 지정합니다.
    // s3全てのアクション
    "Action": "s3:*"
    // sqsのsedMessageアクション
    "Action": "sqs:SendMessage"
    

    Statement. Resource



    일련의 명령문이 어떤 자원에 반영되는지를 설명합니다.
    // examplebucketという名前のs3に対してポリシーのステートメントが反映される。
    "Resource": "arn:aws:s3:::examplebucket"
    
    // ワイルドカードも一部使用可能。下記はexamplebucketという名前のS3バケット内の全ての項目に対して反映される。
    "Resource": "arn:aws:s3:::examplebucket/*"
    

    응용 설명


    Condition를 사용하여 정책이 실행되는 시점의 조건을 지정할 수 있습니다.
    이에 따라
    - IP 제한
    - 사용자 이름별 제한
    - HTTP Referer 제한
    - MFA 요청
    등 세세한 컨트롤을 할 수 있습니다.
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "IPAllow",
          "Effect": "Deny",
          "Principal": "*",
          "Action": "s3:*",
          "Resource": [
         "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
             "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
          ],
          "Condition": {
         "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
          }
        }
      ]
    }
    

    Effect가 Deny (거부)이고 NotIpAddress로 IP 주소가 지정되었으므로54.240.143.0/24 의 IP 주소 이외는 거부한다, 라고 하는 설정이 됩니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:*",
                "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "Condition": {
                    "StringEquals": {
                        "aws:username": "myname"
                    }
                }
            }
        ]
    }
    

    위의 내용은 AWS 사용자 이름이 myname인 경우에만 허용됩니다.aws:username와 같은 정책 문서에서 얻을 수 있는 키는 아래 공식 문서에 나열되어 있습니다.
    태그나 리전, 날짜 등 다양한 키를 얻을 수 있는 것 같습니다.
    AWS 글로벌 조건 컨텍스트 키

    정책 생성기



    공식 측에서 정책 생성기 되는 것도 준비되어 있어 매우 편리합니다.


    기초를 제너레이터로 바삭하게 작성해, 세세한 부분은 수정해 가는 등의 이용을 해 나가려고 생각합니다.

    참고 자료


  • AWS 공식 참조
  • S3 버킷 정책의 구체적인 예에서 배우는 AWS 정책 문서
  • 지금 IAM에 대해 자세히 알아보기
  • 좋은 웹페이지 즐겨찾기