سرویس آبجکت‌استوریج می‌تواند از وب‌سایت‌های ایستا (static) میزبانی کند. وب‌سایت‌های ایستا دارای محتویات ایستا مانند عکس، صفحات html یا اسکریپت‌های سمت کاربر (مانند جاوااسکریپت) هستند. برای استفاده از میزبانی وب‌سایت سرویس آبجکت‌استوریج باید یک باکت را که محتوی فایل‌های وب‌سایت است به این سرویس معرفی کنید. برای آشنایی بیشتر با این ویژگی مستند میزبانی وبسایت ایستا را مطالعه کنید.

برای این‌ که یک باکت از طریق مرورگر و با آدرس URL قابل دیده شدن باشد باید در ابتدا باکت به صورت عمومی یا public تعریف شود.

در حالت عادی بعد از این که باکت را به صورت public درآورید، لیست فولدرها و آبجکت‌ها با فرمت XML نشان داده می‌شود. این فرمت ظاهر خوبی برای استفاده‌ی کاربران ندارد.
به عنوان مثال خروجی این آدرس https://moti2.s3.thr1.sotoon.ir به فرمت XML است.

اما برای این که کاربران بتوانند به شکل بهتری محتویات یک باکت را ببینند می‌توانید یک لیست دایرکتوری ایجاد کنید که نتایج را با استفاده از ایندکس نمایش می‌دهد.

در این آدرس https://moti2.s3-website.thr1.sotoon.ir/ خروجی مثال قبلی با استفاده از ایندکس نشان داده می‌شود.

برای انجام این کار کافی است مراحل زیر را دنبال کنید:

۱- دسترسی‌ها به باکت را در حالت عمومی یا public قرار دهید.

aws s3api put-bucket-acl --bucket bucket_name --acl public-read
aws s3api --endpoint=https://s3.thr1.sotoon.ir put-bucket-policy --bucket bucket_name --policy file://public_policy.json
{
   "Statement": [
      {
         "Sid": "AllowPublicGet",
         "Effect": "Allow",
         "Principal": "*",
         "Action": "s3:GetObject",
         "Resource": "arn:aws:s3:::bucket_name/*"
      },
      {
            "Sid": "AllowPublicList",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:ListBucketMultipartUploads"
            ]
            "Resource": "arn:aws:s3:::bucket_name",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "*"
                }
            }
      },
      {
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:GetObject",
         "Resource": "arn:aws:s3:::bucket_name/secret_dir/*"
      }
   ]
}

دستور Deny این امکان را فراهم می‌کند که بتوانید برای یک subfolder استثنا قائل شوید و آن را public نکنید.

۲- یک index بنویسید که خروجی XML را parse کند.

<!DOCTYPE html>
<html>
<head>
  <title>S3 Bucket Listing Generator</title>
</head>
<body>
  <div id="navigation"></div>
  <div id="listing"></div>
 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
  var S3BL_IGNORE_PATH = false;
  var BUCKET_NAME = 'bucket_name';
  var BUCKET_URL = 'https://bucket_name.s3.thr1.sotoon.ir';
  // var S3B_ROOT_DIR = '/';
  var S3B_SORT = 'DEFAULT';
  var EXCLUDE_FILE = 'index.html';  // change to array to exclude multiple files, regexp also supported e.g. /^(.*\/)?index.html$/ to exclude all index.html
  var AUTO_TITLE = true;
</script>
<script type="text/javascript" src="https://rufuspollock.github.io/s3-bucket-listing/list.js"></script>
 
</body>
</html>

۳- فایل index را در باکت قرار دهید.

aws s3 --endpoint=https://s3.thr1.sotoon.ir cp index.html s3://bucket_name/index.html

۴. کد مربوط به Static website hosting

aws s3 --endpoint=https://s3.thr1.sotoon.ir website s3://bucket_name/ --index-document index.html --error-document index.html

۵. تنظیمات cors را وارد کنید.

aws s3api --endpoint=https://s3.thr1.sotoon.ir put-bucket-cors --bucket bucket_name --cors-configuration file://cors_policy.json
{
  "CORSRules": [
    {
      "ID": "public",
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET"],
      "AllowedOrigins": ["*"],
      "ExposeHeaders": []
    }
  ]
}

۶. اکنون می‌توانید با دسترسی به آدرس https://bucket_name.s3-website.thr1.sotoon.ir یک لیست دایرکتوری داشته باشید.

نکته

توجه داشته باشید که این قابلیت فقط با آدرس‌های زیر دامنه‌ی وبسایت فعال است و آدرس خام S3 همواره خروجی XML را برمی‌گرداند.