おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

S3のバケット名の制約

S3では、CNAMEでない場合、パススタイルかバーチャルホストスタイルの2つでバケットにアクセスすることができます。以下はUS Standardの場合。リージョンがこれ以外だと s3-ap-northeast-1.amazonaws.com みたいになります。

http://s3.amazonaws.com/mybucket
http://mybucket.s3.amazonaws.com

エンドポイントについてはここを確認。

Amazon S3のバケット名の制約は、全般としてはDNS準拠となっていますが、米国スタンダードリージョンは歴史的経緯か、少しゆるい制約となっています。

設定したバケット名によって制限が出る場合があるのでまとめてみます。

DNS準拠、仮想ホストスタイル (SSL)利用可

https://mybucket.s3.amazonaws.com のようにワイルドカード証明書でバーチャルホストスタイルでアクセスさせたい場合、一番制限が厳しいものになります。

  • 3~63 文字以内
  • 先頭、末尾は小文字の英文字または数字を使う
  • 先頭、末尾以外は小文字の英文字、数字、およびハイフン(-)を含めることができる

ということで、

^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$

DNS準拠、仮想ホストスタイル (HTTP)利用可

http://my.bucket.s3.amazonaws.com のように非SSLでバーチャルホストスタイルでアクセスさせたい場合。

  • 3~63 文字以内
  • バケット名は、1 つのラベルか、または複数のラベルをピリオド(.)でつなげて構成します。各ラベルには次の規則が適用されます。
    • 先頭、末尾は小文字の英文字または数字を使う
    • 先頭、末尾以外は小文字の英文字、数字、およびハイフン(-)を含めることができる
  • バケット名は、IP アドレスの形式(192.168.5.4 など)にはできない

S3で静的ウェブサイトを独自ドメインで行う場合はドメイン名をそのままバケット名にする必要があります。

米国スタンダードリージョンのみ、仮想ホストスタイル不可

US Standardリージョンのみで作成できます。

  • 255文字以内
  • 大文字と小文字の英文字、数字、ピリオド(.)、ハイフン(-)、アンダースコア(_)を自由に組み合わせられる。

大文字を含んだ場合、小文字として解決しようとするため、バーチャルホストスタイルではNot Foundとなりますし、DNS準拠しないホスト名となった場合はバーチャルホストスタイルでは参照できません。

まとめ

DNS名準拠のバケット名を使おう。