think of some name that you would use throughout all the services that identifies your project - say, foo. then name Amazon resources as follows:

account (aka AWS account)

create Amazon account if you don’t have one (this is a single account for all Amazon services including shop itself).

account identifiers

<your_name> (menu in top right corner) → My Security Credentials
Accound Identifiers

each AWS account is assigned 2 unique IDs:

generate access keys

<your_name> (menu in top right corner) → My Security Credentials
Access Keys (Access Key ID and Secret Access Key)Create New Access Key (button)

these keys (just like the keys of any service created in IAM service) can be used to make programmatic requests to AWS services (say, to S3 service).

NOTE: save generated credentials (Access Key ID and Secret Access key) - secret access key won’t be available later (just like in IAM service).


bucket names

Although Amazon will allow you to use capital letters and periods in the namespace, it is not recommended because of the naming restrictions that are enforced by DNS. In order to conform with DNS requirements, we recommend following these additional guidelines when creating buckets:

  • Bucket names should not contain upper-case letters
  • Bucket names should not contain underscores (_)
  • Bucket names should not end with a dash
  • Bucket names should be between 3 and 63 characters long
  • Bucket names cannot contain dashes next to periods (
  • Bucket names cannot contain periods

access bucket


both ways are equivalent except that when using virtual-hosted-style URLs:

create bucket

1) Name and region

2) Set properties

leave default settings (Versioning and Logging are disabled).

3) Set permissions

give required permissions to users or groups (for Object access only).

permissions can also be managed after bucket creation:

<bucket> → Permissions (tab) → Access Control List (button)

giving all permissions to Everyone group still doesn’t allow anonymous user to access the bucket (neither read nor write) - set bucket policy (see below) if you need to make bucket public.

TODO: why?

grant read-only permission to anonymous user

<bucket> → Permissions (tab) → Bucket Policy (button)

paste policy (specify actual bucket ARN) and save it:

      "Principal": "*",


create policy

Policies (left sidebar) → Create Policy (button)

1) Step 1: Create Policy

select Create Your Own Policy.

2) Step 2: Set permissions

omitted when creating your own policy.

3) Step 3: Review Policy

create user

Users (left sidebar) → Add user (button)

1) Details

2) Permissions

3) Review

4) Complete

NOTE: save generated credentials (Access Key ID and Secret Access key) - secret access key won’t be available later.



error saving bucket policy (the policy must contain a valid version string)

The policy must contain a valid version string

policy versions are not arbitrary strings - they are predefined by AWS.

A conflicting conditional operation is currently in progress against this resource. Please try again.


This error usually occurs when a Bucket is deleted and a new bucket is created in the same name as the old bucket. I believe we would need to wait for certain amount of time until we can create a new bucket in the same name.

About an hour later, my attempt to create the bucket succeeded.