S3 정책 설정

자격증명-기반 정책(Id-Based Policy)

Amazon S3 버킷의 관리를 해당 특정 버킷으로 제한하는 자격증명-기반 정책을 생성

Amazon S3: S3 버킷에 있는 객체에 대한 읽기 및 쓰기 액세스 권한을 허용합니다.

[ AWS ] IAM Policy 특정 S3만 읽기 / 쓰기 권한 부여

리소스-기반 정책(Resource-Based Policy)

S3 버킷 정책에서 해당 버킷에 접근 가능한 IAM 사용자를 지정

AWS Policy Generator

[AWS]S3 버킷 정책 만들기

IAM 사용자가 특정 버킷에만 접근하도록 허용

CI/CD에 사용되는 anam-earth-deploy는 CodeDeployFullAccess와 S3FullAccess 정책을 연결하여 별도로 생성한다.

  1. IAM 정책 AmazonS3ListAccess 생성

    정책이 연결된 사용자는 AWS 콘솔 > S3 > 버킷에서 전체 버킷 목록 및 지역 확인 가능. IAM 사용자의 콘솔 사용 편의성을 위해 생성했다. 만약 없다면, url을 통해서 원하는 버킷 콘솔에 직접 접속해야 한다.

    S3를 콘솔로 이용하는 모든 사용자가 공통으로 사용하는 정책이므로 IAM 정책 생성 후 사용자 그룹에 연결한다.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetBucketLocation",
                    "s3:ListAllMyBuckets"
                ],
                "Resource": "*"
            }
        ]
    }
    
  2. IAM 사용자 그룹 AmazonS3BucketAccess 생성

    콘솔에서 특정 S3 버킷만 접근하는 모든 사용자를 포함한다. 프로젝트를 새로 할 때마다 별도로 만들 필요 없고, S3 전용 IAM 사용자 전체를 포괄한다. 위에서 만든 AmazonS3ListAccess 정책을 연결해준다.

  3. IAM 사용자 anam-earth-s3 생성

    anam-earth라는 버킷 접근 권한만 갖는 사용자이다. 콘솔 사용을 활성화하고 비밀번호를 만들어준다.

  4. S3 버킷 anam-earth 및 버킷 정책 생성

    버킷 정책에는 Principal 객체를 통해 이 버킷에 접근 가능한 사용자를 명시해준다. 버킷 객체에 관한 읽기/쓰기 권한을 포함한다.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ListObjectsInBucket",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::[AWS-account-ID]:user/anam-earth-s3"
                },
                "Action": "s3:ListBucket",
                "Resource": "arn:aws:s3:::anam-earth"
            },
            {
                "Sid": "AllObjectActions",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::[AWS-account-ID]:user/anam-earth-s3"
                },
                "Action": [
                    "s3:DeleteObject",
                    "s3:GetObject*",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::anam-earth/*"
            }
        ]
    }