IAM 이란, Identity and Access Management 의 약자

리전과 상관없는 Global 서비스

 

 

AWS 계정을 만들고 사용하면 곧바로 생기는 Root account 는 절대 사용하지 말라고 함

대신 'User' 하나를 만들어서 사용하라고 함

User 는 AWS 계정에 종속되어있는 하나의 사용자 단위인 듯 함

AWS 를 사용하는 사용자들 하나 하나를 User 라고 볼 수 있음

이 사용자 단위 'User' 를 여럿 묶어서 그룹으로 만들 수 있다고 함

즉, 'Group' 은 User 들을 모아둔 것

 

 

 

Group 안에 User 를 넣을 수 있지만,

Group 안에 또 다른 Group 을 넣을 순 없다고 함

반대로, User 는 여러 Group 에 속하는 게 가능하다고 함

 

 

 

이렇게 User 와 Group 의 단위로 사용자를 구분하는 이유는,

각 User 혹은 Group 단위로 권한을 부여하기 위함

어떤 User 사용자는 S3 에 접근하면 안 되지만 어떤 사용자는 가능하고

또 어떤 Group 그룹(내 사용자들)은 EMR 을 사용하면 안 되지만 어떤 그룹(내 사용자들)은 가능하고... 이런 식.

 

 

 

 

 

 

 

User, Group 혹은 Service 에 부여하고 싶은 권한 내용을 적어둔 json 문서를 IAM policies 라고 함

json 형태로 구성되며, 어떤 User, Group 혹은 Service 가

어떤 Resource(s3 혹은 emr 등)에 대해  어떤 액션(작업)을 허용할지 내용이 적혀있음

 

User, Group 은 이 Policies 를 바로 적용받을 수 있지만 (Role 불필요함)

Service 는 Role 을 통해서 적용받을 수 있음

 

이를테면, A User 가 s3 에 접근 및 업로드 가능하도록 하려면

아래와 같은 policy 를 만들고 A User 에게 "Add permissions" 로 넣어주면 됨

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": "*"
    }
  ]
}

 

IAM Console → Users → developer → Permissions → Add Permissions → Attach policies directly

 

 

(직접 json 을 만들지 않고, 콘솔에서 제공해주는 툴을 사용하거나, 이미 완성되어있는 policy 사용 가능함)

- Version : policy 의 버전

- Id : policy 의 id (optional)

- Statement : 실제 내용

- Sid : statement 의 id (optional)

- Effect : 권한을 부여할지, 막을지 넣음. Allow, Deny 둘 중 하나

- Principal : 권한을 부여받을 User, Group,  Account 혹은 (아래서 설명할) Role

- Actions : 부여할 작업 권한

- Resource : 권한 부여의 대상이 되는 리소스. s3, emr 등

- Condition : (위 json 에는 없지만) 해당 policy 가 언제 적용될지 결정하는 내용 (optional)

 

 

 

User, Group 에 부여한 권한들은

IAM  각 user, group 상세 페이지의 Permissions 에서 확인 가능

 

 

최근에는 User,  Group 에 직접 Policies 를 부여하지 않음. 보안상 위험이 되기 때문에.

대신, 사용자에게 SSO 로그인을 하라고 시킴

사용자가 SSO 로그인을 하면 "Role 목록"을 선택할 수 있게 되고

선택한 Role 에 따라서 권한을 부여받고 권한 행사가 가능하게 됨

 

 

 

다시 정리,

Policy 는 단지 '권한' 을 나타내는 문서일 뿐

policy 자체로는 아무 일도 할 수 없음

s3 읽을 수 있다, emr node 수정 가능하다 등 할 수 있는 권한 목록을 나열한 것

이 policy 를 누군가에게 붙여야 비로소 policy 내용을 기반으로 권한을 갖게 됨

여기서 말하는 '누군가'라는 것은 위에서 설명한 User, Group, 그리고 Service(by role)

 

 

 

 

IAM Role 이란, 어떤 서비스가 어떤 정책을 사용할 수 있도록 하는 AWS의 신분증

EC2, S3 등의 Service 에 사용 권한인 Role 을 붙이고

동시에 Policy 를 붙일 수 있음

 

예를 들어 EC2 에서 S3 데이터를 가져오는 코드를 동작시키고 싶음

MyRole 이라는 Role 을 하나 만듦

여기에 붙일 Policy 는 "s3 access 가 가능하다" 라는 내용의 json 이며

여기서 붙일 Service 는 EC2 임

결과적으로 EC2 가 MyRole 을 사용하여(assum) s3 에 접근할 수 있는 권한을 받고

s3 에 접근하여 작업을 진행할 수 있게 됨

 

MyRole 을 생성할 때 아래처럼 "EC2 가 해당 Role 을 사용한다" 라는 정보가 포함되어 있음

이것을 "Trust Policy(role 내에 이미 이 role 을 사용할 서비스가 포함됨)" 라고 함

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

 

그리고 이 Role 에서 사용하고 싶은 Policy 는 아래처럼 설정하고

Roles -> Permission -> Add permissions -> Create inline policy 를 클릭하여 policy 를 추가함

이것을 "Permissions Policy(무엇을 할 수 있는지)" 라고 함

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ]
    }
  ]
}

 

결과적으로, 이렇게 생성한 MyRole 은

- EC2 가 이 Role 을 갖음

- 이 Role 에 붙어있는 policy 는 s3 접근 허용 내용을 담고 있음

- EC2 가 s3 접근 가능함

 

MyRole  
├── Trust Policy: allow EC2 assume  
└── Attached Policies  
     └── S3-Read-Policy 

 

role 을 생성하는 시점에 누가(어떤 service? EC2? EMR?) 이 role 을 사용할지 이미 role 안에 정보가 있고, 

이 role 에 원하는 policy 를 붙이면 (role에 설정된)누군가가 해당 policy 를 받고 권한을 부여받을 수 있다는 이야기

 

이렇게 세 가지가 하나를 이루게 되는구먼....

 

 

 

 

아무나 role 의 policy 를 갖다 붙일 수 있으면 아무나 다 권한을 부여받을 수 있겠지(보안 사고)

이를 막기 위해 Role에 Policy를 붙일 수 있는 권한은 매우 제한된 사람(보안팀/Cloud Admin)만 갖음

 

일반적으로, 일반 개발자는 다음을 할 수 없도록 막아둠
- Role 생성
- Policy 생성
- Role에 Policy 붙이기
- Role에 Policy 삭제
- Trust Policy 수정
- STS AssumeRole 권한 추가

 

대신 일반 개발자는 보안팀에서 만들어 준 Role 을 사용하는 것만 할 수 있음

예를 들어, 일반 개발자가 EMR 에서 작업을 하고 싶으면

EMR 클러스터를 띄우고 s3 접근 권한이 있는 EMR용 role 을 가져다가 사용함

 

 

 

 

 

IAM MFA 는, Multi Factor Authentication 의 약자이고

User 가 로그인 할 때 단순히 id, pw 로 로그인 성공하는 게 아니라

User 의 비밀번호와 User 의 Device (보안장치) 의 조합으로 비밀번호를 만들어 로그인하는 것임

여기서 보안장치는 예를 들어 OTP 가 될 수 있음

 

 

 

 

 

 

+ Recent posts