[AWS] IAM: 역할과 정책

이전 포스트
https://blog.naver.com/sssang97/222503738493
이전 포스트에 이어 작성한다.
역할(role)과 정책(policy)
사용자 계정이 말 그대로 사용자들에게 정책을 부여해서 권한을 관리하는 것이라면,
역할은 AWS 리소스들에게 정책을 부여해서 권한을 관리하는 것이다.
예를 들어, 내 Lambda 함수 리소스를 한번 보자

대부분의 AWS 리소스는 역할을 하나씩 갖고있는데, 이것도 그렇다.

역할이 있고
그 역할에 부여된 정책들에 의해서만 권한을 휘두를 수가 있다.
이런 부분은 사용자에 정책을 부여하는 것과 동일하다.
정책(Policy) 정의하기
정책을 정의하는 기본 골자부터 천천히 다뤄보겠다.
정책은 상기했듯 접근권한을 직접적으로 관리해주는 녀석이다.
직접 만들수도 있고, 대충 쓸 수 있게 미리 제공하는 것들이 있는데, 예를 들어 저기서 AmazonS3FullAccess는 말 그대로 S3에 대한 모든 권한을 부여해주는 정책이다.

저걸 까보면, 실제로는 아래와 같은 구조의 JSON 값으로 구성이 되어있고, 이런식으로 또 직접 만들어서 사용할 수도 있다.
저 JSON은 모든 리소스에 s3 계열의 모든 행동을 허용하는 정책이라는 뜻이다.
그래서 보통 이런 형태를 띤다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"허가할 행동들..."
],
"Resource": "리소스 대상"
}
]
}
기본적으로 정책은 Statement의 배열로 여러개의 조건을 지정할 수 있다.
Effect: "Allow"는 해당 내용들을 허용한다는 뜻이다. 자주 쓰지는 않지만 허용 대신 거부 조건인 "Deny"를 쓸 수도 있다.
Action은 말 그대로 허용할 행동들을 정의한다. 예를 들어 s3에 대한 단일 개체 읽기만 써도 충분하다면 "s3:GetObject"로 줘도 되고, s3의 모든 처리를 다 해야한다면 와일드카드로 "s3:*"를 줘도 된다.
아래 AWS 문서에 들어가서 쓰고싶은 리소스 페이지로 들어가면, Action들의 목록을 확인해볼 수 있다.
https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html
Resource는 어떤 리소스에 대한 행동을 허가할 것인지를 지정한다. 예를 들어 s3에 액세스할때 아무 버킷에나 접근해도 상관없다면 와일드카드 *를 주면 되지만, 특정 버킷에만 접근할 수 있는 정책을 정의하고 싶다면 해당 버킷의 ARN를 넣어주면 되는 것이다.
그래서 만약 "boom-bucket"라는 버킷이 있고, 그 버킷에 대해서만 권한을 가지는 정책을 정의한다면 이런식으로 할 수 있을 것이다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::boom-bucket"
}
]
}역할(Role) 정의하기
역할은 리소스를 만들때 자동으로 함께 만들게 될때가 많은데, 가끔은 직접 만들어쓸 경우도 있다.
한번 만들어보자.
생성 창에 들어가면 신뢰 관계(trust policy)라는 것을 먼저 정하라고 한다.
쉽게 말하면 어떤 리소스에서만 이 역할을 쓰게 할 것인지를 미리 정해두는 것이다.
Lambda 리소스를 만들때 자동으로 만들어진 신뢰관계는 이런식으로 만들어져 있다.
여기서는 람다 서비스만 허용해주도록 했다.
저 lambda.amazonaws.com는 람다 서비스를 가리키는 도메인이다. 저거 말고도 이것저것 있다.
아무튼 마저 만들어보자.
여기서 JSON 직접 입력으로 만들 수도 있지만, 그냥 일반 사용사례에서 선택해서 만드는게 편하다.
내 경우에는 EC2로 했다. 이러면 EC2에만 달 수 있는 역할이 된다.
그다음에는 역할에 부착할 정책들을 연결한다.
적당히 필요한대로 고르고
이름짓고, 잘 확인하고 만들면 된다.

그럼 이렇게 잘 생성될 것이다.
이제 이걸 필요한데다가 갖다붙여서 쓰면 된다.
참조
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies.html