업무/AWS기초

AWS 권한에 대해서 1.1 (JSON 기본 구조)

종금 2021. 4. 16. 14:28
반응형

AWS 콘솔 담당자가 되면 제일 먼저 알아야할 부분이며 보안의 핵심을 꼽으라면 보안정책일 것이다
하지만 AWS 보안 정책을 짜여진 툴로 쓰려니 너무 에러가 많았는데 
먼저 예시로 지금 상황을 들어보겠다

1. KIITS의 AWS에 접근가능 직원에 대해 권한을 주려고 했다. 

특히 ec2, RDS, S3의 경우 자유자재로 접근, 생성, 삭제 등의 권한을 주려고 하였기에 AWS 탬플릿중 다음과 같이 권한을 주었다

하지만 KIITS 직원중 한명에게 ec2의 접속 및 생성등이 되지 않는다는 이야기를 듣고 이를 해결하려고한다
(현재 RDS도 불가능하다고해서 직접 해결해야함)

현재 AmazonEC2FullAccess에 정책을 json으로 확인하면 다음과 같다.

ec2:*의 모든 작업에 대해서 접근이 가능하고
엘라스틱도,클라우드워치, 오토스케일링, 등등이 가능하다고 하는데

왜안되는지에 대해서 약간의 문제가 발생했고 이래저래 구글링 및 찾아본결과 컴퓨팅 파워가 필요하다고한다
(컴퓨터를 사서 설치는 할수 있는데 전원버튼을 누르는 정책이 없다고 하는것이다.)

그래서 다음과 같은 정책을 두었는데 이를 통해 정책에 대해서 좀 알아보자

 

 

*AWS 정책*

AWS가 기본적으로 주는 정책은 굉장히 불친절하다. 무엇을 할 수 있는지도 어떤것이 들어갔는지도 어떤것을 못하는지 불편하기에 직접 커스터마이징 하는 것을 추천한다.

이떄 커스터마이징을 하기위해서 우리는 json이라는 파일을 작성 및 적용을 할줄 알아야하며 이의 구조를 AWS Docs 문서에서 발췌해 적어보려고한다

aws json 구조

Json의 구조는 세부적으로 나누면 다음과 같이 12개로 나누어진다.

1. Version
2. ID
3. Statement
4. SID
5. Effect
6. Principal
7. not Principal
8. Action
9. not action
10. Condition
11. 변수와 태그
12. 지원되는 데이터 형식

이때 json을 한번이라도 본 적이 있는 사람이라면 다음과 같은 의문이 생길것이다.
 S3 Full access만 보더라도 몇줄없는데 12개나된다고?

s3 Full Access 정책



그렇다 총 12개의 정책이 존재하지만 우리에게 필요한건 막상 몇개 없다
즉 Required(필수적) 정책과 Optional(선택적) 정책으로 구별되며 이를 먼저 정리할 필요가있다.

그럼 이제 정책을 자세히 살펴보며 Required와 Optional을 나누어보자.

1. Version(필수)
버전의 경우 두가지만 존재한다. 2008-10-17, 2012-10-17(최신) 
json의 첫 문장으로 시작하며 해당 json 문법을 나타내기에(python2, python3와 비슷한 개념) 잘 적어주어야한다
ex) "Version": "2012-10-17"

2. ID(선택)
Optional 값으로 없어도 된다, 정책의 구별을 위해 UID처럼 사용한다 보면 된다

3. Statement(필수)
한개 이상의 statement가 존재하며 각자의 Rule을 나타낸다. 
예를들어 EC2FullAccess의 정책의 경우 5개의 statement가 존재하는데 
첫 statement는 ec2에 대해서 이후 두번째는 elasticloadbalancing, 세번째는 클라우드 워치... 이런식으로 총 다섯개의 statement로 구성되어있고 이는 각 다섯개의 Rule을 한 정책이 제어하게 된다.

 

4. SID(선택)
ID와 마찬가지로 필수는 아니다.  고유값으로 각 statementID로 보면 된다.
statement의 경우 한번 사용하고 이후 중괄호로 관리하므로 이때 헷갈리지 않게 쓴다고 보면될거같다.
ex) 하나의 정책으로 EC2, RDS, S3 정책 관리
"Statement": [
       { "SID" : "EC2 ACESS"
             Blah Blah Blah
          },
      { "SID" : "RDS ACESS"
             Blah Blah Blah
          },
      { "SID" : "S3 ACESS"
             Blah Blah Blah
          },

5. Effect(필수)
statement 내에 필수로 들어가야할 요소로 정책에 대한 허용 및 거부를 나타낸다. 
ex) 
"Statement"[
        {
            "Effect": "Allow" 
          },
         {
            "Effect": "Deny" 
          },

 

길어지니 6번부터는 다음글로 넘어가보자

 

 

Reference:

Version: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_version.html
ID : docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_id.html
Statement: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_statement.html
SID: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_sid.html
Effect: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_effect.html

 

반응형