특정 Amazon VPC에 대한 액세스를 제한했음에도 불구하고 Amazon S3에 존재하는 내 정적 웹 사이트에 공용 IP 주소가 계속 액세스할 수 있는 이유는 무엇인가요?

3분 분량
0

내 정적 웹 사이트를 호스팅하기 위해 Amazon Simple Storage Service(S3)를 사용합니다. 특정 Amazon Virtual Private Cloud(VPC)에 대한 액세스만 제한하는 버킷 정책을 첨부했습니다. 하지만 공용 IP 주소에서는 여전히 웹 사이트에 액세스할 수 있습니다.

해결 방법

문제를 해결하기 전에 다음 단계를 완료해야 합니다.

  • 최신 구성을 보려면 자신의 웹 브라우저 또는 프록시 캐시를 지웁니다.
  • 버킷에 액세스하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 버킷과 동일한 AWS 리전에 있는지 확인합니다.
  • VPC 엔드포인트를 사용 중인 EC2 인스턴스의 라우팅 테이블에 연결합니다. 이렇게 하면 트래픽이 버킷 정책에서 언급된 VPC ID와 연결됩니다.

버킷 정책 확인

버킷 정책이 VPC의 버킷 액세스를 허용하는지 확인합니다. 이를 확인하려면 자신의 버킷 정책의 문을 검토하세요. 예를 들어, 다음 버킷 정책 문은 vpc-id123456에서 요청을 보내는 조건으로 s3:GetObject를 허용합니다.

{
  "Version": "2012-10-17",
  "Id": "Policy1",
  "Statement": \[{
    "Sid": "Access-to-Trusted-VPC-only",
    "Effect": "Allow",
    "Principal": "\*",
    "Action": "s3:GetObject\*",
    "Resource": "arn:aws:s3:::awsexamplebucket/\*",
    "Condition": {
      "StringEquals": {
        "aws:sourceVpc": "vpc-id123456"
      }
    }
  }\]
}

참고: 정적 웹 사이트 호스팅은 인증되지 않은 (익명) 요청을 허용합니다. 하지만 사용자가 인증하면 보안 인증 정보를 기반으로 액세스 권한을 부여할 수 있습니다. 예를 들어, 사용자가 Amazon S3에 대한 전체 액세스 권한이 있는 AWS ID 및 액세스 관리(IAM) 역할로 인증한다고 가정해 보겠습니다. 이 사용자는 다음 버킷 정책에도 불구하고 여전히 VPC 외부에서 객체를 다운로드할 수 있습니다. 더 제한적인 버킷 정책은 특정 VPC에 대한 액세스 제한을 참조하세요. 특정 VPC에 대한 액세스를 제한하면 VPC에서 하지 않은 요청에 대한 관리자 또는 AWS 계정 루트 사용자의 액세스도 거부됩니다.

객체 액세스 제어 목록(ACL) 확인

버킷 정책이 올바른지 확인한 후 공개 액세스를 허용하는 객체 ACL이 있는지 확인합니다. 일부 객체 ACL에서 공개 액세스를 허용하고 해당 ACL을 재정의하려면 다음 작업 중 하나를 수행하세요.

  • 개별 버킷 또는 자신의 AWS 계정에 대한 공개 액세스 설정을 구성합니다.
  • 버킷 정책에 명시적인 거부 문을 추가합니다.

객체 ACL을 재정의하려면 Amazon S2 콘솔을 사용하여 개별 버킷의 공개 액세스 설정 또는 자기 계정의 공개 액세스 설정을 구성하세요. 다음 옵션을 선택합니다.

  • ** 액세스 제어 목록(ACL)**을 통해 부여된 버킷 및 객체에 대한 공개 액세스 차단
  • **_모든 _액세스 제어 목록(ACL)**을 통해 부여된 버킷 및 객체에 대한 공개 액세스 차단

참고: AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 사용하여 버킷의 공개 액세스 설정을 구성할 수도 있습니다. 자세한 내용은 자신의 Amazon S3 스토리지에 대한 공개 액세스 차단을 참조하세요.

버킷 정책을 사용하여 객체 ACL을 재정의하려면 VPC에서 하는 요청이 아닐 때 작업을 명시적으로 거부하는 문을 추가하세요. 예를 들어, 다음 버킷 정책에는 vpc-id123456에서 보낸 요청이 아닌 경우 s3:GetObject를 명시적으로 거부하는 문이 포함되어 있습니다.

**경고:**이 버킷 정책의 예에는 명시적인 거부 문이 포함되어 있으므로 정책을 저장하기 전에 명시적 액세스 거부에 대한 파라미터를 검토하세요. 실수로 다시 액세스할 수 없다면 실수로 내 Amazon S3 버킷에 대한 모든 사용자의 액세스를 거부했습니다. 다시 액세스하려면 어떻게 해야 하나요?를 참조하세요.

{
  "Version": "2012-10-17",
  "Id": "Policy1",
  "Statement": \[{
      "Sid": "Access-to-Trusted-VPC-only",
      "Effect": "Allow",
      "Principal": "\*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::awsexamplebucket/\*",
      "Condition": {
        "StringEquals": {
          "aws:sourceVpc": "vpc-id123456"
        }
      }
    },
    {
      "Sid": "Deny-Access-Except-For-Trusted-VPC",
      "Effect": "Deny",
      "Principal": "\*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::awsexamplebucket/\*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpc": "vpc-id123456"
        }
      }
    }
  \]
}

관련 정보

AWS 정책 생성기

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음