내 Amazon S3 버킷에 액세스할 수 있는 VPC 엔드포인트 또는 IP 주소를 지정하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 12월 18일

특정 Amazon Virtual Private Cloud(VPC) 엔드포인트 또는 특정 외부 IP 주소로부터의 트래픽을 제외하고 Amazon Simple Storage Service(Amazon S3) 버킷으로의 모든 트래픽을 차단하고 싶습니다. 또는 버킷을 사용하여 정적 웹 사이트를 호스팅하고 있으며 특정 VPC 엔드포인트 또는 IP 주소에서만 웹 사이트에 액세스할 수 있도록 하고 싶습니다. 어떻게 해야 합니까?

해결 방법

버킷 정책을 사용하여 S3 버킷에 액세스할 수 있는 VPC 엔드포인트 또는 외부 IP 주소를 지정합니다.

참고: 외부 IP 주소는 VPC 내부 또는 외부에서 이루어질 수 있는 퍼블릭 IP 주소입니다. 예를 들어 외부 IP 주소는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 탄력적 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: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 버킷 액세스를 거부했습니다. 액세스 권한을 다시 부여하려면 어떻게 해야 합니까?를 참조하십시오.

사용자가 허용된 VPC 엔드포인트 또는 IP 주소에서 요청을 전송하지 않더라도 특정 사용자(동일한 AWS 계정 내)가 버킷에 액세스하도록 허용해야 하는 경우 버킷 정책의 동일한 조건 블록 내에 다음 문을 포함할 수 있습니다.

  • AROAEXAMPLEID는 허용하고자 하는 IAM 역할의 역할 ID입니다.
  • AIDAEXAMPLEID는 허용하고자 하는 IAM 사용자의 사용자 ID입니다.
  • 111111111111은 버킷의 AWS 계정 ID로, 계정의 루트 자격 증명을 나타냅니다.
"StringNotLike": {
"aws:userId": [
"AROAEXAMPLEID:*",
"AIDAEXAMPLEID",
"111111111111"
]
}

특정 IAM 역할에 액세스 권한을 부여하는 방법에 대한 자세한 내용은 특정 IAM 역할에 대한 Amazon S3 버킷 액세스를 제한하는 방법을 참조하십시오.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?