|
| 1 | +#!/bin/bash |
| 2 | +set -euxo pipefail |
| 3 | +export AWS_SECRET_ACCESS_KEY=test |
| 4 | + |
| 5 | +# Create `ls-a` and `ls-b` IAM users using the root accounts of each user |
| 6 | +AWS_ACCESS_KEY_ID=000000000001 awslocal iam create-user --user-name ls-a |
| 7 | +AWS_ACCESS_KEY_ID=000000000002 awslocal iam create-user --user-name ls-b |
| 8 | + |
| 9 | +# Create IAM policies for each of the IAM users using the root accounts of each user |
| 10 | +AWS_ACCESS_KEY_ID=000000000001 awslocal iam create-policy --policy-name pa --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:*","Resource":"*"}]}' |
| 11 | +AWS_ACCESS_KEY_ID=000000000002 awslocal iam create-policy --policy-name pb --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:*","Resource":"*"}]}' |
| 12 | + |
| 13 | +# Attach the IAM policies to each IAM user using the root accounts of each user |
| 14 | +AWS_ACCESS_KEY_ID=000000000001 awslocal iam attach-user-policy --user-name ls-a --policy-arn arn:aws:iam::000000000001:policy/pa |
| 15 | +AWS_ACCESS_KEY_ID=000000000002 awslocal iam attach-user-policy --user-name ls-b --policy-arn arn:aws:iam::000000000002:policy/pb |
| 16 | + |
| 17 | +# Create access keys for each user using the root accounts of each user |
| 18 | +CREDENTIALS_A=$(AWS_ACCESS_KEY_ID=000000000001 awslocal iam create-access-key --user-name ls-a) |
| 19 | +CREDENTIALS_B=$(AWS_ACCESS_KEY_ID=000000000002 awslocal iam create-access-key --user-name ls-b) |
| 20 | + |
| 21 | +# Retrieve the access key id of each user |
| 22 | +# In LocalStack, the secret access key is not strictly enforced |
| 23 | +# But the access key id is |
| 24 | +USER_ACCESS_KEY_ID_A=`jq -r .AccessKey.AccessKeyId <<< $CREDENTIALS_A` |
| 25 | +USER_ACCESS_KEY_ID_B=`jq -r .AccessKey.AccessKeyId <<< $CREDENTIALS_B` |
| 26 | + |
| 27 | +# Create `source` bucket in `ls-a` user's account |
| 28 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_A awslocal s3 mb s3://source |
| 29 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_A awslocal s3 sync ./bucket s3://source |
| 30 | + |
| 31 | +# Attach a bucket policy so that user `ls-b` can access it |
| 32 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_A awslocal s3api put-bucket-policy --bucket source --policy file://source_bucket_policy.json |
| 33 | + |
| 34 | +# Attempt to access bucket `source` using `ls-a` user |
| 35 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_B awslocal s3 ls s3://source |
| 36 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_B awslocal s3api list-object-versions --bucket source --prefix main.go |
| 37 | + |
| 38 | +# Sync buckets `source` and `target` using `ls-b` user |
| 39 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_B awslocal s3 mb s3://target |
| 40 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_B awslocal s3 sync s3://source s3://target |
| 41 | +AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_B awslocal s3api list-object-versions --bucket target --prefix main.go |
| 42 | + |
| 43 | +# Fail the script if somehow user A can access the resources of bucket `target` |
| 44 | +echo "Check if s3api list-object-versions commnands fails as expected" |
| 45 | +if AWS_ACCESS_KEY_ID=$USER_ACCESS_KEY_ID_A awslocal s3api list-object-versions --bucket target --prefix main.go; then |
| 46 | + exit 1 |
| 47 | +fi |
0 commit comments