4. IAM(Identity and Access Management)
• AWS 리소스에 대한 액세스를
안전하게 제어할 수 있는 서비스
• 리눅스 권한과 유사
• root
• user
• service
5. IAM – 용어 정리
• 리소스(Resource)
• IAM에 저장된 사용자, 역할, 그룹 및 정책 객체
• IAM에서 리소스를 추가, 편집 및 제거 가능
• ID
• 식별 및 그룹화에 사용되는 IAM 리소스 객체
• 사용자, 그룹 및 역할 포함
6. IAM – 용어 정리
• 개체(Entities) - 인증에 사용하는 IAM 리소스 객체입니다
• 역할 : 웹 자격 증명 또는 SAML을 통해 페더레이션된 사용자는 물론
사용자 또는 다른 계정의 IAM 사용자
• 사용자 : IAM 사용자(root, user)
• 보안주체(Principal)
• 개체를 사용하여 AWS에 로그인하고 요청하는
사람 또는 애플리케이션입니다.
7. IAM – 용어 정리
• 보안주체
• AWS 리소스에 대한 작업을 요청할 수 있는
사람 또는 애플리케이션
• 필수 - 보안주체로 root를 사용X
• IAM 사용자(user)
• 별개의 계정이 아니라 root 계정 내의 사용자
• IAM User != 사람(일부는 어플리케이션)
8. IAM – 기존 사용자 연동
• 사용자가 이미 기업 디렉토리에 자격 증명을 보유한 경우
• SAML 2.0 호환 X : 기업 디렉토리를 구성하여 사용자에게 AWS Management 콘솔에 대한 SSO 액세스를 제공
• SAML 2.0 호환 O : 자격 증명 브로커 애플리케이션을 생성하여 사용자에게 AWS Management 콘솔에 대한 Single-Sign On(SSO)
액세스를 제공
• 사용자가 이미 인터넷 자격 증명을 보유한 경우
• Login with Amazon, Facebook, Google 또는 OpenID Connect(OIDC) 호환 자격 증명 공급자 등의 인터넷 자격 증명 공급자를 통
해 자신을 식별할 수 있도록 모바일 앱 또는 웹 기반 앱을 만들면, 해당 앱에서 연동을 통해 AWS에 액세스
• https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction_identity-management.html
SAML = Security Assertion Markup Language 2.0
SSO = Single-Sign On
9. 정책
정책
그룹1
IAM – 권한(Permissions) / 정책(Policies)
• 하나의 계정을 관리하려면
정책을 사용하여
해당 계정 내 권한을 정의
• 교차 계정 관리 - AWS Organizations
IAM User(A)
정책
S3 권한
EC2 권한
IAM User(B)
정책
S3 권한
IAM 권한
그룹1
Lambda 권한
Glue 권한
Athena 권한
10. IAM – 정책
1
2
3
4
5
6
7
8
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
}
} cs
• 정책 설명
Dynamo DB에서
us-east-2에서
user(ID=123456789012) 는
Books table에 대한
모든 Action(dynamodb:*)을
허가
12. IAM – 역할
• 유사 IAM User
• AWS 리소스에 액세스할 수 없는
사용자, 애플리케이션 또는 서비스에 액세스 권한을 위임
• IAM User와 다르게 영구적인 ID가 부여X
• 쉽게 말하자면, IAM Access(Secret) Key 를 줄 수 없는 상황에서 사용함
13. IAM – 역할
• 사용 시나리오
• 여러 AWS 계정 전반에 걸친 액세스 권한 제공
• 타사 AWS 계정에 액세스 권한 제공
• AWS 서비스에 대한 액세스 권한 제공
• 자격 증명 연동을 통한 액세스 권한 제공
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:BatchWriteItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": "arn:aws:dynamodb:eu-west-1:123456789012:table/SampleTable"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:eu-west-1:123456789012:*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "*"
}
]
} cs
14. IAM – ARN(Amazon Resource Name)
• 예제 : arn:aws:s3:::example_bucket/marketing/newproductlaunch/widget/*
• 형식 - arn:partition:service:region:account:resource
• partition : 표준 = aws, 다른 파티션에 있는 경우 파티션은 aws-partitionname(ex: aws-cn)
• service : IAM 리소스의 경우 항상 iam입니다(ex: s3, ec2…)
• region : IAM 리소스의 경우 항상 공백입니다(ex: us-east, us-west)
• account : AWS 계정 ID, 하이픈은 제외(ex: 123456789012)
• resource : 리소스
17. EC2 - 기능
• 인스턴스 : 가상 컴퓨팅 환경
• Amazon 머신 이미지(AMI)
• SW, OS 구성된 템플릿 이미지(ex - vmware 이미지)
• 다양한 인스턴스 Type
• 키 페어(.pem)를 사용하여 인스턴스 로그인 정보 보호
• AWS는 퍼블릭 키를 저장
• 사용자는 개인 키를 안전한 장소에 보관
18. EC2 - 기능
• 인스턴스 스토어 볼륨
• 임시 데이터를 저장하는 스토리지 볼륨
• 인스턴스 종료 시 삭제됨
• Amazon Elastic Block Store(Amazon EBS)
• 영구 스토리지 볼륨에 데이터 저장
• 자유롭게 인스턴스에서 접근 가능
• 리전(Region) 및 가용 영역(Availability Zone/AZ)
• 리전 : us-east, ap-northeast-2
• 가용 영역 : ap-northeast-2a, ap-northeast-2 b, ap-northeast-2 c
• 보안 그룹
• 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능
19. EC2 - 기능
• 탄력적 IP 주소(EIP)
• 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소
• 태그
• Amazon EC2 리소스에 할당할 수 있는 메타데이터
• 주로 비용 탐색의 편의성을 위해 사용
• Virtual Private Clouds(VPC)
• 가상 네트워크
• 네트워크를 논리적으로 격리
• 격리된 환경 = 테넌트/Tenent
• CIDR(Classless Inter-Domain Routing)
20. EC2 – 모든 AWS 서비스의 기반?
instance
instance
instance
instance
instance
instance
22. EC2 – 인스턴스 타입
• 타입마다 성능 수치가 다름
• 리전마다 사용 가능한 타입이 다름
• 서울은 스펙이 작은 타입 지원이 적음
• 대신 일반적인 스펙은 지원이 활발
• 세대가 증가할수록 비용감소, 성능 항샹
• M4 → M5
• 세대는 바꾸는 것이 무조건 이득(=HA 구성이 필수인 이유)
• 성능적으로는 바꾸는게 이득이지만 선결제로 구입한 경우가 더 가성비가 좋음
• T시리즈는 되도록 사용X = 서비스 장애의 원인
23. EC2 – T시리즈(Credit)
• 1 Credit = 1분 동안 100%의 사용률로 실행되는 vCPU 하나
• 1 Credit = 2분동안 vCPU 1개 50% 사용
• 1 Credit = 2분동안 vCPU 2개 25% 사용
• 기본 성능만큼의 Credit을 지속적으로 제공
• CPU 사용량 > 제공량 = Credit 잔고 감소(CPU Burst)
• CPU 사용량 < 제공량 = Credit 잔고 증가
• Credit = 0 → 순차적으로 CPU 성능 저하 발생
• Credit 잔고는 최대 한도가 존재(=하루동안 얻을 수 있는 Credit)
24. EC2 – T시리즈(Credit)
• CPU Steel Time
• 하이퍼바이저가 띄운 프로세스에서 가상CPU가 실제CPU를 기다리는 시간
• 발생한 경우엔 회피하기 위해서는 인스턴스 Stop/Start해서 물리 하드웨어를 변경
• 영구적인 회피방법으로는 Unlimit 기능 사용
• 기준 성능
• 인스턴스가 시간당 획득한 크레딧 수를 CPU 사용률의 백분율로 표시한 것
• vCPU가 2개인 t3.nano 인스턴스는 시간당 6개의 크레딧을 획득하므로 vCPU당 기준 성능이 5%(3/60분)
• EBS Optimized 비활성화
• I/O 성능이 보장이 안됨
• T3에서는 활성화 가능
25. EC2 – T시리즈 Unlimit
• CPU Steel Time이 존재하면 안되는 인스턴스에 적용
• T3는 자동 활성화
• 쉽게 생각해서 무이자 마이너스 통장
• CPU 성능 저하 없이 CPU Credit을 빌려 쓸 수 있음
• 24시간동안 잔고가 마이너스가 아니라면 추가비용 발생X
26. EC2 – T시리즈
• 사용하기 좋은 사례
• 메일 서버
• Gateway
• Batch
• 개발/테스트 서버
• 메모리 큐
27. EC2 – Elastic IP(EIP)
• 동적 클라우드 컴퓨팅을 위해 고안된 public, static IPv4 주소
• EIP는 AWS 계정과 연결
• IPv6는 지원X
• 리전당 최대 5개 지원(support를 통해 추가 요청 가능)
• 사용 예시
• 인스턴스 장애 시 주소를 다른 인스턴스로 다시 매핑하는 기능이 필요할 때는 EIP 주소 사용
(다른 모든 노드 간 통신에는 DNS 호스트네임을 사용)
• intel meltdown 사태로 인해 전체적인 인스턴스 교체
• 메일, Gateway 서버처럼 외부에서 접근하거나 타사에 IP가 등록 되어야 할때 사용
• Domain은 없지만 다른 서비스에 OAuth 로그인 제공
• 스팸메일 방지를 위해서 kisa에 화이트 리스트 등록시 IP 필요
28. EC2 – VPC(Virtual Private Cloud)
• 사용자의 AWS 계정 전용 가상 네트워크
• 오리지널 버전은 EC2-Classic 플랫폼
• AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리
• IP 주소 범위, VPC 범위, 서브넷, 보안 그룹을 설정하고
라우팅 테이블을 구성
• 여기서의 서브넷(Subnet)은 VPC의 IP 주소 범위
• 각 서브넷의 AWS리소스를 보호하기 위해
보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 비롯한 여러 보안 계층을 사용
• 격리된 환경 = 테넌트/Tenent
29. EC2 – VPC 장점
• 인스턴스의 시작/중지에 상관 없이 유지되는 고정 IPv4 주소 할당
• IPv6 CIDR 블록을 VPC에 연결하고 IPv6 주소를 인스턴스에 할당하는 옵션 사용
• 인스턴스에 여러개의 IP 주소 할당이 가능
• 네트워크 인터페이스를 정의하고,
하나 혹은 그 이상의 네트워크 인터페이스를 VPC 인스턴스에 설치 가능합니다.
• 인스턴스의 인바운드 트래픽 제어(Ingress filtering),
아웃바운드 트래픽 제어(Egress filtering) 가능
• 네트워크 액세스 제어 리스트(ACL)를 통해,
인스턴스에 대한 액세스 보안이 한단계 더 강화
• 단일 테넌트 하드웨어에서 인스턴스 실행
30. EC2 – VPC Default
• 기본으로 생성된 VPC
• 인터넷 Gateway
• Private IP
• Public IP
• 기본 서브넷(=Public)
• 인스턴스간 통신 가능
31. EC2 – VPC Custom
• 직접 생성한 VPC
• 인터넷 Gateway X
• 기본적으로 Public IP X
• 기본 서브넷(=Public)
• 인스턴스간 통신 가능
32. EC2 – VPC Custom 2
• 직접 생성한 인터넷 가능 VPC
• 인터넷 Gateway 추가
• EC2 인스턴스에 EIP 설정
• 필요한 사례
• AWS Lambda에서
외부 Redis에 연결해야되는 경우
• 별도의 서버 모니터링 서비스에
EC2 인스턴스를 등록할때
39. S3 – 개인적인 활용 사례
• 문제
• 회원 가입시 학생증 사진으로 학교 인증
• 가입 인증 처리 후 삭제가 필요
• 인증 담당자의 잦은 실수
• 스토리지 비용 누적
• 해결
• 15일 뒤에 삭제되는 Life cycle을 설정한 버킷 생성(휴지통)
• 인증처리가 완료되면 휴지통 버킷으로 이동
40. S3 – 단점
• 버킷의 prefix당 초당 횟수 제한이 있음
• PUT/COPY/POST/DELETE = 3500개
• GET/HEAD = 5500개
• 버킷의 최대수 = 100/1000(제한 요청시 가능한 최대)
• 내부적으로 성능이 Scaling되지만
수치적으로 정확히 알 수 없음
→ 버킷/prefix 설계 중요
41. Limit을 초과 가능성?
하나의 버킷(prefix)에 대해서
여러 서비스가 동작할 수 있기 때문에 어느정도 고려 필요
CloudFront
유저/개발자API Gateway
Batch
42. S3 – 설계?
• prefix는 다양하게 – name limit = 1024 bytes
• X – user/123_profile.jpg, 123_profile_thumbnail.jpg
• O - user/[user id]/profile, thumbnails
• 지연시간에 민감
• 최대한 AWS SDK를 사용
• 하나의 object, folder(prefix)에 요청이 몰리지 않게 Balancing
slack/emoji
43. S3 – 설계?
• 재처리는 필요가 아닌 필수!
• 요청이 몰리면 자동으로 Scaling되지만
Scaling 완료될 때까지 방법이 없다...... = 503 Server Error!
• 클라이언트에서 재시도 처리 필수(백오프 방식)
- retry interval = 1차 2초, 2차 4초, 3차 6초
- Scaling이 완료되어 성공할 때까지 재시도
44. S3 – 설계?
• 지연 시간이 매우 짧은(ms)
작은 요청(512KB 미만)은 적극적으로 재시도!
• 멀티파트 업로드 파일(128MB 이상)의 경우,
병목이 걸린 요청들 중에서 가장 느린 일부만(1~5%)
재시도 하는 것이 좋음
• 처리량 자체가 매우 높은 경우,
병렬로 GET/PUT하는 애플리케이션을 사용
(Java SDK - S3 Transfer Manager)
45. S3 – IP문제(Network)
• 느린 이유가 IP 대역문제일때도 있음
• xxx.100~105에 put 요청 중
• 106~110이 새로 Scaling되어 새로운 HTTP Connection 사용 가능
• 이미 진행 중인 요청들은 새로운 커넥션을 쓰지 않아서 요청이 밀림
• 503 Server Error & 재처리의 중요성!
• 주로 IP 캐싱 문제가 많음(로드 밸런싱 X, 단일 IP 사용)
• S3와의 통신에 쓰이는 IP 주소를 확인할 필요가 있음(netstat)
46. S3 – IP문제(Program Language)
• 주로 Java, PHP에서 많이 발생하는 문제
• Java : JVM에서 DNS 조회를 영구 캐시함(InetAddress)
• PHP : PHP VM이 재시작될 떄까지 DNS 조회를 캐싱(getHostByName)
• Python, Node.js에서는 자주 발생하지 않는 이유?
- DNS Caching X, App 수준에서 따로 제어
- 서비스가 죽어서 재시작되어 캐시가 삭제 or 갱신
- 가끔 심심할때 인스턴스를 죽여줘야하는 이유
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/DNSConsiderations.html
47. S3 – Glacier
• 데이터 보관 및 백업을 목적으로
보안 기능과 함께 내구성 있는 저장 공간을 제공하는 매우 저렴한 스토리지 서비스
• 주로 Life cycle, 백업에 사용
• 장점 : 안정적이고 싸다(비용은 1/3, 안정성은 S3와 동일)
• 단점 – 마음대로 사용하기 어려움(자유도=비용 청구)
• 검색 비용이 매우 비싸다(GB당 0.01 USD)
• 3개월 이전에 삭제시 비용발생, 이후에는 무료
• 업로드, 검색에 대한 UI 제공X
• 데이터 다운로드시 3~5시간 소요