특정 Amazon Virtual Private Cloud(VPC) 엔드포인트 또는 특정 IP 주소에서 유입되지 않는 모든 트래픽을 차단하고 싶습니다. 또는 정적 웹 사이트를 호스팅하기 위해 Amazon Simple Storage Service(Amazon S3) 버킷을 사용하고 있습니다. 웹 사이트는 특정 VPC 엔드포인트 또는 IP 주소에서 액세스할 수 있어야 합니다. 어떻게 해야 하나요?
해결 방법
경고: 이 문서의 예시 버킷 정책은 허용된 VPC 엔드포인트나 IP 주소 외의 모든 요청에 대한 액세스를 명시적으로 거부합니다. 저장하기 전에 버킷 정책을 신중하게 검토해야 합니다.
버킷 정책을 사용하여 S3 버킷에 액세스할 수 있는 VPC 엔드포인트, VPC 소스 IP 주소 또는 외부 IP 주소를 지정합니다.
참고: VPC 소스 IP 주소는 VPC 내부의 프라이빗 IP 주소입니다. 프라이빗 주소는 인터넷을 통해 연결할 수 없으며 VPC의 인스턴스 간 통신에 사용할 수 있습니다. 예를 들어 프라이빗 IP 주소는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 프라이빗 IP 주소일 수 있습니다.
외부 IP 주소는 VPC 내부 또는 VPC 외부에 있을 수 있는 퍼블릭 IP 주소입니다. 예를 들어 외부 IP 주소는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 탄력적 또는 퍼블릭 IP 주소일 수 있습니다. 외부 IP 주소는 VPC의 NAT 게이트웨이 또는 프록시 서버의 IP 주소일 수도 있습니다.
다음의 예시 버킷 정책은 지정된 VPC 엔드포인트(aws:sourceVpce)에서 온 요청이 아니면 버킷에 대한 트래픽을 차단합니다.
{
"Id": "VPCe",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VPCe",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": [
"vpce-1111111",
"vpce-2222222"
]
}
},
"Principal": "*"
}
]
}
참고:
다음의 예시 버킷 정책은 지정된 프라이빗 IP 주소(aws:VpcSourceIp)에서 온 요청이 아니면 버킷에 대한 트래픽을 차단합니다.
{
"Id": "VpcSourceIp",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VpcSourceIp",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"NotIpAddress": {
"aws:VpcSourceIp": [
"10.1.1.1/32",
"172.1.1.1/32"
]
}
},
"Principal": "*"
}
]
}
참고: 이 정책을 aws:VpcSourceIP 조건과 함께 사용하려면 Amazon S3용 VPC 엔드포인트를 연결해야 합니다. VPC 엔드포인트는 EC2 인스턴스 서브넷의 라우팅 테이블에 연결되어야 하고, 버킷과 동일한 AWS 리전에 있어야 합니다.
다음의 예시 버킷 정책은 지정된 외부 IP 주소(aws:SourceIp)에서 온 요청이 아니면 버킷에 대한 트래픽을 차단합니다.
{
"Id": "SourceIP",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SourceIP",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"11.11.11.11/32",
"22.22.22.22/32"
]
}
},
"Principal": "*"
}
]
}
경고: 이러한 예시 버킷 정책에서는 허용된 VPC 엔드포인트나 IP 주소 외의 모든 요청에 분명히 액세스를 거부합니다. 버킷 정책을 입력한 사용자라도 조건을 충족하지 않으면 버킷에 대한 액세스가 거부될 수 있습니다. 따라서 저장하기 전에 버킷 정책을 신중하게 검토해야 합니다. 실수로 액세스가 차단된 경우, 실수로 모든 사용자의 Amazon S3 버킷 액세스를 거부했습니다. 액세스 권한을 다시 얻으려면 어떻게 해야 합니까?를 참조하세요.
동일한 AWS 계정 내의 특정 사용자가 버킷에 액세스할 수 있도록 허용해야 하는 경우 Condition 블록에 다음 문을 포함시킵니다.
- AROAEXAMPLEID는 허용하고자 하는 IAM 역할의 역할 ID입니다.
- AIDAEXAMPLEID는 허용하고자 하는 IAM 사용자의 사용자 ID입니다.
- 111111111111은 버킷의 AWS 계정 ID로, AWS 계정 루트 사용자의 자격 증명을 나타냅니다.
예를 들어 다음과 같습니다.
"Condition": {
"StringNotLike": {
"aws:userId": [
"AROAEXAMPLEID:*",
"AIDAEXAMPLEID",
"111111111111"
]
}
}
특정 IAM 역할에 액세스 권한을 부여하는 방법에 대한 자세한 내용은 특정 IAM 역할에 대한 Amazon S3 버킷 액세스를 제한하는 방법을 참조하세요.
관련 정보
VPC 엔드포인트