액세스 포인트 사용을 위한 IAM 정책 구성

액세스 포인트 사용을 위한 IAM 정책 구성 (Configuring IAM policies for using access points)

Amazon S3 액세스 포인트는 AWS Identity and Access Management(IAM) 리소스 정책을 지원해서, 리소스, 사용자 또는 기타 조건별로 액세스 포인트 사용을 제어할 수 있게 해줘요. 애플리케이션 또는 사용자가 액세스 포인트를 통해 객체에 접근하려면, 액세스 포인트와 기본 버킷 또는 Amazon FSx 파일 시스템 둘 다 요청을 허용해야 해요.

출처: 문서

본문

중요 — 액세스 포인트 정책에 포함한 제한 사항은 그 액세스 포인트를 통해 이루어지는 요청에만 적용돼요. 액세스 포인트를 버킷에 연결해도 기본 리소스의 동작은 바뀌지 않아요. 액세스 포인트를 통해 이루어지지 않는 버킷에 대한 기존 작업은 모두 이전처럼 계속 작동해요.

IAM 리소스 정책을 사용할 때는 정책을 저장하기 전에 AWS Identity and Access Management Access Analyzer의 보안 경고, 오류, 일반 경고, 제안을 해결하세요. IAM Access Analyzer는 IAM 정책 문법과 모범 사례에 대해 정책을 검증하는 정책 검사를 실행해요. 이 검사는 발견 항목을 생성하고 기능적이고 보안 모범 사례를 따르는 정책을 작성하는 데 도움이 되는 권장 사항을 제공해요.

IAM Access Analyzer로 정책을 검증하는 방법에 대한 자세한 내용은 IAM User Guide의 IAM Access Analyzer 정책 검증을 참고하세요. IAM Access Analyzer가 반환하는 경고, 오류, 제안 목록은 IAM Access Analyzer 정책 검사 참조를 참고하세요.

액세스 포인트 정책 예시

다음 예시들은 액세스 포인트를 통해 이루어지는 요청을 제어하는 IAM 정책을 만드는 방법을 보여줘요.

참고 — 액세스 포인트 정책에서 부여한 권한은 기본 버킷도 같은 접근을 허용할 때만 유효해요. 두 가지 방법으로 이렇게 할 수 있어요.

  • (권장) 액세스 포인트에 접근 제어 위임에 설명된 대로 버킷에서 액세스 포인트로 접근 제어를 위임해요.
  • 액세스 포인트 정책에 포함된 권한과 같은 권한을 기본 버킷의 정책에 추가해요. 예제 1 액세스 포인트 정책 예시는 필요한 접근을 허용하도록 기본 버킷 정책을 수정하는 방법을 보여줘요.

예제 1 – 액세스 포인트 정책 grant

다음 액세스 포인트 정책은 계정 123456789012의 IAM 사용자 Jane에게 계정 123456789012의 my-access-point 액세스 포인트를 통해 Jane/ 접두사를 가진 객체를 GET하고 PUT할 권한을 부여해요.

{
    "Version":"2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Jane"
        },
        "Action": ["s3:GetObject", "s3:PutObject"],
        "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/Jane/*"
    }]
}

참고 — 액세스 포인트 정책이 Jane에게 접근을 효과적으로 부여하려면 기본 버킷도 Jane에게 같은 접근을 허용해야 해요. 액세스 포인트에 접근 제어 위임에 설명된 대로 버킷에서 액세스 포인트로 접근 제어를 위임할 수 있어요. 또는 다음 정책을 기본 버킷에 추가해 Jane에게 필요한 권한을 부여할 수 있어요. 액세스 포인트 정책과 버킷 정책의 Resource 항목이 다르다는 점을 주목하세요.

