728x90
[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다!
피드백 부탁드립니다. (- -)(_ _) 꾸벅
[ AWS IAM이란? ]
AWS Identity and Access Management (IAM)
- AWS 계정 및 권한 관리 서비스
- AWS 서비스와 리소스에 대한 엑세스 관리
- 사용자, 그룹, 역할, 정책으로 구성
- 리전에 속하는 서비스가 아닌 글로벌 서비스
AWS 회원가입 시 만들어지는 루트계정은 최초 사용자 계정 생성 이후 가능한 사용하지 않는게 일반적
사용자 계정 (IAM 계정)으로 서비스를 사용하고 사용자는 필요한 최소한의 권한만 부여 (최소권한의 원칙)
또한 암호 정책을 강화하거나 루트와 사용자 계정에 멀티팩터 인증(MFA) 적용하여 강력한 보안 권고 (OTP 등)
액세스 관리
- 사용자(User) - 사람, ID, 계정
- 그룹(Group) - 사용자의 모음
- 역할(Role) - AWS 리소스에서 사용하는 자격증명
(ex EC2에서 실행되는 애플리케이션이 S3, RDS와 같은 AWS 리소스에 엑세스 하는 권한)
- 정책(Policy) - 사용자, 그룹, 역할에 대한 권한 정의
(어떤 것을 할 수 있고, 어떤 것을 할 수 없는지) JSON 문서 형식으로 구성
[ 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하는 정책(파란색)과
모든 권한을 허용하는 정책(노란색)이 동시에 적용되어 있다고 하면
권한이 중첩되는 부분만 적용이 되므로 3가지의 권한만 가지게 됨
[ IAM - 역할 ]
- AWS 리소스에서 사용하는 자격증명
- 특정 AWS 서비스가 다른 AWS 서비스에 액세스하여 작업을 수행할 때 필요한 권한
- 정책을 연결하여 IAM 역할에 작업 수행에 필요한 권한을 부여
신뢰 정책 (Trust Policy)
- IAM 역할을 사용하여 AWS 계정 간 엑세스 권한 위임 기능
- 신회 정책을 사용하여 다른 AWS 계정에 역할을 위임할 수 있음
질문
회사에는 Production 및 Development 라는 두 개의 AWS 계정이 있습니다. 회사는 Development 계정의 코드 변경 사항을 Production 계정으로 푸시해야 합니다. 알파 단계에서는 개발 팀의 두 명의 개발자만 Production 계정에 액세스할 수 있습니다. 베타 단계에서는 더 많은 개발자가 테스트를 수행하기 위해 액세스 권한이 필요합니다.
어떤 솔루션이 이러한 요구 사항을 충족합니까?
솔루션
Production 계정에서 IAM 역할을 생성합니다. Development 계정을 지정하는 신뢰 정책을 정의하십시오. 개발자가 역 할을 맡도록 허용합니다.
IAM > 역할에서 S3와 RDS 접근할 수 있는 권한이 있는 Role을 만들었고, 아래 사진처럼 EC2 생성 시 고급 세부 정보에서 IAM 인스턴스 프로파일을 지정할 수 있다.
[ IAM 보안도구 - IAM Security Tools ]
IAM 자격증명 보고서 (Credentials Report)
- 계정의 모든 사용자와 암호, 엑세스 키, MFA 디바이스 등의 자격 증명 상태에 대한 보고서(csv 파일)를 다운로드
IAM 액세스 관리자 (Access Advisor)
- 사용자 또는 역할이 허용된 서비스에 마지막으로 액세스하려고 시도한 시간을 표시
- 이 정보를 통해 필요이상으로 부여된 권한을 재정의 하는데 참고
[ IAM Policy Simulator ]
https://policysim.aws.amazon.com/home/index.jsp?#
728x90
'클라우드 > AWS' 카테고리의 다른 글
[AWS] 1. AWS 시작하기 (비용관리, 글로벌 인프라) (0) | 2022.08.09 |
---|---|
[AWS] Solutions Architect-Professional(SAP) 도전기 (2) | 2022.07.28 |