클라우드/AWS

[AWS] 2. IAM이란 (정책, 역할, 권한 경계)

윤창이 2023. 3. 3. 13:51
728x90
[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다!

피드백 부탁드립니다. (- -)(_ _) 꾸벅


[ AWS IAM이란? ]

AWS Identity and Access Management (IAM)

  • AWS 계정 및 권한 관리 서비스
  • AWS 서비스와 리소스에 대한 엑세스 관리
  • 사용자, 그룹, 역할, 정책으로 구성
  • 리전에 속하는 서비스가 아닌 글로벌 서비스
AWS 회원가입 시 만들어지는 루트계정은 최초 사용자 계정 생성 이후 가능한 사용하지 않는게 일반적
사용자 계정 (IAM 계정)으로 서비스를 사용하고 사용자는 필요한 최소한의 권한만 부여 (최소권한의 원칙)
또한 암호 정책을 강화하거나 루트와 사용자 계정에 멀티팩터 인증(MFA) 적용하여 강력한 보안 권고 (OTP 등)

 

IAM > 계정 설정 > 암호 정책 편집
IAM > 보안 자격 증명 > MFA 디바이스 할당

액세스 관리

  • 사용자(User) - 사람, ID, 계정
  • 그룹(Group) - 사용자의 모음
  • 역할(Role) - AWS 리소스에서 사용하는 자격증명
    (ex EC2에서 실행되는 애플리케이션이 S3, RDS와 같은 AWS 리소스에 엑세스 하는 권한)

  • 정책(Policy) - 사용자, 그룹, 역할에 대한 권한 정의
    (어떤 것을 할 수 있고, 어떤 것을 할 수 없는지) JSON 문서 형식으로 구성

IAM에 사용자 추가하고 그룹을 할당한 모습 예시


[ IAM - 정책 ]

  • AWS 리소스에 대한 엑세스 권한을 정의한 것
  • 사용자, 그룹, 역할에 정책을 연결하여 사용
  • JSON 문서 형식으로 이루어짐
  • 정책이 명시되지 않는 경우 기본적으로 모든 요청이 거부(Deny)됨

- IAM 정책 JSON 문서 구조

{
  "Statement":[{
      "Effect":"effect",
      "Action":"action",
      "Resource":"arn",
      "condition":{
          "condition":{
              "key":"value"
              }
          }
      }
  ]
}
Effect: Statement에 대한 Access 또는 Deny
Action: 권한에 대한 작업 목록
Resource: 권한이 적용되는 리소스
Condition: 정책이 적용되는 세부 조건 (옵션)

 

 

- Json 정책 구문 예시

{
	"Version": "2012-10-17", 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"lambda:*"
			],
			"Resource": "*"
		},
		{
			"Effect": "Deny",
			"Action": [
				"lambda:CreateFunction",
				"lambda:DeleteFunction"
			],
			"Resource": "*"
			"Condition": {
				"IpAddress": {
					"aws: SourceIp": "220.100.16.0/20"
				}
			}
		}
	]
}
  • Lambda 서비스에 대한 정책이 명시
  • 기본적으로 모든 권한을 허용
  • 220.100.16.0/20 IP 네트워크로부터의 함수 생성과 함수 삭제는 권한이 거부 됨

 

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ec2: TerminateInstances",
			"Resource": "*",
			"Condition": {
				"IpAddress": {
					"aws: SourceIp": "10.100.100.0/24"
				}
			}
		},
		{
			"Effect": "Deny", 
			"Action": "ec2:*" 
			"Resource": "*",
			"Condition": {
				"StringNotEquals": {
					"ec2: Region": "us-east-1"
				}
			}
		}
	]
}
  • EC2 서비스에 대한 정책이 명시
  • 사용자 소스 IP 대역이 10.100.100.0/24인 경우에만 ec2 인스턴스를 종료할 수 있음
  • us-east-1 리전이 아닌 경우에는 모든 작업이 거부 됨
  • 결론: 사용자 소스 IP가 10.100.100.0/24 대역인 경우에만 us-east-1 리전의 ec2 인스턴스를 종료할 수 있음

 

 

