web-dev-qa-db-ja.com

S3とGoogle Storageバケットがグローバル名前空間になっているのはなぜですか?

これは私を困惑させました。なぜアカウントIDがグローバルであるのか、バケット名がなぜなのかは明らかに理解できますか?

https://accountID.storageservice.com/bucketName

これは、accountIDの下でバケットの名前空間になります。

何が欠けているのですか、明らかにこれらのエリートアーキテクトがバケット名をこのように処理することを選択したのはなぜですか?

34
AJB

「バケットの名前空間はグローバルです-ドメイン名のように」

http://aws.Amazon.com/articles/1109#02

それは単なる偶然ではありません。

その理由は非常に単純なようです:バケットとそのオブジェクトは、バケット名と同じカスタムホスト名を介してアクセスできます...そしてバケットは オプションで静的Webサイト全体をホストする -S3で自動的に着信Host:ヘッダーからのリクエストを同じ名前のバケットにマッピングします。

S3では、これらのバリアントURLはバケット「bucket.example.com」内の同じオブジェクト「foo.txt」を参照しています。 1つ目は静的ウェブサイトホスティングを有効にして動作し、地域のRESTエンドポイントを指すDNS CNAME(またはRoute 53ではAlias)またはDNS CNAMEが必要です;他は設定を必要としません:

http://bucket.example.com/foo.txt
http://bucket.example.com.s3.amazonaws.com/foo.txt
http://bucket.example.com.s3[-region].amazonaws.com/foo.txt
http://s3[-region].amazonaws.com/bucket.example.com/foo.txt   

オブジェクトストアサービスがHTTP受信リクエストのHost:ヘッダーをバケット名に解決する簡単なメカニズムを必要とする場合、バケット名の名前空間もグローバルである必要があります。それ以外のものは、実装を著しく複雑にするようです。

ホスト名をバケット名にマップできるようにするには、明らかに2つのバケットが同じホスト名に応答できないため、somethingはグローバルに一意である必要があります。バケット名自体に適用される制限は、あいまいさの余地を残しません。

また、多くの潜在的なクライアントは、バケット名でアカウントを識別したくないと思われます。

もちろん、いつでもアカウントIDまたはランダムな文字列を目的のバケット名に追加できます。 jozxyqk-payroll、jozxyqk-personnel、必要なバケット名が利用できない場合。

50

飲む量が多いほど、以下の概念が理にかなっているので、独自のエンティティへの受け入れられた回答に関するコメントからそれを引き上げました。

今夜ランダムに頭に浮かんだ追加の考え:

さまざまなオブジェクトストアサービスが提供する一般的なホスト名を使用できるため、特定のデータリソースの所有者として企業(またはその他の)IDを簡単に隠すことができます。

したがって、Black Hat Corphttp://s3.amazonaws.com/obscure-bucket-name/something-to-be-dissassociated.txt‌でデータリソースをホストしているとします。

非政府組織が、そのリソースの所有者がオブジェクトストアプロバイダーの協力を得ずに誰であるかを特定することは非常に困難です。

意図的に有害ではなく、客観的な実用主義です。

そしておそらくこのパラダイムの建築家による輝きの一撃

4
AJB