Student | Freelance Web Developer | Open Source Developer

About meResume

Assigning Every Amazon EC2 Linux Instance User a Specific S3 Bucket Folder

Amazon EC2 is a web service that provides secure, resizable compute capacity in the cloud. It is a virtual machine deployed on the cloud which can be used for various computations. At the crux of it, EC2 is a Linux/windows instance on the cloud and thus can have various users log in to them and using them to perform cloud computations.

Using AWS services, we can control the access of S3 buckets for each user in a way that every user will have access to bucket prefixes specific to them and can prevent access to other parts of the bucket. It can further extend to mapping this limited access to EC2 Linux instance users as well. This facility can be achieved by following these steps.

1. Construct an IAM policy with folder-level permissions for Amazon S3 buckets.

Using AWS CLI, we can do this by adding creating a json file with the following content and then executing the aws aim create-policy command

  {
    "Version":"2012-10-17",
    "Statement": [
      {
        "Sid": "AllowGroupToSeeBucketListInTheConsole",
        "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
        "Effect": "Allow",
        "Resource": ["arn:aws:s3:::*"]
      },
      {
        "Sid": "AllowRootAndHomeListingOfCompanyBucket",
        "Action": ["s3:ListBucket"],
        "Effect": "Allow",
        "Resource": ["arn:aws:s3:::<bucket-name>"],
        "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
      },
      {
        "Sid": "AllowListingOfUserFolder",
        "Action": ["s3:ListBucket"],
        "Effect": "Allow",
        "Resource": ["arn:aws:s3:::<bucket-name>"],
        "Condition":{"StringLike":{"s3:prefix":
              [
                   "home/${aws:username}/*"
                   "home/${aws:username}"
              ]
           }
          }
      },
      {
         "Sid": "AllowAllS3ActionsInUserFolder",
         "Action":["s3:*"],
         "Effect":"Allow",
         "Resource": ["arn:aws:s3:::<bucket-name>/home/${aws:username}/*"]
      }
    ]
  }

  aws iam create-policy --policy-name user-specific-folders --policy-document user-specific-folders.json

2. Create new IAM Users and attach the aforementioned policy to them

Using AWS CLI we can perform this with the help of the following commands

  aws iam create-user --user-name user1
  aws iam create-access-key --user-name user1 > access-key.txt
  aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/user-specific-folders --user-name user1

3. Create EC2 instance linux users that corresponds to these IAM Users

We can perform this with the help of the following Linux commands

  sudo useradd user1   
  sudo passwd user1
  sudo su - user1

4. Switch to the newly created user and configure AWS CLI for that user

We can perform this with the help of the following commands from inside the EC2 instance

  aws configure set aws_access_key_id  <access-key>
  aws configure set aws_secret_access_key <secret-key>

Note: Get the values of access-key and secret key from the file access-key.txt created during step 2.