Amazon S3용 엔드포인트 - Amazon Virtual Private Cloud

Amazon S3용 엔드포인트

VPC에서 Amazon S3 리소스로의 액세스를 이미 설정한 경우, 엔드포인트를 설정한 후에도 Amazon S3 DNS 이름을 사용하여 이러한 리소스에 액세스할 수 있습니다. 하지만 다음에 유의하세요.

  • 엔드포인트에는 Amazon S3 리소스에 액세스하기 위한 엔드포인트 사용을 제어하는 정책이 있습니다. 기본 정책은 VPC 내의 모든 사용자 또는 서비스가 자격 증명을 사용하여 아무 AWS 계정에서 아무 Amazon S3 리소스에 액세스할 수 있도록 허용합니다. VPC가 연결된 계정이 아닌 다른 AWS 계정에 대한 Amazon S3 리소스도 마찬가지입니다. 자세한 내용은 VPC 종단점으로 서비스에 대한 액세스 제어 단원을 참조하세요.

  • Amazon S3가 수신한 해당 서브넷에 있는 인스턴스의 원본 IPv4 주소는 VPC의 퍼블릭 IPv4 주소에서 프라이빗 IPv4 주소로 변경됩니다. 엔드포인트는 네트워크 라우팅을 스위칭하고 열린 TCP 연결을 끊습니다. 퍼블릭 IPv4 주소를 사용한 이전 연결이 다시 시작되지 않습니다. 따라서 엔드포인트를 만들거나 수정할 때는 중요한 작업을 실행하지 않는 것이 좋으며 연결이 끊어진 후에는 소프트웨어가 자동으로 Amazon S3에 다시 연결할 수 있는지 테스트해야 합니다.

  • IAM 정책 또는 버킷 정책을 사용하여 VPC IPv4 CIDR 범위(프라이빗 IPv4 주소 범위)로부터의 액세스를 허용할 수 없습니다. VPC CIDR 블록이 중첩되거나 동일할 수 있고 이로 인해 예기치 않은 결과가 발생할 수 있습니다. 따라서 VPC 엔드포인트를 통해 Amazon S3에 요청할 때는 IAM 정책에 aws:SourceIp 조건을 사용할 수 없습니다. 사용자 및 역할의 IAM 정책과 모든 버킷 정책에도 같은 사항이 적용됩니다. 문에 aws:SourceIp 조건이 포함되어 있는 경우, 값이 제공된 IP 주소 또는 범위와 일치하지 않습니다. 대신에 다음 작업을 할 수 있습니다.

    • 라우팅 테이블을 사용하여 엔드포인트를 통해 Amazon S3의 리소스에 액세스할 수 있는 인스턴스를 제어할 수 있습니다.

    • 버킷 정책의 경우 특정 엔드포인트 또는 특정 VPC에 대한 액세스를 제한할 수 있습니다. 자세한 내용은 Amazon S3 버킷 정책 단원을 참조하세요.

  • 현재 엔드포인트는 교차 리전 요청을 지원하지 않습니다. 버킷과 같은 리전에 엔드포인트를 생성하는지 확인하세요. Amazon S3 콘솔 또는 get-bucket-location 명령을 사용하여 버킷의 위치를 확인할 수 있습니다. 리전별 Amazon S3 엔드포인트를 사용하여 버킷에 액세스하세요(예: mybucket.s3.us-west-2.amazonaws.com). Amazon S3의 리전별 엔드포인트에 대한 자세한 내용은 Amazon Web Services 일반 참조Amazon Simple Storage Service(S3)를 참조하세요. AWS CLI를 사용하여 Amazon S3에 요청할 경우, 기본 리전을 버킷과 동일한 리전으로 설정하거나 요청에 --region 파라미터를 사용하세요.

    참고

    Amazon S3의 미국 표준 리전이 us-east-1 리전에 매핑된 것으로 간주합니다.

  • 엔드포인트는 현재 IPv4 트래픽에 대해서만 지원됩니다.

Amazon S3에서 엔드포인트를 사용하기 전에 게이트웨이 엔드포인트 제한에 있는 일반 제한 사항을 읽으세요. S3 버킷 생성 및 확인에 관한 자세한 내용은 Amazon Simple Storage Service Console 사용 설명서S3 버킷을 생성하려면 어떻게 해야 하나요S3 버킷의 속성을 보려면 어떻게 해야 하나요를 참조하세요.

