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.