조건 키를 사용한 버킷 정책 예시

조건 키를 사용한 버킷 정책 예시 (Bucket policy examples using condition keys)

버킷 정책의 조건(Condition) 요소를 사용하면 요청의 특정 측면을 기준으로 액세스를 제한할 수 있어요. 조건 키는 요청 헤더, 소스 IP, VPC, 보안 전송 등 요청의 속성을 검사해 특정 조건이 충족될 때만 액세스를 허용하거나 거부해요. 다음 예시는 Amazon S3 버킷 정책에서 조건 키를 사용하는 방법을 보여줘요.

조건 키의 전체 목록은 서비스 권한 부여 참조의 Amazon S3 조건 키를 참고하세요.

출처: 문서

본문

조건 요소의 구조

버킷 정책에서 Condition 요소는 하나 이상의 조건 연산자와 키-값 쌍을 포함해요. 기본 구조는 다음과 같아요.

"Condition": {
    "StringEquals": {
        "s3:prefix": "logs/"
    }
}

여기서 StringEquals는 조건 연산자이고, s3:prefix는 조건 키이며, "logs/"는 키가 비교될 값이에요. 조건 연산자는 요청 값과 정책에 지정된 값의 관계를 정의해요.

예시: 특정 프리픽스로 객체 업로드 제한

다음 정책은 사용자가 logs/ 프리픽스 아래에만 객체를 업로드할 수 있도록 제한해요. s3:prefix 조건 키를 사용해 업로드 대상 경로가 logs/로 시작하는 객체로 제한돼요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Dave"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "logs/*"
                }
            }
        }
    ]
}

예시: 객체 태그를 기준으로 액세스 제어

객체 태그를 사용해 액세스를 제어할 수 있어요. 다음 정책은 confidential=true 태그가 있는 객체에 대한 읽기 액세스를 거부해요. s3:ExistingObjectTag 조건 키를 사용해 기존 객체의 태그를 검사해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/confidential": "true"
                }
            }
        }
    ]
}

예시: 특정 스토리지 클래스로 업로드 제한

s3:x-amz-storage-class 조건 키를 사용해 객체가 특정 스토리지 클래스로만 업로드되도록 제한할 수 있어요. 다음 정책은 STANDARD_IA 스토리지 클래스로만 객체 업로드를 허용해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Dave"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-storage-class": "STANDARD_IA"
                }
            }
        }
    ]
}

예시: 특정 계정과 연결된 객체에 대한 액세스 제한

aws:PrincipalOrgID 조건 키를 사용해 조직의 계정에서 온 요청으로 액세스를 제한할 수 있어요. 다음 정책은 지정된 AWS Organizations 조직의 계정에서 온 요청에 대해서만 버킷 액세스를 허용해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-1234567890"
                }
            }
        }
    ]
}

예시: 요청 태그 기준 액세스 제어

aws:RequestTag 조건 키를 사용해 요청에 포함된 태그를 기준으로 작업을 제어할 수 있어요. 다음 정책은 특정 태그(environment=production)가 없는 객체 생성 요청을 거부해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:RequestTag/environment": "production"
                }
            }
        }
    ]
}

예시: IP 주소와 보안 전송 결합

여러 조건을 결합해 더 제한적인 정책을 만들 수 있어요. 다음 정책은 지정된 IP 범위 밖에서 오거나 HTTPS를 사용하지 않는 요청을 거부해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "192.0.2.0/24"
                },
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}

조건 키 사용 모범 사례

  • 최소 권한 유지 - 조건 키를 사용해 필요한 최소한의 액세스만 허용하도록 정책을 작성해요.
  • 거부(Deny)를 광범위하게, 허용(Allow)을 좁게 - 거부를 광범위하게 적용하고 허용을 좁게 지정하면 예상치 못한 액세스를 방지할 수 있어요.
  • 조건 키 문서 확인 - 사용하려는 조건 키가 해당 작업과 리소스 유형에서 지원되는지 서비스 권한 부여 참조에서 확인하세요.
  • 기본적으로 거부 - 조건과 함께 허용 정책을 사용할 때 조건이 충족되지 않으면 액세스가 암시적으로 거부된다는 점을 기억하세요.