IAM - 권한 경계 (Permission Boundary)

  • IAM 사용자 또는 역할에 최대 권한을 제한하는 기능
  • 예를 들어 IAM  사용자에게 Amazon S3, Amazon CloudWatch 및 Amazone EC2만 관리할 수 있게 하려면 아래와 같은 정책을 적용

(좌) S3, Cloudwatch, EC2의 모든 권한과 자원을 Allow 하는 정책

위와 같이 S3, Cloudwatch, EC2의 모든 권한과 자원을 Allow하는 정책(파란색)과
모든 권한을 허용하는 정책(노란색)이 동시에 적용되어 있다고 하면

권한이 중첩되는 부분만 적용이 되므로 3가지의 권한만 가지게 됨

 

IAM 유저 권한 중 EC2 Full 권한을 줬더라도 아래와 같이 권한 경계에 Read Only만 있으면 오로지 Read only만 가능 (최대 권한 제한)

 


[ IAM - 역할 ]

  • AWS 리소스에서 사용하는 자격증명
  • 특정  AWS 서비스가 다른 AWS 서비스에 액세스하여 작업을 수행할 때 필요한 권한
  • 정책을 연결하여 IAM 역할에 작업 수행에 필요한 권한을 부여

만일 EC2에서 실행되는 애플리케이션이 AWS S3와 AWS RDS 엑세스 권한이 필요할 때 역할 사용

 

신뢰 정책 (Trust Policy)

  • IAM 역할을 사용하여 AWS 계정 간 엑세스 권한 위임 기능
  • 신회 정책을 사용하여 다른 AWS 계정에 역할을 위임할 수 있음
질문
회사에는 ProductionDevelopment 라는 두 개의 AWS 계정이 있습니다. 회사는 Development 계정의 코드 변경 사항을 Production 계정으로 푸시해야 합니다. 알파 단계에서는 개발 팀의 두 명의 개발자만 Production 계정에 액세스할 수 있습니다. 베타 단계에서는 더 많은 개발자가 테스트를 수행하기 위해 액세스 권한이 필요합니다.
어떤 솔루션이 이러한 요구 사항을 충족합니까?

솔루션
Production 계정에서 IAM 역할을 생성합니다. Development 계정을 지정하는 신뢰 정책을 정의하십시오. 개발자가 역 할을 맡도록 허용합니다.

 

IAM > 역할에서 S3와 RDS 접근할 수 있는 권한이 있는 Role을 만들었고, 아래 사진처럼 EC2 생성 시 고급 세부 정보에서 IAM 인스턴스 프로파일을 지정할 수 있다. 

이 EC2는 S3와 RDS에 대한 모든 접근 권한을 가지는 역할을 갖게 된다

 

 


[ IAM 보안도구 - IAM Security Tools ]

(좌) 자격 증명 보고서, (우) 액세스 관리자

 

IAM 자격증명 보고서 (Credentials Report)

  • 계정의 모든 사용자와 암호, 엑세스 키, MFA 디바이스 등의 자격 증명 상태에 대한 보고서(csv 파일)를 다운로드

 

IAM 액세스 관리자 (Access Advisor)

  • 사용자 또는 역할이 허용된 서비스에 마지막으로 액세스하려고 시도한 시간을 표시
  • 이 정보를 통해 필요이상으로 부여된 권한을 재정의 하는데 참고

 


[ IAM Policy Simulator ]

https://policysim.aws.amazon.com/home/index.jsp?# 

 

https://policysim.aws.amazon.com/home/index.jsp?

 

policysim.aws.amazon.com

시뮬레이터를 통해 유저나 역할에 대한 권한을 확인해 볼 수 있음

 


 

728x90