Route 53에서 S3으로 별칭 대상을 설정하려고 할 때 사용할 수있는 대상이 없습니다.


21

여기에 설명 된 것처럼 간단한 Amazon AWS S3 기반 웹 사이트를 설정하려고합니다 .

S3 버킷 (simples3websitetest.com)을 설정하고 (권장) 올바른 권한을 부여했습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::simples3websitetest.com/*"
            ]
        }
    ]
}

index.html을 업로드하고 웹 사이트 액세스를 설정했으며 http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html을 통해 액세스 할 수 있습니다 .

지금까지는 Amazon Route53 액세스를 설정하고 싶습니다. 이곳에서 문제가 발생했습니다.

내가 소유 한 도메인 (resourcesbox.net)에 호스팅 영역을 설정하고 "레코드 세트 생성"을 클릭 한 후 "설정 별칭"단계에 도달했지만 S3 웹 사이트 엔드 포인트에서 "사용 가능한 대상 없음"이 표시됩니다. 별칭 대상을 설정하십시오.

내가 놓친 게 무엇입니까??


2012 년 10 월부터 Amazon은 S3 버킷의 리디렉션 (HTTP 301)을 처리하는 기능을 도입했습니다. 내 이전 답변을 여기서 읽을 수 있습니다. stackoverflow.com/a/24218895/1160780
— Alberto Spelta

답변:


33

S3에서 버킷을 가상으로 호스팅하려면 Host:브라우저에서 전송 한 헤더가 버킷 이름과 일치 해야하므로 생성 한 A 레코드 별칭은 버킷 이름과 같아야합니다 . 실제로 버킷의 가상 호스팅을 수행 할 수있는 또 다른 실용적인 방법은 없습니다. 버킷은 일부 메커니즘으로 식별되어야하며 해당 메커니즘은 http 헤더입니다.

"example.com"도메인 내의 버킷에 대한 별칭을 생성하려면 버킷 이름도 해당 도메인 내에서 합법적으로 선언 할 수있는 호스트 이름이어야합니다. Route 53 A-Record "testbucket.example 예를 들어 .com "은 "testbucket.example.com "이라는 버킷 에만 별칭을 지정할 수 있으며 다른 버킷은 사용할 수 없습니다.

귀하의 질문에, 당신은이 제약 조건을 깨뜨리고 있지만 "simples3websitetest.com"도메인 내부 및 (정점에서) "simples3websitetest.com"버킷에 대한 별칭 만 만들 수 있습니다.

이것은 의도적으로 설계된 것으로 Route 53이나 S3의 제한이 아닙니다. 그들은 당신이 아마도 할 수없는 일을하지 못하게합니다. 웹 서버는 앨리어싱이나 CNAME 또는 DNS에서 수행 된 다른 작업을 인식하지 못합니다. 브라우저가 보낸 HTTP 헤더에서 브라우저가 연결을 시도한다고 생각하는 원래 호스트 이름 만 수신합니다. 가상 호스팅 요청이 적용되는 버킷의 이름을 식별하기위한 정보.

Amazon S3에서는 버킷과 도메인 이름을 동일하게 지정해야합니다. 이는 사용자가 웹 사이트에서 콘텐츠를 요청할 때 Amazon S3가 웹 브라우저에서 전송 한 호스트 헤더를 올바르게 확인할 수 있도록하기위한 것입니다. 따라서 도메인 이름을 등록하기 전에 요금을 지불하기 전에 Amazon S3에서 웹 사이트에 대한 버킷을 생성하는 것이 좋습니다.

http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-bucket.html#bucket-requirements

그러나이 제한은 버킷 앞에서 CloudFront를 사용하지 않는 경우에만 적용됩니다.

CloudFront를 사용 Host:하면 요청이 S3에 전달되기 전에 헤더를 CloudFront 자체에서 다시 작성할 수 있으므로 유연성이 더욱 향상 됩니다. CloudFront 배포에서 "origin host"를 구성합니다. your-bucket.s3-website-xx-yyyy-n.amazonaws.com여기서 xx-yyyy-n은 버킷이 생성 된 S3의 AWS 리전입니다. 이 엔드 포인트는 각 버킷의 S3 콘솔에 표시됩니다.


1
이것은 실제로 문제 였고, resourcesbox.net이라는 버킷을 만들었고 표시되었습니다. 고맙습니다! 빠른 후속 질문 : 이는 해당 도메인에 다른 버킷을 사용하려면 각 버킷에 맞는 하위 도메인이 있어야한다는 의미입니다. 주위에 방법이 없습니까?
— Amir Zucker

"하위 도메인이 있어야합니다."가 무슨 뜻인지 잘 모르겠습니다. S3에서 웹 사이트를 호스팅하는 데 사용하려는 각 버킷과 일치하는 호스트 이름으로 Route 53에 A 레코드를 만들어야합니다. 예.
— Michael-sqlbot

1
@oberstet이 질문은 alias웹 사이트 호스팅이 활성화 된 S3 버킷을 가리키는 Route 53 레코드 에 관한 것입니다 . 이로 인해 DNS가 REST 엔드 포인트가 아닌 웹 사이트 엔드 포인트로 해석됩니다. 웹 사이트 엔드 포인트 는 SSL을 전혀 지원하지 않습니다 . REST 엔드 포인트 만 수행합니다. 또한 모든 와일드 카드 인증서는 최대 1 개만 지원하며 * 가장 왼쪽의 호스트 이름 구성 요소에만 나타날 수 있으므로 실제로는 S3 제한 사항이 아닙니다.
— Michael-sqlbot

1
@oberstet 6.4.3.1 클라이언트는 와일드 카드 문자가 가장 왼쪽의 레이블이 아닌 다른 레이블을 포함하는 제시된 식별자와 일치하지 않아야한다. 따라서 다중 계층 와일드 카드와 같은 것은 없습니다. 어쨌든 boto 문제 는 "호출 형식"옵션이 잘못 구현 된 것입니다. 버킷의 올바른 지역에 대한 S3 URL 에서 첫 번째 경로 요소 로 버킷 이름을 사용하여 https를 통해 모든 버킷에 액세스 할 수 있습니다 ( 예 :) . 잘못된 지역 종점 = 리디렉션 오류. https://s3-us-west-2.amazonaws.com/my-bucket.with-dots.in-us-west-2/key
— Michael-sqlbot

1
@MartinLyne 감사합니다. CloudFront를 사용하여 이미 가져온 버킷 이름에 대한 해결 방법을 언급 할뿐만 아니라 버킷 이름과 도메인 이름이 같아야하는 S3 설명서에 대한 참조를 추가했습니다. US-east-1 및 us-west-2 리전 및 기타 지역에서는 CloudFront 사용 비용이 무시할 수 있으며 CF 다운로드가 S3보다 대역폭에서 GB 당 $ 0.005 / GB 저렴하기 때문에 약간의 비용도 절감 할 수 있습니다. 위치.
— Michael-sqlbot

0

호스팅 영역 abc.com이 있다고 가정합니다. 버킷 abc.com (라우트 별칭의 목록에 표시되지 않음)을 만듭니다. 이름 뒤에-버킷 이름을 지정할 수 없습니다.

이것도 시도하십시오. 처음으로 올바른 이름으로 버킷을 생성했지만 여전히 작동하지 않기 때문입니다. 내가 OCD를 가지고 있기 때문에 나는 멈춤이나 쉼표를 놓치지 않았다.

  1. 이름이 abc.com 인 다른 호스팅 영역을 만듭니다.
  2. 이제 동일한 호스팅 영역 (abc.com 및 abc.com) 중 2 개가 표시됩니다.
  3. 새로운 것을 삭제하십시오
  4. 이전 호스팅 영역 abc.com으로 돌아 가기
  5. s3 엔드 포인트가 표시 될 수 있습니다. 이는 Route53에서 문제 일 수 있습니다.

이것은 거의 모든 것을 시험해 보았습니다. 제가 볼 수있는 제안은 일종의 캐시 지우기를 위해 로그 아웃하고 로그인하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.