{S3}例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する

バケット所有者とユーザーの親アカウントが同じであるため、 AWS アカウント は、
バケットポリシー、ユーザーポリシー、またはその両方を使用してユーザーにアクセス許可を付与できます。
この例では、両方を使用します。
オブジェクトの所有者も同じアカウントである場合は、
バケット所有者はバケットポリシー (または IAM ポリシー) でオブジェクトのアクセス権を付与することもできます。


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version


-- 2. S3 バケットを作成する

aws s3 mb s3://bucket123

aws s3 ls


-- 3. IAMユーザ(testiamuser)を作成する
aws iam create-user --user-name testiamuser

aws iam create-access-key --user-name testiamuser

-- 4. バケットポリシーでtestiamuserへGetアクセス許可を付与

vim a.json
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "statement1",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::999999999999:user/testiamuser"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::bucket123"
         ]
      },
      {
         "Sid": "statement2",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::999999999999:user/testiamuser"
         },
         "Action": [
             "s3:GetObject"
         ],
         "Resource": [
            "arn:aws:s3:::bucket123/*"
         ]
      }
   ]
}

aws s3api put-bucket-policy \
--bucket bucket123 \
--policy file://a.json

 

-- 5. IAMポリシーでtestiamuserへPutアクセス許可を付与

-- 5.1 IAMポリシー作成

vim policy01.json


{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "PermissionForObjectOperations",
         "Effect": "Allow",
         "Action": [
            "s3:PutObject"
         ],
         "Resource": [
            "arn:aws:s3:::bucket123/*"
         ]
      }
   ]
}

aws iam create-policy \
--policy-name policy01 \
--policy-document file://policy01.json

-- 5.2 IAMポリシーをIAMユーザにアタッチ
aws iam attach-user-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01 \
--user-name testiamuser


-- 6. 動作確認 [testiamuserで実施]

aws sts get-caller-identity

echo test01 > test01.txt

aws s3api put-object --bucket bucket123 --key test01.txt --body test01.txt

aws s3api get-object --bucket bucket123 --key test01.txt        test11.txt

 

-- 7. クリーンアップ

-- IAMユーザ一覧
aws iam list-users


-- IAMユーザ削除

aws iam detach-user-policy \
--user-name testiamuser \
--policy-arn arn:aws:iam::999999999999:policy/policy01

aws iam delete-access-key \
--user-name testiamuser \
--access-key-id XXXXXXXXXXXXXXXXXXXX

aws iam delete-user --user-name testiamuser

-- IAMポリシーの一覧
aws iam list-policies | grep policy01

-- IAMポリシーの削除
aws iam delete-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01

-- バケットの削除
aws s3 ls

aws s3 rb s3://bucket123 --force