{
    "Version":"2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Jane"
        },
        "Action": ["s3:GetObject", "s3:PutObject"],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/Jane/*"
    }]    
}

예제 2 – 태그 조건이 있는 액세스 포인트 정책

다음 액세스 포인트 정책은 계정 123456789012의 IAM 사용자 Mateo에게 계정 123456789012의 my-access-point 액세스 포인트를 통해 data라는 태그 키가 finance 값으로 설정된 객체를 GET할 권한을 부여해요.

{
    "Version":"2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Mateo"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/*",
        "Condition": {
            "StringEquals": {
                "s3:ExistingObjectTag/data": "finance"
            }
        }
    }]
}

예제 3 – 버킷 목록을 허용하는 액세스 포인트 정책

다음 액세스 포인트 정책은 계정 123456789012의 IAM 사용자 Arnav에게 계정 123456789012의 my-access-point 액세스 포인트의 기본이 되는 버킷에 포함된 객체를 볼 권한을 부여해요.

{
    "Version":"2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Arnav"
        },
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point"
    }]
}

예제 4 – 서비스 제어 정책

다음 서비스 제어 정책은 모든 새 액세스 포인트가 가상 사설 클라우드(VPC) 네트워크 오리진으로 생성되도록 요구해요. 이 정책이 있으면 조직의 사용자는 인터넷에서 접근 가능한 새 액세스 포인트를 만들 수 없어요.

{
    "Version":"2012-10-17",
    "Statement": [
    {
        "Effect": "Deny",
        "Action": "s3:CreateAccessPoint",
        "Resource": "*",
        "Condition": {
            "StringNotEquals": {
                "s3:AccessPointNetworkOrigin": "VPC"
            }
        }
    }]
}

예제 5 – S3 작업을 VPC 네트워크 오리진으로 제한하는 버킷 정책

다음 버킷 정책은 amzn-s3-demo-bucket 버킷에 대한 모든 S3 객체 작업의 접근을 VPC 네트워크 오리진을 가진 액세스 포인트로 제한해요.

중요 — 이 예시의 문과 같은 문을 사용하기 전에 Cross-Region Replication 같이 액세스 포인트가 지원하지 않는 기능을 사용할 필요가 없는지 확인하세요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:BypassGovernanceRetention",
                "s3:DeleteObject",
                "s3:DeleteObjectTagging",
                "s3:DeleteObjectVersion",
                "s3:DeleteObjectVersionTagging",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectLegalHold",
                "s3:GetObjectRetention",
                "s3:GetObjectTagging",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging",
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionAcl",
                "s3:PutObjectVersionTagging",
                "s3:RestoreObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:AccessPointNetworkOrigin": "VPC"
                }
            }
        }
    ]
}

조건 키

S3 액세스 포인트에는 IAM 정책에서 리소스 접근을 제어하는 데 사용할 수 있는 조건 키가 있어요. 다음 조건 키는 IAM 정책의 일부만 나타내요. 전체 정책 예시는 액세스 포인트 정책 예시, 액세스 포인트에 접근 제어 위임, 계정 간 액세스 포인트에 대한 권한 부여를 참고하세요.

s3:DataAccessPointArn

액세스 포인트 ARN에 매칭하는 데 사용할 수 있는 문자열을 보여주는 예시예요. 다음 예시는 리전 us-west-2에서 AWS 계정 123456789012의 모든 액세스 포인트에 매칭해요.

"Condition" : {
    "StringLike": {
        "s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*"
    }
}

s3:DataAccessPointAccount

액세스 포인트 소유자의 계정 ID에 매칭하는 데 사용할 수 있는 문자열 연산자를 보여주는 예시예요. 다음 예시는 AWS 계정 123456789012가 소유한 모든 액세스 포인트에 매칭해요.

"Condition" : {
    "StringEquals": {
        "s3:DataAccessPointAccount": "123456789012"
    }
}

s3:AccessPointNetworkOrigin

Internet 또는 VPC 중에서 네트워크 오리진에 매칭하는 데 사용할 수 있는 문자열 연산자를 보여주는 예시예요. 다음 예시는 VPC 오리진을 가진 액세스 포인트에만 매칭해요.

"Condition" : {
    "StringEquals": {
        "s3:AccessPointNetworkOrigin": "VPC"
    }
}

Amazon S3와 조건 키 사용에 대한 자세한 내용은 Service Authorization Reference의 Amazon S3의 작업, 리소스, 조건 키를 참고하세요.

S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한을 참고하세요.

액세스 포인트에 접근 제어 위임

버킷에 대한 접근 제어를 버킷의 액세스 포인트로 위임할 수 있어요. 다음 예제 버킷 정책은 버킷 소유자 계정이 소유한 모든 액세스 포인트에 전체 접근을 허용해요. 따라서 이 버킷에 대한 모든 접근은 액세스 포인트에 연결된 정책으로 제어돼요. 버킷에 대한 직접 접근이 필요하지 않은 모든 사용 사례에 이 방식으로 버킷을 구성하는 걸 권장해요.

예제 6 – 액세스 포인트에 접근 제어를 위임하는 버킷 정책

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

계정 간 액세스 포인트에 대한 권한 부여

다른 계정이 소유한 버킷에 대한 액세스 포인트를 만들려면 먼저 버킷 이름과 계정 소유자 ID를 지정해 액세스 포인트를 만들어야 해요. 그런 다음 버킷 소유자가 버킷 정책을 업데이트해 액세스 포인트의 요청을 인가해야 해요. 액세스 포인트를 만드는 것은 DNS CNAME을 만드는 것과 비슷한데, 액세스 포인트가 버킷 내용에 대한 접근을 제공하지는 않아요. 모든 버킷 접근은 버킷 정책으로 제어돼요. 다음 예제 버킷 정책은 신뢰할 수 있는 AWS 계정이 소유한 액세스 포인트에서 버킷에 대한 GET 및 LIST 요청을 허용해요.

Bucket ARN을 버킷의 ARN으로 바꾸세요.

예제 7 – 다른 AWS 계정에 권한을 위임하는 버킷 정책

{
    "Version":"2012-10-17",
    "Statement" : [
    {
        "Effect": "Allow",
        "Principal" : { "AWS": "*" },
        "Action" : ["s3:GetObject","s3:ListBucket"],
        "Resource" : ["arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*"],
        "Condition": {
            "StringEquals" : { "s3:DataAccessPointAccount" : "Access point owner's account ID" }
        }
    }]
}

참고 — 계정 간 액세스 포인트는 S3 버킷에 연결된 액세스 포인트에서만 사용할 수 있어요. 다른 AWS 계정이 소유한 Amazon FSx 파일 시스템의 볼륨에는 액세스 포인트를 연결할 수 없어요.

더 알아보기 (Learn more)