VPC에서 다른 AWS 서비스를 사용할 경우, 이 서비스에서 특정 태스크에 S3 버킷을 사용할 수도 있습니다. 엔드포인트 정책이 Amazon S3에 대한 모든 액세스를 허용하도록 하거나(기본 정책), 이 서비스에서 사용하는 특정 버킷에 대한 액세스를 허용해야 합니다. 또는 이러한 서비스 중 어느 서비스도 사용하지 않는 서브넷에 엔드포인트를 만들어서 서비스가 퍼블릭 IP 주소를 사용하여 S3 버킷에 계속 액세스하도록 허용합니다.

다음 표에는 엔드포인트의 영향을 받을 수 있는 AWS 서비스와 각 서비스에 대한 특정 정보가 나와 있습니다.

AWS 서비스 참고
Amazon AppStream 2.0 엔드포인트 정책이 사용자 콘텐츠를 저장할 수 있도록 AppStream 2.0이 사용하는 특정 버킷에 대한 액세스를 허용해야 합니다. 자세한 내용은 Amazon AppStream 2.0 관리 안내서홈 폴더 및 애플리케이션 설정 지속성을 위한 Amazon S3 VPC 엔드포인트 사용을 참조하세요.
AWS CloudFormation VPC에 대기 조건 또는 사용자 지정 리소스에 응답해야 하는 리소스가 있을 경우, 엔드포인트 정책은 최소한 이러한 리소스가 사용하는 특정 버킷에 대해 액세스를 허용해야 합니다. 자세한 내용은 AWS CloudFormation에 대한 VPC 엔드포인트 설정을 참조하세요.
CodeDeploy 엔드포인트 정책이 Amazon S3에 대한 모든 액세스를 허용하거나, CodeDeploy 배포를 위해 만든 S3 버킷에 대한 액세스를 허용해야 합니다.
Elastic Beanstalk 엔드포인트 정책이 최소한 Elastic Beanstalk 애플리케이션에 사용하는 S3 버킷에 대한 액세스는 허용해야 합니다. 자세한 내용은 AWS Elastic Beanstalk 개발자 안내서Amazon S3와 함께 Elastic Beanstalk 사용을 참조하세요.
Amazon EMR 엔드포인트 정책은 Amazon EMR에서 사용하는 Amazon Linux 리포지토리 및 기타 버킷에 대한 액세스를 허용해야 합니다. 자세한 내용은 Amazon EMR 관리 안내서프라이빗 서브넷에 대한 최소 Amazon S3 정책을 참조하세요.
AWS OpsWorks 엔드포인트 정책이 최소한 가 사용하는 특정 버킷에 대해 액세스를 허용해야 합니다AWS OpsWorks 자세한 내용은 AWS OpsWorks 사용 설명서VPC에서 스택 실행을 참조하세요.
AWS Systems Manager

AWS 리전의 패치 기준선 작업을 위해, 엔드포인트 정책이 패치 관리자가 사용하는 Amazon S3 버킷에 대한 액세스를 허용해야 합니다. 이 버킷에는 패치 기준선 서비스가 가져와 인스턴스에서 실행하는 코드가 포함되어 있습니다. 자세한 내용은 AWS Systems Manager 사용 설명서Virtual Private Cloud 엔드포인트 생성을 참조하세요.

이 작업의 SSM Agent에 필요한 S3 버킷 권한 목록은 AWS Systems Manager 사용 설명서SSM 에이전트를 위한 최소 S3 버킷 권한 섹션을 참조하세요.

Amazon Elastic 컨테이너 레지스트리 엔드포인트 정책이 Amazon ECR이 Docker 이미지 레이어를 저장하는 데 사용하는 Amazon S3 버킷에 대한 액세스를 허용해야 합니다. 자세한 내용은 Amazon Elastic Container Registry 사용 설명서Amazon ECR을 위한 최소 Amazon S3 버킷 권한을 참조하세요.
Amazon WorkDocs Workspaces의 Amazon WorkDocs 클라이언트나 EC2 인스턴스를 사용하는 경우, 엔드포인트 정책은 Amazon S3에 대한 모든 액세스를 허용해야 합니다.
WorkSpaces WorkSpaces는 Amazon S3에 직접적으로 구애받지 않습니다. 하지만 WorkSpaces 사용자에게 인터넷 액세스를 제공한 경우 다른 회사의 웹 사이트, HTML 이메일 및 인터넷 서비스가 Amazon S3를 의존할 수는 있습니다. 이러한 서비스가 올바르게 작동하려면 엔드포인트 정책이 Amazon S3에 대한 모든 액세스를 허용해야 합니다.

