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 가 될 수 있음
'눈가락' 카테고리의 다른 글
| [JAVA] Generic 간단한 샘플 코드 (0) | 2023.08.20 |
|---|---|
| [리뷰] 페어페딕7 카키 한 달 사용 후기 (1) | 2023.01.07 |
| [GIT] The source branch is n commits behind the target branch 경고 해결 방법 (0) | 2022.11.17 |
| [IT] 빅데이터 필드 기술질문 대비 적어두는 것들 (0) | 2022.08.26 |
| [IT] Orc vs Parquet 비교 (0) | 2022.08.10 |