AWS

IAM Policies의 JSON 문서 살펴보기

S_N_Y 2024. 5. 1. 14:05

 

IAM 정책을 만들다보면 이런 식으로 정책을 JSON문서로 확인할 수 있는데

오늘은 이 세부적인 사항들에 대해서 다뤄보려고 한다.

 

#0 IAM Policies - JSON 문서 살펴보기📜

이 안에는 Effect, Action, Resource, Conditions, Policy Variables(정책 변수) 즉, 4~5가지 사항이 포함되어 있다.

JSON Policies가 슬슬 익숙하겠지만 그림으로 같이 살펴보겠다.

정책은 이런 식으로 생겼는데 해석해보면 다음과 같다.

 

✅ Resource : arn~ec2:*~instance/*

=> 모든 EC2 인스턴스를 나타낸다.

✅ Condition : StringEquals ResourceTag/Department : Department

=> 해당 태그가 있는 EC2 인스턴스만 볼륨에 연결 혹은 분리

 

여기서는 안 나오지만 중요한 점은 🎈DENY가 포함된 IAM 정책의 경우, 모든 ALLOW 명령보다 선행된다.🎈

 

<IAM 도구 살펴보기>

*️⃣ IAM Access Advisor : IAM 정책에 부여된 모든 권한을 살펴보고 각 권한의 마지막 액세스가 언제였는지를 확인할 수 있다.

(1년 가량 사용한 적이 없는 정책 등이 있는 경우에는 최소 권한을 유지할 수 있도록 이를 해당 IAM 정책에서 삭제하는 것이 좋다)

*️⃣ Access Analyzer : S3 버킷과 같은 외부 개체와 공유한 리소스를 분석할 수 있다.

또한 S3 버킷에 다른 계정이 액세스할 수 있는지를 확인할 수도 있다.

외부 계정의 액세스를 원치 않는다면 해당 S3 버킷을 잠글 수도 있다.

 

우리가 익히 알고 있는 최고 관리자 정책 JSON 문서이다. 다 허용된 것을 확인

그 다음 아래의 권한인 PowerUserAccess를 살펴보자

이 정책의 처음을 보면 거의 전부 다 *인데 IAM 조직 및 계정에 대한 어떤 액세스도 허용하지 않는다고 설정되어 있는 것을 확인할 수 있다.

(그럼에도 일부 허용하는 IAM Action이 있는데 CreateServiceLinkedRole, DeleteServiceLinkedRole, ListRoles DescribeOrganization, ListRegions가 있다.)

 

여기서 중요하게 가져가야 할 포인트가 있다.

...

좌측에 Effect나 Deny가 아닌 NotAction을 썼을까?🤔

=> 단순히 Effect, Deny와 다음의 3가지 작업을 지정한 뒤, Effect나 Deny로 다음 5가지 작업을 지정하면 뒤에 오는 5가지 작업도 자동으로 거부된다. 왜냐면 좌측에 명시적으로 DENY 명령이 있기 때문

모든 작업을 거부하지 않고 일부 작업은 명시적으로 허용하고자 할 때, DENY 대신 NotAction을 사용해서 거부와 허용이라는 명령이 동시에 존재하도록 할 수 있다.

 

#1 IAM Policies의 Conditions🌬️

Condition가 어떤 모습인지를 한 번 살펴보자

condition-operator condition-key, condition-value가 있다.

Condition을 이용하면 각종 작업을 할 수 있는데

그 중 첫 번째로 String 연산자를 살펴보자면 가령

PrincipalTag/job-category를 iamuser-admin로 설정하고자 할 때, 태그 지정에 해당 연산자를 사용할 수 있다.

그 외에도 이 연산자를 통해 S3 버킷 정책에 대한 prefix를 사용자의 특정 홈 디렉터리에만 액세스 가능하도록 설정할 수도 있다.

 

그 외에도 Numeric 연산자가 있는데 여기에는 Equals, NotEquals LessThan 등이 포함된다.

Dates, 즉 날짜 비교 연산자도 있는데 이 연산자는 특정 서비스에 일시적인 액세스 권한을 부여할 때 유용히 쓰이고 Booleans은 SSL에 대한 평가, 즉 SecureTransport이 true인지를 판단할 때 아주 유용하다.

그 외에도 MFA, 즉 MultiFactorAuthPresent가 true인지를 확인할 때도 쓰이고

IpAddress, NotIpAddress라는 Condition도 있는데 이 Condition은 S3 버킷 정책이나 서비스에 특정 소스 IP만이 액세스하도록 설정할 때에 활용할 수 있다. IpAddress를 통해 SourceIp가 CIDR 블록의 IP, 그리고 /24일 때만 액세스 가능하도록 지정할 수 있다.

끝으로 ArnEquals, ArnLike과 Null이 있다. 특정 요소가 Null인지 여부를 확인할 수 있는 것이다!