VPC 및 S3 버킷 간 트래픽은 Amazon 네트워크를 벗어나지 않습니다.

Amazon S3에 대한 엔드포인트 정책

다음은 Amazon S3에 액세스하기 위한 엔드포인트 정책의 예입니다. 자세한 내용은 VPC 종단점 정책 사용 단원을 참조하세요. 비즈니스 요구를 충족하는 정책 제한은 사용자가 결정합니다.

중요

IAM 사용자 정책, 엔드포인트 정책, S3 버킷 정책 및 Amazon S3 ACL 정책(있는 경우)을 비롯한 모든 유형의 정책은 Amazon S3에 액세스하기 위해 필요한 권한을 부여해야 합니다.

AWS는 엔드포인트의 특정 호출자의 사용을 제한하는 경우 VPC 엔드포인트 정책에서 IAM Principal 요소 대신, IAM 조건을 사용하도록 권장합니다. 이러한 조건의 예로는 aws:PrincipalArn, aws:PrincipalAccount, aws:PrincipalOrgId, aws:PrincipalOrgPaths가 있습니다. 글로벌 조건 컨텍스트 키에 대한 자세한 내용은 AWS Identity and Access Management IAM 사용 설명서AWS 글로벌 조건 컨텍스트 키를 참조하세요.

예: 특정 버킷에 대한 액세스 제한

특정 S3 버킷에 대해서만 액세스를 제한하는 정책을 만들 수 있습니다. 이는 VPC에 S3 버킷을 사용하는 다른 AWS 서비스가 있을 경우 유용합니다. 다음은 지정된 버킷에 대해서만 액세스를 제한하는 정책의 예입니다.

{ "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::example-bucket", "arn:aws:s3:::example-bucket/*" ] }

예: 이 VPC 종단점을 계정의 특정 IAM 역할만 사용하도록 제한

VPC 종단점을 특정 IAM 역할만 사용하도록 제한하는 정책을 생성할 수 있습니다. 다음은 지정된 계정의 지정된 역할로 액세스를 제한하는 예입니다.

{ "Sid": "Restrict-acess-to-specific-IAM-role", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "ArnEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/SomeRole" } } }

예: 이 VPC 종단점을 특정 계정의 사용자만 사용하도록 제한

VPC 종단점을 특정 계정만 사용하도록 제한하는 정책을 생성할 수 있습니다. 다음은 지정된 계정의 사용자로 액세스를 제한하는 예입니다.

