AWS - S3 권한 관련 ( IAM 정책 / 버킷 정책 )

TopOfTheHead·2026년 5월 18일

클라우드 / AWS

목록 보기
31/39
post-thumbnail

S3권한 관리 방법
IAM 정책 / 버킷 정책
S3 권한IAM 주체인가하는지, S3 버킷인가하는지의 차이

IAM 정책
주체 ( IAM USER, IAM GROUP, IAM ROLE ) 등에 S3에 대한 권한부여 / 삭제하는 정책
S3 버킷을 사용하는 주체가 부여받는 AWS 권한

。주로 계정에 소속된 IAM 주체S3 권한을 관리하는 경우 사용

버킷 정책
S3 버킷 자체에 주체가 행사할 수 있는 권한부여 / 삭제하는 정책
▶ 해당 S3 버킷으로 접근한 주체S3 버킷이 가진 버킷 정책 권한 범위작업을 수행

버킷 단위로 부여되는 자원 기반 정책
주체를 설정하여 해당 버킷에 대한 액세스를 부여

。모든 버킷default : Private로서 외부에서 접근이 불가능
▶ 해당 S3 버킷에 접근하는 사용자를 지정하여 허용 / 비허용 설정

  • IAM 정책이 아닌, 버킷 정책을 사용하는 이유?
    IAM User 수가 매우 많은 경우 IAM 정책을 통해 S3 버킷에 대한 S3 권한을 일일이 부여하는것은 어렵다.

    IAM 주체의 경우 할당된 권한 ( ex. AmazonS3FullAccess 등 )이 없는 경우 S3 버킷 자체에 접근 권한이 없는 단점이 존재.
    버킷 정책을 통해 S3 버킷 자체에 권한을 부여함으로써 접근할 IAM User를 설정 시 지정된 IAM UserS3 권한이 없더라도 접근하여 버킷의 권한을 활용 가능

  • 객체계층 구조에 따라서 권한 조정이 가능
    ex ) resource : "arn:aws:s3:::my-bucket/images/*"
    my-bucket 버킷images/ 로 시작하는 모든 객체에 대해서 권한 부여

  • 다른 계정 Entity에 대해서 권한 설정이 가능

  • 익명 사용자 ( Anonymous )에 대한 권한 설정이 가능
    S3 버킷Public으로 공개하면서 권한을 설정하고, S3 Static Host를 사용하는 경우 익명사용자S3 버킷에 접속할 수 있으며, 해당 익명에 대한 권한 설정이 가능

    기본적으로 S3 버킷Public에서 조회할 수 없는 Private 상태
    정적 컨텐츠 등을 서비스하는 경우 외부 익명사용자에게 조회될 수 있어야하므로, 해당 버킷퍼블릭 액세스 차단을 해제 후 버킷 정책에 다음 정책을 정의하여 외부 익명사용자에게 조회될 수 있도록 설정

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "Statement1",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::[버킷명]/*"
            }
        ]
    }

    모든 사용자에게 해당 버킷에 접근 시 내부 객체 조회를 허용

S3 버킷 관련 정책 AWS 정책

Resource 자원의 모든 주체( = IAM User / Group / IAM Role )에 대해서 s3:GetObject를 허용

Action

  • "Acition" : [s3:"ListBucket"] :
    s3 서비스에서 Bucket들을 나열할 수 있는 행동

  • "Action" : [s3:"GetObject"] :
    s3 서비스에서 객체를 조회하여 반환하는 행동

AWS에서 기본 제공하는 S3 정책
IAM USER / GROUP / ...등의 주체에 해당 정책을 부여해서 활용

  • AmazonS3FullAccess
    S3의 모든 권한을 행사할 수 있는 정책

  • AmazonS3ReadOnlyAccess
    S3에서 읽기만 수행할 수 있는 권한을 제공하는 정책
    업로드 / 삭제 / 수정 등은 수행이 불가능.

IAM 정책:
IAM 주체에 대해 S3 버킷접근 권한 부여

  • AWS 콘솔 -> IAM -> IAM 사용자 그룹에서 IAM Group 생성 및 정책 생성

    IAM Group 생성 후 인라인 정책 생성을 통해 정책 생성

    나열 : ListAllMyBuckets
    읽기 : GetBucketLocation
    리소스 : 모두

    IAM Group 생성 및 권한정책이 등록됨을 확인 가능

  • IAM User 생성 IAM User 생성
    AWS Management Console에 대한 사용자 액세스 권한 제공 설정

    생성IAM GroupIAM User를 등록


  • S3 Bucket 생성 버킷 생성
    버킷명은 고유하게 지정
    버킷명-계정ID로 지정


  • 생성한 IAM User 계정에서 S3 버킷으로 접근
    IAM UserIAM Group을 통해 AWS S3Bucket 위치를 알 수 있는 권한이 존재

    IAM User 계정 -> 보안 자격 증명 -> 콘솔 로그인을 통해 생성한 IAM User 계정으로 콘솔 로그인

    IAM User 접속 시 다양한 AWS 기능에 대해서 권한이 없음을 확인 가능.

    ▶ 해당 IAM User에서는 S3 버킷 목록만 조회 가능.

  • IAM Group권한 -> 정책 연결을 통해 AWS에서 기본 제공하는 S3 정책 설정



    。 이후 해당 IAM Group에 소속된 IAM UserS3에 대한 모든 기능을 사용 가능

    S3에 관련된 강력한 권한을 가지므로, 최소권한에 위배되어 AmazonS3FullAccess는 자제하는게 좋다.
    업로드 / 삭제 / 수정 등 의 권한이 다양함

버킷 정책 : IAM 주체에게 접근을 허가하는 버킷 정책을 생성하여 S3 버킷에 설정
IAM 주체의 경우 할당된 권한 ( ex. AmazonS3FullAccess 등 )이 없는 경우 S3 버킷 자체에 접근 권한이 없는 단점이 존재.
버킷 정책을 통해 S3 버킷 자체에 권한을 부여함으로써 권한이 없는 IAM User가 접근하여 활용 가능

  • 버킷 생성
    버킷 생성 시 퍼블릭 액세스 차단 설정 해제

    。 해당 버킷Public Access를 부여할 수 있는 모드로 진입
    ▶ 이후 익명 사용자으로부터 접근이 가능

  • 버킷 -> 생성한 버킷 -> 권한 -> 버킷 정책에서 버킷 정책 지정
    。해당 버킷으로 접근한 지정된 IAM 주체가 수행할 수 있는 권한을 정의
    편집을 통해 정책을 지정
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListSpecificBucket",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::demo-home-bucket-904583676849",
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "",
                        "home/",
                        "home/${aws:username}/*"
                    ]
                }
            }
        },
        {
            "Sid": "FullAccessToUserHome",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::demo-home-bucket-904583676849/home/${aws:username}",
                "arn:aws:s3:::demo-home-bucket-904583676849/home/${aws:username}/*"
            ]
        }
    ]
}

${aws:username} : 로그인IAM 주체username동적으로 입력되는 placeholder
▶ 해당 S3 버킷에 접근한 IAM 주체에 할당된 권한이 없어도 해당 권한을 행사할 수 있음.

ListSpecificBucketStatement
▶ 모든 사용자에 대해 해당 버킷에 대해 ListBucket 기능을 사용하도록 허용
/, /home, /home/{유저명}에 해당하는 디렉토리버킷을 모두 List

FullAccessToUserHomeStatement
▶ 모든 사용자에 대해 해당 버킷/home/{유저명} 디렉토리 이하 에 대해서 S3의 모든 권한허용

  • 해당 IAM User만 접근 가능한 버킷디렉토리 생성
    s3://버킷명/home/유저명에 해당하는 디렉토리를 생성

    버킷 정책에 지정한 ListSpecificBucketStatement에 따라서 해당 유저명으로 접속한 유저s3://버킷명/home/유저명객체에 접근하여 모든 S3 작업을 수행가능.

    ex ) s3://demo-home-bucket-904583676849/home/demo-practice-user 디렉토리demo-practice-user만 접근하여 내부 객체에 대해서 모든 S3 작업을 수행 가능
    ▶ 다른 유저명으로 접속한 유저는 해당 디렉토리에 대한 접근 권한이 없으므로, 자원으로 접근이 불가능
profile
공부기록 블로그

0개의 댓글