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をアップロードし、Webサイトへのアクセスをセットアップしました。http: //simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.htmlからアクセスできます

これまでのところ、Amazon Route53アクセスをセットアップしたいのですが、ここで行き詰まりました。

自分が所有するドメイン(resourcesbox.net)でホストゾーンを設定し、[レコードセットの作成]をクリックし、[エイリアスの設定]ステップに進みましたが、S3 Webサイトエンドポイントで[ターゲットなし]が表示されますエイリアスターゲットを設定してみてください。

私は何を取りこぼしたか??


2012年10月から、AmazonはS3バケットのリダイレクト(HTTP 301)を処理する機能を導入しました。ここで以前の回答を読むことができます。stackoverflow.com/a/24218895/1160780
アルベルトスペルタ

回答:


33

S3でのバケットの仮想ホスティングではHost:、ブラウザから送信されたヘッダーがバケット名と一致する必要があるため、作成するAレコードエイリアスはバケットの名前と同じである必要があります。バケットの仮想ホスティングを実現できる実際的な方法は他にありません...バケットは何らかのメカニズムによって識別される必要があり、そのメカニズムはhttpヘッダーです。

「example.com」ドメイン内のバケットへのエイリアスを作成するには、バケット名もそのドメイン内で合法的に宣言できるホスト名にする必要があります... Route 53 A-Record「testbucket.example」たとえば、「。com」は、「testbucket.example.com」というバケットにのみエイリアスを作成でき、他のバケットにはエイリアスできません。

あなたの質問では、この制約を破っています...しかし、「simples3websitetest.com」ドメイン内(およびその頂点)にある「simples3websitetest.com」という名前のバケットにのみエイリアスを作成できます。

これは仕様によるものであり、Route 53やS3の厳密な制限ではありません。彼らはあなたがたぶんうまくいかないことをするのを妨げているだけです。Webサーバーは、エイリアスまたはCNAMEまたはDNSで行われたその他のことを認識しません-ブラウザが送信したhttpヘッダーで、ブラウザーが接続しようとしていると考えている元のホスト名のみを受け取ります...仮想ホストリクエストが適用されるバケットの名前を識別する情報。

Amazon S3では、バケットにドメインと同じ名前を付ける必要があります。これは、ユーザーがWebサイトからコンテンツをリクエストしたときに、Amazon S3がWebブラウザーによって送信されたホストヘッダーを適切に解決できるようにするためです。したがって、ドメイン名を登録するために支払う前に、Amazon S3でウェブサイトのバケットを作成することをお勧めします。

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

ただし、この制限は、バケットの前でCloudFrontを使用していない場合にのみ適用されることに注意してください。

CloudFrontではHost:、リクエストがS3に渡される前にヘッダーが(CloudFront自体によって)書き換えられるため、より柔軟性があります。CloudFrontディストリビューションで「オリジンホスト」を構成します。xx your-bucket.s3-website-xx-yyyy-n.amazonaws.com-yyyy-nは、バケットが作成されたS3のAWSリージョンです。このエンドポイントは、各バケットのS3コンソールに表示されます。


1
これは確かに問題でした。resourcesbox.netというバケットを作成しましたが、実際に現れました。ありがとうございました!簡単なフォローアップの質問:これが意味することは、そのドメインに異なるバケットを持ちたい場合、各バケットに適切なサブドメインが必要だということです?それを回避する方法はありませんか?
アミールズッカー14年

「サブドメインが必要です」とはどういう意味か正確にはわかりません。はい、S3でWebサイトをホストするために使用する各バケットに一致するホスト名で、ルート53にAレコードを作成する必要があります。
マイケル-sqlbot

1
@oberstetこの質問はalias、Webサイトのホスティングが有効になっているS3バケットを指すRoute 53 レコードに関するもので、これによりDNSはRESTエンドポイントではなくWebサイトエンドポイントに解決されます。WebサイトのエンドポイントはSSLをまったくサポートしていません。RESTエンドポイントのみが行います。また、すべてのワイルドカード証明書は最大1つしかサポート *せず、左端のホスト名コンポーネントにのみ表示されるため、実際にはS3の制限ではありません。
マイケル-sqlbot

1
@oberstet 6.4.3.1クライアントは、ワイルドカード文字が左端のラベル以外のラベルで構成されている提示された識別子との一致を試行すべきではありません。したがって、多層ワイルドカードのようなものはありません。とにかく、ボトの問題、「呼び出し形式」オプションが明らかに正しく実装されていないという問題です。すべてのバケットは、最初とバケット名でHTTPS経由でアクセスすることができますパス S3 URLの下に要素バケットの正確な領域のためのhttps://s3-us-west-2.amazonaws.com/my-bucket.with-dots.in-us-west-2/key。間違った地域のエンドポイント=リダイレクトエラー。
マイケル-sqlbot

1
@MartinLyneありがとう。S3ドキュメントへの参照を追加しました。バケット名とドメイン名は同じである必要があり、CloudFrontを使用して既に取得したバケット名の回避策についても言及しています。us-east-1およびus-west-2リージョン、およびその他のリージョンでは、CloudFrontを使用するコストはごくわずかであり、CFのダウンロードはエッジでS3ダイレクトよりも帯域幅で0.005ドル/ GB安いため、わずかに節約できる可能性もあります場所。
マイケル-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.