{ "Sid": "AllowCallersFromAccount111122223333", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalAccount": "111122223333" } } }

예: Amazon Linux AMI 리포지토리 액세스 활성화

Amazon Linux AMI 리포지토리는 각 리전의 Amazon S3 버킷입니다. VPC의 인스턴스가 엔드포인트를 통해 리포지토리에 액세스하도록 하려면 이러한 버킷에 액세스하게 하는 엔드포인트 정책을 만들 수 있습니다.

다음 정책은 사용자가 Amazon Linux 리포지토리에 읽기 전용 액세스를 할 수 있도록 허용합니다.

region을 해당 AWS 리전 us-east-1로 대체해야 합니다.

{ "Statement": [ { "Sid": "AmazonLinuxAMIRepositoryAccess", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::packages.region.amazonaws.com/*", "arn:aws:s3:::repo.region.amazonaws.com/*" ] } ] }

다음 정책은 사용자가 Amazon Linux 2 리포지토리에 읽기 전용 액세스를 할 수 있도록 허용합니다.

region을 해당 AWS 리전 us-east-1로 대체해야 합니다.

{ "Statement": [ { "Sid": "AmazonLinux2AMIRepositoryAccess", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amazonlinux.region.amazonaws.com/*" "arn:aws:s3:::amazonlinux-2-repos-region/*" ] } ] }

Amazon S3 버킷 정책

버킷 정책을 사용하여 특정 엔드포인트, VPC, IP 주소 범위 또는 AWS 계정의 버킷에 대한 액세스를 제어할 수 있습니다.

VPC 엔드포인트를 통해서 Amazon S3에 요청할 때는 버킷 정책에 aws:SourceIp 조건을 사용할 수 없습니다. 조건이 지정된 IP 주소 또는 IP 주소 범위와 일치하지 않으므로 Amazon S3 버킷에 요청 시 원하지 않는 결과가 나타날 수 있습니다. 다음 예를 참조하세요.

  • 버킷 정책에 Deny 결과와 하나 또는 제한된 범위의 IP 주소에서의 액세스만 허용하는 NotIpAddress 조건이 있습니다. 엔드포인트를 통해 버킷에 요청하는 경우, NotIpAddress 조건이 항상 일치되므로 문의 결과가 적용됩니다(정책의 다른 제약이 일치한다고 가정). 버킷에 대한 액세스는 거부됩니다.

  • 버킷 정책에 Deny 결과와 하나 또는 제한된 범위의 IP 주소에 대해서만 액세스를 거부하는 IpAddress 조건이 포함되어 있습니다. 엔드포인트를 통해 버킷에 요청하는 경우, 조건이 일치되지 않으므로 문이 적용되지 않습니다. IpAddress 조건 없이 액세스를 허용하는 다른 문이 있다고 가정하면 버킷에 대한 액세스가 허용됩니다.

대신 aws:VpcSourceIp를 사용하여 특정 IP 주소 범위의 액세스를 제어합니다.

IAM 사용자가 버킷 정책을 사용할 수 있도록 하려면 s3:GetBucketPolicys3:PutBucketPolicy 작업을 사용할 권한을 그 사용자에게 부여해야 합니다.

Amazon S3의 버킷 정책에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서버킷 정책 및 사용자 정책 사용을 참조하세요.

예: 특정 엔드포인트에 대한 액세스 제한

aws:sourceVpce 조건을 사용하여 특정 엔드포인트에 대한 액세스를 제한하는 버킷 정책을 만들 수 있습니다. 다음은 엔드포인트 vpce-1a2b3c4d의 버킷인 example_bucket에 대해서 액세스를 허용하는 S3 버킷 정책의 예입니다. 이 정책은 지정된 엔드포인트가 사용되지 않으면 버킷에 대한 모든 액세스를 거부합니다. aws:sourceVpce 조건은 VPC 엔드포인트 리소스에 대한 ARN을 요구하지 않고 엔드포인트 ID만 요구합니다.

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }

예: 특정 VPC에 대한 액세스 제한

aws:sourceVpc 조건을 사용하여 특정 VPC에 대한 액세스를 제한하는 버킷 정책을 만들 수 있습니다. 이는 같은 VPC에 여러 엔드포인트가 구성되어 있으며, 모든 엔드포인트의 S3 버킷에 대한 액세스를 관리하려는 경우에 유용합니다. 다음은 VPC vpc-111bbb22example_bucket과 해당 객체에 액세스할 수 있도록 허용하는 정책의 예입니다. 이 정책은 지정된 VPC가 사용되지 않으면 버킷에 대한 모든 액세스를 거부합니다. aws:sourceVpc 조건은 VPC 리소스의 ARN을 요구하지 않고 VPC ID만 요구합니다.

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPC-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-111bbb22" } } } ] }

예: 특정 IP 주소 범위에 대한 액세스 제한

aws:VpcSourceIp 조건을 사용하여 특정 IP 주소 범위에 대한 액세스를 제한하는 버킷 정책을 만들 수 있습니다. 다음은 172.31.0.0/16에서 example_bucket 및 해당 객체에 액세스할 수 있도록 허용하는 정책의 예입니다. 이 정책은 다른 IP 주소 범위로부터 버킷에 대한 액세스를 거부합니다.

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPC-CIDR-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "NotIpAddress": { "aws:VpcSourceIp": "172.31.0.0/16" } } } ] }

예: 특정 AWS 계정의 버킷에 대한 액세스 제한

s3:ResourceAccount 조건을 사용하여 특정 AWS 계정의 S3 버킷에 대한 액세스를 제한하는 만들 수 있습니다. 이 정책은 VPC 내의 클라이언트가 자신이 소유하지 않은 버킷에 액세스하지 못하도록 제한하려는 경우에 유용합니다. 다음은 계정 ID가 111122223333인 단일 AWS 계정이 소유한 리소스에 대한 액세스를 제한하는 정책의 예입니다.

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-bucket-in-specific-account-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "111122223333" } } } ] }