brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Aug 24. 2019

147.  S3 버킷 권한주기

실습

<1>  S3 버킷 권한 주기

<2> 설정법

<3> 예제)  특정 사용자가  리스트하고 다운로드만 가능하도록 해주세요.





<1>  S3 버킷 권한 주기


1. Cli로  S3 Bucket list 확인하고 , 데이터를 올리고, 내리고, 삭제 하려하고 한다. (API 계정 사용)

2.  Console로  S3 Bucket  데이터를 List확인하고,  올리고, 내리고, 삭제 하려하고 한다.





<3> 설정법


1.  계정과 권한 생성

IAM계정 : 100  

-  console 계정 , 프로그래밍 방식 액세스를 활성화

- access-key, secrey key 파일을 다운로드 받는다.


2.   테스트 서버만들기

windows pc ------ linux ec2 ----- s3 환경


1) linux ec2 서버 만들기

-  아마존 리눅스로 설치한다.  aws  cli가  기본 설치 되어 있다.


putty download

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html


[root@ip-172-31-13-93 ~]# aws  --version

aws-cli/1.16.102 Python/2.7.16 Linux/4.14.123-111.109.amzn2.x86_64 botocore/1.12.92


OS별 awscli 설치 법

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-linux.html


MAC이면

MAC  ---  S3  구성이다.



3.  s3 버킷 만들기

버킷 이름 :  100-s3

디폴트로 설정한다.  Block all Public access[OFF]

not  Public으로 버킷을 만든다.  

Public access를 허용해야  정책 적용에 의미가 있다.

접속 하지 못하는데 정책 적용은 의미가 없다.




4. Linux EC2에서  S3 관리하기

IAM으로 계정생성시 다운로드 받은  access key와 secret key를  확인한다.


EC2 로그인

aws configure

Default region name [None]: ap-northeast-2


[root@ip-10-0-0-32 ~]# aws  s3  ls

An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied



5. 권한 부여하기

S3 버킷에   policy를 주면 된다.

S3에서 제어하는 설정이다.


1) s3 버킷 policy   만들기

s3  >  해당 버킷  >  Permissions >  Buckey Policy >   Policy generator  로 만들어   policy에 주면 된다.


2) Principal은  iam에서 User ARN 확인 입력  :    arn:aws:iam::115577473184:user/100


3) s3 arn 확인 :   arn:aws:s3:::100-s3

Amazon Resource Name (ARN) 입력


4) Generate Policy

S3  Buckey Policy에  복사한다.





6. Cli로  S3 Bucket list 확인하고 , 데이터를 올리고, 내리고, 삭제 하는법. (API 계정 사용)


방법1.  S3 Buckey Policy에 적용한다.


Generate Policy 로 만든다.


1) Bucket 안의  Object에 대한 Action을 정의한다.

Delete object , getobject , putobject  로 Action을 취한다.

ARN을   arn:aws:s3:::100-s3/*  로 지정한다.   (중요한 부분)


2번째 Action은  Buckt에 대한  정책을 만든다.

ARN을   arn:aws:s3:::100-s3  로 지정한다.



{

  "Id": "Policy1566805503954",

  "Version": "2012-10-17",

  "Statement": [

    {

      "Sid": "Stmt1566805325842",

      "Action": [

        "s3:DeleteObject",

        "s3:GetObject",

        "s3:PutObject"

      ],

      "Effect": "Allow",

      "Resource": "arn:aws:s3:::100-s3/*",

      "Principal": {

        "AWS": [

          "arn:aws:iam::115577473184:user/100"

        ]

      }

    },

    {

      "Sid": "Stmt1566805497594",

      "Action": [

        "s3:ListBucket"

      ],

      "Effect": "Allow",

      "Resource": "arn:aws:s3:::100-s3",

      "Principal": {

        "AWS": [

          "arn:aws:iam::115577473184:user/100"

        ]

      }

    }

  ]

}




방법2.  계정 100에 Policy 적용한다.


> Generate Policy


{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Sid": "VisualEditor0",

            "Effect": "Allow",

            "Action": "s3:ListAllMyBuckets",

            "Resource": "*"

        },

        {

            "Sid": "VisualEditor1",

            "Effect": "Allow",

            "Action": "s3:ListBucket",

            "Resource": "arn:aws:s3:::100-s3"

        },

        {

            "Sid": "VisualEditor2",

            "Effect": "Allow",

            "Action": [

                "s3:PutObject",

                "s3:GetObject",

                "s3:DeleteObject"

            ],

            "Resource": "arn:aws:s3:::100-s3/*"

        }

    ]

}



Policy 예제 참고  

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/example-bucket-policies.html

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access.html

S3 ARN 확인법 - 버킷 클릭하면 오른쪽에 나온다.







7.   Linux EC2에서   aws  s3  ls로  버킷 리스트 확인한다.


명령어 사용법

# aws 서비스  ls


[root@ip-10-0-0-32 ~]# aws s3  ls

2019-08-24 01:26:40 100-s3



참고 : 정책을 잘못 설정하면 안된다.

혹, 급하게 적용 해야하면  그룹에 권한을 주면 해결은 된다.






8.   Console로  S3 Bucket  데이터를 List확인하고,  올리고, 내리고, 삭제 하려하는 설정

요약 : Poilcy를 만들고  Poilcy를 100계정에 넣는다.

IAM > Create policy


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        }
    ]
}


참고 : 위 Policy를 적용하면  API로도 Bucket List확인이 가능해진다.





<3> 예제)  특정 사용자가  리스트하고 다운로드만 가능하도록 해주세요.


1


{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Principal": {

                "AWS": "arn:aws:iam::111111111:user/seo-user1"

            },

            "Action": "s3:ListBucket",

            "Resource": "arn:aws:s3:::seo-s3-1"

        },

        {

            "Effect": "Allow",

            "Principal": {

                "AWS": "arn:aws:iam::11111111:user/seo-user1"

            },

            "Action": "s3:GetObject",

            "Resource": "arn:aws:s3:::seo-s3-1/*"

        }

    ]

}



2

버킷에 리스트 확인법

aws s3 ls s3://seo-s3-1


3

다운로드 가능합니다.

aws s3 cp s3://seo-s3-1/test1.txt .


4

put은 안됩니다.

aws s3 cp pc1.txt s3://seo-s3-1/



참고

S3 버킷 정책 예제 문서


감사합니다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari