73
AWS Identity and Access Management AWS Black Belt Tech Webinar 2014 (Old Meister) Written by: Amazon Data Services Japan Ltd. Security consultant : Takada Tomomi Translated by: Amazon Corporate Services Korea LLC Solutions Architect : Younjin Jeong

20150109 - AWS BlackBelt - IAM (Korean)

Embed Size (px)

Citation preview

Page 1: 20150109 - AWS BlackBelt - IAM (Korean)

AWS Identity and Access Management

AWS Black Belt Tech Webinar 2014 (Old Meister)Written by: Amazon Data Services Japan Ltd. Security consultant : Takada Tomomi

Translated by:Amazon Corporate Services Korea LLC Solutions Architect : Younjin Jeong

Page 2: 20150109 - AWS BlackBelt - IAM (Korean)

Agenda

• IAM overview

• IAM policy

• IAM role

• AWS Security Token Service

• 정리

Page 3: 20150109 - AWS BlackBelt - IAM (Korean)

Agenda

• IAM overview

• IAM policy

• IAM role

• AWS Security Token Service

• 정리

Page 4: 20150109 - AWS BlackBelt - IAM (Korean)

AWS Identity and Access Management (IAM)

• AWS 를 안전하게 사용하기 위한 인증/허가 시스템

• AWS 사용자 인증 및 접근 정책 관리 AWS 관리를 위한 그룹, 사용자 및 role (역할) 생성 가능

그룹별 제한된 권한의 부여가 가능

사용자별 인증 및 권한 부여가 가능

개발팀 운영팀

Page 5: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 동작 방식API 및 관리 콘솔에서 접근 권한을 설정/확인

모든 작업가능

S3에 대해모든 작업가능

S3 읽기만가능

관리자

개발자

사용자

IAM

O

O

O

X

X

Page 6: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 사용자• AWS account 를 통한 관리 작업을 위해 생성 가능한 사용자

– AWS 1개의 계정 (account) 에 5000 명까지 생성 가능

• 사용자별 설정 가능 정보– 사용자 이름

• IAM 식별 관리 및 관리 콘솔 로그인에 사용하는 ID

• 최장 64 까지의 알파벳, 숫자, +=,.@-_

– 경로 (옵션)

• 사용자 옵션으로 넣을 수 있는 정보

• 경로를 바탕으로 사용자의 검색이 가능

• 조직 계층이나 프로젝트 구성등을 설정하는데 사용 예)/aws/sa/

• 512자 까지 Basic Latin 문자(알파벳, 숫자, 다음과 같은 특수기호, !"#$%&'()=~|-^\@`{[}]*:+;?_)

• 시작과 끝이 ‘/’

– 소속 그룹

• 사용자당 10개의 그룹에 소속 가능

– 권한

• AWS 서비스에 대한 접근 권한을 API 레벨에서 설정 가능

• JSON 형식으로 권한을 설정– 세부 내용은 계속

Page 7: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 그룹

• IAM 사용자를 그룹화 하여 관리 가능– AWS 1개의 계정 (account) 에서 100 개의 그룹까지 생성 가능

• 그룹에 설정 가능한 정보– 그룹 이름

• 그룹의 식별에 사용

– 경로(옵션)

• 조직의 계층 등을 묘사하는데 사용 예)/aws/

– 권한

• 그룹에 설정된 권한은 IAM 사용자에게 설정된 권한과 상충 되는지 체크

• 체크의 방법은 이후에 계속

Group

Page 8: 20150109 - AWS BlackBelt - IAM (Korean)

IAM에서 사용하는 인증 도구(1) 엑세스키 ID / 비밀 엑세스키 (Access Key ID / Secret Access Key)

REST,Query 형식의 API 인증에 사용

2개까지 생성 가능

Active/Inactive 상태의 전환 가능

키의 노출에 매우 주의가 필요

GitHUB

AMI 에 포함

문서로 작성, 배포

암호화되지 않은 메일에 기입

X.509 Certificate

SOAP 방식의 API 요청 인증에 사용

OpenSSL 등의 도구로 인증서를 생성, 업로드

Page 9: 20150109 - AWS BlackBelt - IAM (Korean)

IAM에서 사용하는 인증 도구 (2)

AWS 관리 콘솔 로그인 암호 기본값은 설정되지 않음 (로그인 불가)

128 문자까지 Basic Latin 타입을 사용

암호 변경을 강제하는 정책 설정이 가능

AWS 계정별로 생성 가능

최소 암호 길이, 대소문자 구분 등

MFA (Multi-Factor Authentication) 하드웨어 기반의 MFA 또는 소프트웨어 기반의 MFA 중 택일

하드웨어 MFA

Gemalto 사에서 AWS 용 장치를 구입

Token 유형

카드 유형 (NEW! 2014/5/29)

http://onlinenoram.gemalto.com/

소프트웨어 기반 MFA

스마트 폰 또는 PC에 설치

Google Authenticator 등 TOTP가 구현된 소프트웨어 사용가능

New!

Page 10: 20150109 - AWS BlackBelt - IAM (Korean)

관리 콘솔 로그인 방법

• IAM 사용자는 AWS 계정에 마련된 별도의 URL 에서 로그인 가능

• 기본 URL + 계정 이름의 형태

• 「Account Alias」사용자가 쉽게 인식 가능한 URL 사용 가능

– S3 bucket 이름과 마찬가지로 Global unique

Page 11: 20150109 - AWS BlackBelt - IAM (Korean)

AWS 계정의 비밀 엑세스키에 대해

• 보안성 강화 정책으로 인해 AWS root account 계정에 대한 “기존의” 비밀키를 확인하는 것이 2014년 4월 21일 부터 불가능 합니다.

• 만약 현재 사용중인 키를 분실하였다면, 새로운 키를 발급하여 사용해야합니다.

• root account 의 사용자 키를 만들어서 사용하는 방법은 권고되지 않으며,모든 작업에 대해 IAM 사용자를 만들어 사용하는 것이 좋습니다.

Page 12: 20150109 - AWS BlackBelt - IAM (Korean)

Agenda

• IAM overview

• IAM policy

• IAM role

• AWS Security Token Service

• 정리

Page 13: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 (policy) • AWS 접근 권한의 설정

• JSON 형태로 접근 조건을 상세하게 지정– http://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage.html

{"Statement

{"Effect": "Allow","Action": [" s3:ListBuckets "," s3:Get * "

], "Resource": [" arn:aws:s3:::mybucket "

],"Condition": {"IpAddress": {"aws:SourceIP": [“176.32.92.49/32“]

}}

}]

}

이 조건으로 AWS 접근권한을확인

Page 14: 20150109 - AWS BlackBelt - IAM (Korean)

접근 권한 설정

{"Effect": "Allow","Action": [

" s3:ListBuckets "," s3:Get * "

], "Resource": [

"arn:aws:s3:::mybucket"],"Condition": {

"IpAddress": {"aws:SourceIP":

[“176.32.92.49/32“]}

}}

Effect:접근 허용 (whitelisting) ”Allow”접근 거부 (blacklisting) ”Deny”

Action:적용할 AWS API 를 지정

Resource:작업 대상이 되는 AWS 리소스를 지정

Condition:세부 조건을 지정 (대상 인스턴스, 소스IP등)

본 정책은 “S3 mybucket 에 대해 ListBuckets 과 모든 Get API 를요청하는 176.32.92.49/32 호스트에만 허용한다” 를 정의 한다.

Page 15: 20150109 - AWS BlackBelt - IAM (Korean)

Action

• 「Action」은 수행할 작업 자체에 대한 설정 ec2:runInstances

ec2:AttachVolume

s3:CreateBucket

s3:DeleteObject

와일드카드 지정이 가능 예)ec2:Describe*

지정된 작업 이외에는「NotAction」을 사용 예)“NotAction”: “iam:*” (IAM 작업 이외 허용)

"Action": [" s3:ListBuckets"," s3:Get*"

]

Page 16: 20150109 - AWS BlackBelt - IAM (Korean)

Resource

• 「Resource」은 작업 대상을 지정하는 설정 EC2 인스턴스

EBS 볼륨

S3 버켓

S3 오브젝트

• ARN(Amazon Resource Name)

“arn:aws:” 로 시작하는 문자열

arn:aws:service:region:account:resource

예) arn:aws:s3:::mybucket http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html

• 지정 자원 이외에는「NotResource」– 예) “NotResource” : “arn:aws:s3:::hoge”

"Resource": [" arn:aws:s3:::mybucket"

]

Page 17: 20150109 - AWS BlackBelt - IAM (Korean)

Resource로 지정할 수 있는 AWS 서비스

• AWS IAM

• Amazon EC2

• Amazon RDS

• Amazon Route53– Hostedzone,change

• Amazon S3– bucket,object

• Amazon Glacier– vault

• AWS Storage Gateway– gateway,volume,target

• AWS CloudTrail

http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SpecificProducts.html

• Amazon SimpleDB– domain

• Amazon Redshift

• Amazon Kinesis– stream

• Amazon SNS– topic

• Amazon SQS– queue

• Amazon DynamoDB– Table, index

• Amazon SWF– domain

• AWS Elastic Beanstalk

• AWS CloudFomration

• AWS OpsWorks

• Amazon CloudSearch– domain

• Amazon Elastic Transcoder

• AWS Marketplace

2014/6 기준

Page 18: 20150109 - AWS BlackBelt - IAM (Korean)

Amazon EC2 Resource 지정• 다음의 리소스 지정이 가능

– VPC

– VPC Peering connection

– 인스턴스 ID

– 이미지

– Key pair

– Network Interface

– Subnet

– Route table

– Placement group

• 지정 가능한 Action에 대해서는 온라인 문서를 참조– AcceptVpcPeeringConnection, CreateVpcPeeringConnection, DeleteVpcPeeringConnection

– RebootInstances,StartInstances,StopInstances,TerminateInstaces, RunInstances

– AttachVolume,DeleteVolume,DetachVolume

– 기타 등

• Condition 을 사용한 세부 조건에 대한 명시가 가능 (이후 설명)

"Resource": [arn:aws:ec2:::instance/i-123abc"

]

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.htmlhttp://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-permissions.html

– Security Group

– Network ACL

– Customer gateway

– Internet gateway

– DHCP Options set

– 인스턴스 프로파일 이름

– Placement group 이름

– 스냅샷 ID

– EBS 볼륨 ID

NEW! 2013/11

2014/6 기준

Page 19: 20150109 - AWS BlackBelt - IAM (Korean)

Condition

• Resource에 대한 Action (허용 또는 거부)별 조건을 설정• 정책 변수 (조건키)에 대한 연산자를 사용하여 조건을 지정

http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#Condition

"Condition": {"IpAddress": {"aws:SourceIP": “176.32.92.49/32“ }

}

연산자 정책 변수 조건

Page 20: 20150109 - AWS BlackBelt - IAM (Korean)

Condition 연산자• 문자열

– 완전일 치 또는 부분 일치의 여부

• 수치– 부등식

• 날짜 및 시간– 지정한 날짜 이전 또는 이후

• Boolean

• IP 주소– 지정된 주소의 범위

• Amazon 리소스 이름– 완전 일치 또는 부분 일치

• ...IfExists– 위 연산자들에 조건을 부여, 변수가 없으면 무시

• 조건키의 유무

http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#Condition

"Condition": {"StringEquals": {"ec2:ResourceTag/stack":

“prod"}}

"Condition": {“streq": {"ec2:ResourceTag/stack":

“prod"}}

Page 21: 20150109 - AWS BlackBelt - IAM (Korean)

정책 변수

• 모든 요청에 유효한 변수– aws:CurrentTime

– aws:EpochTime

– aws:TokenIssueTime

– aws:principaltype

– aws:SecureTransport

– aws:SourceIp

– aws:UserAgent

– aws:userid

– aws:username

• AWS 서비스 관련 변수– s3:prefix

– sns:Protocol

– ec2:ResourceTag/tag 이름 등

"Condition": {"IpAddress": {"aws:SourceIP":

“176.32.92.49/32“}}

예를 들어, API / 콘솔에 대한 사용을 지정된IP 에만 허용하려는 경우 사용

Page 22: 20150109 - AWS BlackBelt - IAM (Korean)

EC2 리소스에 대한 정책 변수• ec2:AccepterVpc

• ec2:AvailabilityZone

• ec2:EbsOptimized

• ec2:ImageType

• ec2:InstanceProfile

• ec2:InstanceType

• ec2:Owner

• ec2:Public

• ec2:ParentSnapshot

• ec2:PlacementGroup

• ec2:PlacementGroupStrategy

• ec2:Region

• ec2:RequesterVpc

• ec2:ResourceTag/tag-key

• ec2:RootDeviceType

• ec2:Tenancy

• ec2:VolumeIops

• ec2:VolumeSize

• ec2:VolumeTypehttp://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html

2014/6 기준

"Condition": {"StringEquals": {“ec2:ResourceTag/Name":

“webserver“}}

Page 23: 20150109 - AWS BlackBelt - IAM (Korean)

여러개의 Condition 사용, ”OR” 및 ”AND”

• Condition 아래의 블록에서는 AND, 블럭 내에서 배열로 지정되면 OR

• 이 경우, 「2013/7/16 일 12:00 부터 15:00사이에 소스 IP192.168.176.0/24 또는 192.168.143.0/24 네트워크에서의 엑세스 요청」을의미한다

"Condition" : {"DateGreaterThan" : {

"aws:CurrentTime" : "2013-07-16T12:00:00Z"},"DateLessThan": {

"aws:CurrentTime" : "2013-07-16T15:00:00Z"},"IpAddress" : {

"aws:SourceIp" : ["192.168.176.0/24","192.168.143.0/24"]}

} OR

AND

AND

Page 24: 20150109 - AWS BlackBelt - IAM (Korean)

AWS 서비스 Action Resource tag

IAM ○ ○

Amazon CloudFront ○

Amazon CloudWatch ○

AWS Data Pipeline ○

Amazon EC2 ○ ○ ○

Amazon ElastiCache ○

Amazon Elastic MapReduce ○

Amazon Elastic Transcoder ○ ○

Amazon RDS ○ ○ ○

Amazon Route 53 ○ ○

Amazon S3 / Glacier ○ ○

Amazon Redshift ○ ○

AWS OpsWorks ○ ○

AWS Storage Gateway ○ ○

Amazon SimpleDB ○ ○

Amazon SES ○

Amazon DynamoDB ○ ○

AWS 서비스 Action Resource tag

Amazon SNS ○ ○

Amazon SQS ○ ○

Amazon VPC ○ ○ ○

Amazon Direct Connect ○

Auto Scaling ○

AWS CloudFormation ○ ○

AWS Elastic Beanstalk ○ ○

AWS CloudHSM

Elastic Load Balancing ○ ○

Amazon WorkSpaces

AWS Import/Export ○

Amazon Kinesis ○ ○

Amazon AppStream ○

Amazon CloudSearch ○ ○

Amazon SWF ○ ○ ○

Amazon CloudTrail ○ ○

IAM을 지원하는 AWS 서비스

http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SpecificProducts.html 2014/6 기준

Page 25: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 생성기 (Policy generator)

• IAM 관리 콘솔 또는 아래의 링크를 통해 사용 가능– http://awspolicygen.s3.amazonaws.com/policygen.html

JSON 문법 검사 도구를 사용하면 편리합니다.예)http://pro.jsonlint.com/https://github.com/zaach/jsonlint

Page 26: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 샘플 (1)

{"Version":"2012-10-17", "Statement": [{

"Action": [ "ec2:CreateSnapshot", "ec2:DeleteSnapshot", "ec2:DescribeSnapshotAttribute","ec2:DescribeSnapshots" ],

"Effect": "Allow", "Resource": "*"} ]

}

EBS백업만 가능Version은 별도로 부여하지않으면, 2012-10-17이

자동으로 추가 됨

Page 27: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 샘플 (2)

{"Statement": [

{"Action": ["ec2:PurchaseReservedInstancesOffering"

],"Effect": "Deny","Resource": [

"*"]

}]

}

RI 구매 제한

Page 28: 20150109 - AWS BlackBelt - IAM (Korean)

{"Version":"2012-10-17", "Statement": [{"Sid": "AllowGroupToSeeBucketListInTheConsole","Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],"Effect": "Allow","Resource": ["arn:aws:s3:::*"] },

{"Sid": "AllowRootAndHomeListingOfCompanyBucket","Action": ["s3:ListBucket"],"Effect": "Allow","Resource": ["arn:aws:s3:::my-company"],"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}} },

{ "Sid": "AllowListingOfUserFolder","Action": ["s3:ListBucket"],"Effect": "Allow","Resource": ["arn:aws:s3:::my-company"],"Condition":{"StringLike":{"s3:prefix":["home/Bob/*"]}} },

{ "Sid": "AllowAllS3ActionsInUserFolder", "Action":["s3:*"], "Effect":"Allow","Resource": ["arn:aws:s3:::my-company/home/Bob/*"] }

]}

IAM정책 샘플 (3)

“my-company” 버켓내의 ”home/Bob”을 포함하는하위key 만 사용 가능

Statement 에서 여러정책을 사용하는 경우Sid 를 다른 사용자와겹치지 않도록 설정

Page 29: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 샘플 (4)

{"Version":"2012-10-17", "Statement": [{"Sid": “StrictBucketLocation","Action": ["s3:CreateBucket"],"Condition": {"StringEquals": {

"s3:LocationConstraint": "ap-northeast-1"}

},"Resource": ["*"],"Effect": "Allow"

},{"Sid": "AllowListBucket","Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],"Effect": "Allow","Resource": ["arn:aws:s3:::*"]

}]}

지정된 region 이외의리전에서 버켓 생성 불가능

Page 30: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 샘플 (5)

{"Version": "2012-10-17","Statement": [{

"Action": ["ec2:StartInstances“,"ec2:StopInstances"],"Resource": [

"arn:aws:ec2:*:*:instance/*"],"Effect": "Allow","Condition":{"StringEquals":{"ec2:ResourceTag/project":"myapp"

}}]}

지정된 태그가 붙어 있는 (키:project, 값:myapp)인스턴스만 시작 /중지 가능

Page 31: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 샘플 (6)

{ "Version":"2012-10-17", "Statement":[{

"Effect":"Allow","Action": "rds:CreateDBInstance","Resource":"arn:aws:rds:us-east-1:1234567890:db:test*","Condition":{"streq":{"rds:DatabaseEngine":"mysql"}},"Condition":{"streq":{"rds:DatabaseClass": "db.t1.micro"}}

}]}

Mysql 과 t1.micro, “test” 로 시작하는 RDS 만 생성 가능

Page 32: 20150109 - AWS BlackBelt - IAM (Korean)

Support 및 결재 정보 관련 접근 제어

• AWS 지원 및 비용 청구 화면에도 IAM 을 통한 권한 할당이 가능

• 지원의 경우 ”support” Action 을 허용– 사용권한을 배제하는 경우 Deny 를 사용

• 비용 청구 화면은 다음과 같이 설정– 루트 계정으로 로그인, 보안 질문을 설정

– 비용 관련 화면에 대한 접근을 활성화

– IAM 사용자에게 ”aws-portal” 에 대한 접근 권한을 부여

https://aws.amazon.com/jp/premiumsupport/iam/http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/ControllingAccessWebsite.html

{“Statement”: [{“Action”: [ “support:*” ],“Effect”: “Allow”,“Resource”: “*”

}]}

{"Statement":[{"Effect":"Allow","Action":

[ "aws-portal:ViewBilling","aws-portal:ViewUsage"]

"Resource":"*"}]

}

Page 33: 20150109 - AWS BlackBelt - IAM (Korean)

사용자 Statement사용자 Statement

엑세스 가/부 결정 로직

• 엑세스 제어 조건은 여러개를 설정 가능– 사용자 그룹별로 다수의 상반되는 조건을 설정하는 것도 가능

• 기본적으로 모든 접근은 거부 ( 기본 Deny)– 접근 권한에 “Allow”가 있는 경우에만 허용

– 그러나 다수의 조건중 하나에라도 “Deny”가 있는 경우 접근 거부 (명시적 Deny)

– 기본 Deny < Allow < 명시적 Deny

그룹 Statement

Allow

해당 없음(기본 Deny)

결과 :Allow

Allow

결과:Deny

그룹 Statement

Deny

Page 34: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 정책 시뮬레이터

• IAM 웹 콘솔에서, IAM 사용자 Permission tab 또는 다음의링크에서 사용 가능https://policysim.aws.amazon.com/home/index.jsp?

• 프로덕션 서비스에 적용하기 전에 정책을 테스트 가능– 권한 문제의 해결

– Condition 조건을 적용한 테스트

– 정책 변수를 적용한 테스트

Page 35: 20150109 - AWS BlackBelt - IAM (Korean)

사용자 기반과 리소스 기반

• 정책은 사용자, 그룹, 그리고 AWS 리소스에도 적용이 가능

• S3 버킷, SQS 큐 등에 대한 정책의 적용이 가능– 「특정 IP 주소에서만 버켓에 엑세스」설정이 가능

사용자 기반 리소스 기반

Page 36: 20150109 - AWS BlackBelt - IAM (Korean)

리소스 기반 정책에 의한 Account 간의 접근

• AWS 의 계정을 넘어선 권한 설정– S3,SQS,SNS 등의 서비스에서 이용 가능

{"Statement" : {

"Effect":"Allow","Principal" : {

“AWS”:“arn:aws:iam::Account B 넘버:root"},"Action":"s3:*","Resource":"arn:aws:s3:::mybucket/*"

}}

1.Account A 버켓에 다음과 같은 정책을 지정

2.Account B 에 mybucket 에 대한 접근 권한을 부여

Principal 에 접근을원하는 사용자에대한 조건을 설정

Page 37: 20150109 - AWS BlackBelt - IAM (Korean)

정책의 최대 길이

• IAM 사용자– 부여한 모든 정책의 길이 합계가 2,048 자 이하

• IAM 그룹– 부여한 모든 정책의 길이 합계가 5,120 자 이하

• IAM Role – 부여한 모든 정책의 길이 합계가 10,240 자 이하

http://docs.aws.amazon.com/IAM/latest/UserGuide/LimitationsOnEntities.html

Page 38: 20150109 - AWS BlackBelt - IAM (Korean)

Agenda

• IAM overview

• IAM policy

• IAM role

• AWS Security Token Service

• 정리

Page 39: 20150109 - AWS BlackBelt - IAM (Korean)

IAM role?

• AWS 서비스 및 어플리케이션등의 엔티티에 AWS 에 대한 권한을부여하기 위한 도구– 예를 들어 특정 EC2 인스턴스 내에서 동작중인 어플리케이션에 특정 S3 버켓에 대한 접근

권한을 부여 할 수 있다

• IAM 사용자 및 그룹이 반드시 필요하지 않음

• 설정 항목은, role 이름 또는 IAM 정책– 최대 10,240 문자열 길이의 정책 설정이 가능

• EC2외에도 Beanstalk, Data Pipeline 등에서도 이용

Page 40: 20150109 - AWS BlackBelt - IAM (Korean)

사용 사례 : IAM Role for EC2 instances

프로그램

EC2 인스턴스에 지정된 역할을 부여하는 기능 EC2 인스턴스를 시작할 때 role 을 지정하면 인증 정보가 meta data 로 설정된다

인증 정보는 STS(Security Token Service) 에서 생성

• 각 인스턴스마다 다른 키

• 키의 유효 기간이 되면 새로운 키로 rotate

어플리케이션에서 인증정보를 획득하고 AWS 서비스에 접근• 인스턴스 내에서 meta data 접근

• Access key id, Secret Key id, 세션 token 을 획득

• 3가지의 인증 정보를 사용하여 API 호출

IAM Rolemeta-data

Page 41: 20150109 - AWS BlackBelt - IAM (Korean)

meta data 에서 인증정보 취득

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2_Admin

{"Code" : "Success","LastUpdated" : "2014-06-08T01:51:52Z","Type" : "AWS-HMAC","AccessKeyId" : "ASIAJY2YJ5S2ZYK25BLQ","SecretAccessKey" : "Kp1NblZ7mov/4ln7GLu8dqvN5GztXXXXXXXXXXXXXX","Token" : "AQoDYXdzELP//////////wEa0ANmvPx2CpTfOWjuPSMQ+/XXXXXXXXXXXXXXXX","Expiration" : "2014-06-08T08:17:52Z"

}

Role

STS 세션 토큰인증 유효 기간

IAM Role 을 설정한 EC2 인스턴스 내에서 검색

Page 42: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 사용자 서비스와 비교

프로그램

IAM Rolemeta-data

프로그램

meta-data

IAM role 을 사용하게 되면 인스턴스와 key 관리를 분리하여 프로그램에key 정보를 노출하지 않으므로 더 높은 보안성을 제공할 수 있다

IAM 사용자 서비스 IAM role 사용시

인증 정보 포함

Page 43: 20150109 - AWS BlackBelt - IAM (Korean)

AWSCredentials credentials = new BasicAWSCredentials(“엑세스 키 ID”,”시크릿 키ID”);

AmazonEC2 ec2 = new AmazonEC2Client(credentials);”ec2.describeInstances();

• AWS SDK 를 사용하는 경우, 인증정보 취득 및 만료 전 자동적으로적용

AWS CLI 는 IAM Role에 대응

• http://aws.amazon.com/jp/cli/

AmazonEC2 ec2 = new AmazonEC2Client();”ec2.describeInstances();

IAM Role 적용시

IAM Role 적용 인스턴스에서인증 정보의 설정이 필요

Page 44: 20150109 - AWS BlackBelt - IAM (Korean)

사용 사례 : IAM role 을 사용하여 다른 account 리소스접근• 계정 사용자에게 다른 계정의 IAM 권한을 연결 하는 기능

• 예를 들어, 개발 전용의 계정을 사용하여 프로덕션에서 사용하는 S3 버켓을 업로드

http://docs.aws.amazon.com/IAM/latest/UserGuide/cross-acct-access.html

개발 계정을 위한 role

프로덕션 계정개발 계정

AssumeRole

인증 정보

개발자 계정 전용의인증 정보를 통해 버켓 접근

Page 45: 20150109 - AWS BlackBelt - IAM (Korean)

IAM Team AccountAcct ID: 111122223333

s3-role

{ "Statement": [{

"Effect": "Allow","Action": “s3:*","Resource": "*"

}]

}

My AWS AccountAcct ID: 123456789012

Jeff 엑세스키 인증

S3-role 을 통해 임시 접근key를 획득

할당 받은 임시 key 를 통해S3 에 접근

{ "Statement": [{"Effect": "Allow","Action": “sts:AssumeRole","Resource": "arn:aws:iam::111122223333:role/s3-role"

}]

}

{ "Statement": [{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:root"},"Action":"sts:AssumeRole"

}]

}

IAM role 을 사용하여 다른 account 에 접근 하는 동작

S3-role 에 접근하는 다른 계정의 account id 를 설정계정 B의 s3-role 접근을 허용하는 정책을 Jeff 에 할당

Jeff (IAM User)

s3-role 에 부여되는 정책

STS

Page 46: 20150109 - AWS BlackBelt - IAM (Korean)

Assumed-Role Session – Code Samplepublic static Credentials getAssumeRoleSession(String AccessKey, String SecretKey )

{

Credentials sessionCredentials;

AmazonSecurityTokenServiceClient client = new AmazonSecurityTokenServiceClient(

Accesskey, GetSecretkey,

new AmazonSecurityTokenServiceConfig());

// Store the attributes and request a new AssumeRole session (temporary security credentials)

AssumeRoleRequest request = new AssumeRoleRequest

{

DurationSeconds = 3600,

RoleArn = "arn:aws:iam::111122223333:role/s3-role",

RoleSessionName = "S3BucketBrowser"

};

AssumeRoleResponse startSessionResponse = client.AssumeRole(request);

if (startSessionResponse != null) // Check for valid security credentials or null

{

AssumeRoleResult startSessionResult = startSessionResponse.AssumeRoleResult;

sessionCredentials = startSessionResult.Credentials;

return sessionCredentials;

}

else

{

throw new Exception("S3 Browser :: Error in retrieving temporary security creds, received NULL");

}

}

Page 47: 20150109 - AWS BlackBelt - IAM (Korean)

서로 다른 Account 접근의 제어를 위한 MFA 설정

• AWS 계정간의 접근을 위해 MFA 설정을 추가 하는 기능

• AWS 의 관리 콘솔에서 role 을 생성시 require MFA 의 체크 박스를 사용 하는 것으로설정 가능

• MFA 인증 된 사용자만 인정 정보를 받을 수 있음– AssumeRole

– GetSessionToken{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"AWS": "Parent-Account-ID"},"Action": "sts:AssumeRole","Condition": {"Null": {"aws:MultiFactorAuthAge": false}}

}]

}

http://docs.aws.amazon.com/IAM/latest/UserGuide/MFAProtectedAPI.html

Page 48: 20150109 - AWS BlackBelt - IAM (Korean)

Agenda

• IAM overview

• IAM policy

• IAM role

• AWS Security Token Service

• 정리

Page 49: 20150109 - AWS BlackBelt - IAM (Korean)

AWS Security Token Service(STS)

• 일시적으로 사용할 token 을 발급해 주는 서비스

• 동적으로 IAM 정책이 적용된 사용자를 생성– STS는 사용자 수의 제한이 없음

• IAM Role for EC2 서비스가 STS를 이용– Assume Role

Page 50: 20150109 - AWS BlackBelt - IAM (Korean)

Temporary Security Credentials

• AWS에 대한 임시 인증 정보를 생성하는 방법– 만료 시간이 정해진 인증 정보 (인증 token)

• 사용자에게 다음 3가지의 key 를 발급 엑세스 키 ID(ASIAJTNDEWXXXXXXX)

비밀 엑세스 키 (HQUdrMFbMpOHJ3d+Y49SOXXXXXXX)

세션 토큰(AQoDYXdzEHQakAOAEHxwpf/ozF73gmp9vZDWDPkgFnzwSG/3ztBw9Z4IUslNNn503+3SeN0nwI3wcdLR8y8Ulv9cnksMrBGjRVrJl2xg+/CRnI9nJ1tteHp6yso3sP0BVvnxLpNwyIUpHrcTHt+8v2P6Y9/VX2zl8Hc/cy6La0r1/GuiHb9NEwqt6VIgjPWCZzHXzX8XsUObKhMnAUkY2IdTMrNKXcqVk8VbC6BNTqWsMIIfQPz9fDjKK1ifAFmHVSWvUxio94n+ebXXpy1NuHnt5JEGV34VPLMsrpZ86b+eulKNE1suoQ8TM5E1O66rYwizkq6w+cJovUnMxg6ESASBvolsrEioLiP+SE7cX1i8gRrSG9/KT59GYTlhTzStjjFroCAqZu4KYplGUMCDl1g0twrdXeymsu3GG70Qwu0wSi3WjkW8VPiajahJXCEgp6gIgXElwkrBO01H5Y9NNDEyQaq8ocOGBPVRu+DS9LMs9SHASXimnnVeIN+1FVkXXXXXXXXXXXXXXXXXXXXXXXX)

Page 51: 20150109 - AWS BlackBelt - IAM (Korean)

인증 정보를 획득하는 방법

• Self-sessions (GetSessionToken)

• Federated sessions (GetFederationToken)

• Assumed-role sessions • AssumeRole• AssumeRoleWithWebIdentity• AssumeRoleWithSAML

Session

Access Key Id

Secret Access Key

Expiration

Session Token

Temporary Security

Credentials

Page 52: 20150109 - AWS BlackBelt - IAM (Korean)

인증 정보 취득을 위한 API

STS에서 사용할 수 있는 API Action

概要

GetSessionToken IAM 사용자의 임시 접근 권한을 취득하기 위한 API

GetFederationToken 인증을 받은 Federated 사용자의 temporary security credentials을 얻기 위한 API

AssumeRole 기존 IAM 사용자의 인증 정보를 사용하여 IAM Role 의temporary security credentials을 획득하기 위한 API

AssumeRoleWithWebIdentity Amazon, Facebook, Google 의 인증정보를 사용하여temporary security credentials 을 획득하기 위한 API

AssumeRoleWithSAML idP 인증 및 SAML을 AWS 와 연동하여 temporary security credentials 를 획득하기 위한 API

http://docs.aws.amazon.com/STS/latest/UsingSTS/Welcome.html

Page 53: 20150109 - AWS BlackBelt - IAM (Korean)

인증 정보의 유효기간

• 토큰의 유형에 따라 유효 기간은 다양 [Min/Max/Default]• Self (Account) [15 min / 60 min / 60 min]• Self (IAM User) [15 min / 36 hrs / 12 hrs]• Federated [15 min / 36 hrs / 12 hrs]• Assumed-role [15 min / 60 min / 60 min]

• 이미 발행된 티켓은 연장 또는 단축 불가

• 즉시 권한 제어가 필요한 경우 티켓 발행에 사용한 IAM 사용자 및 IAM role 의 권한을 변경

Session

Access Key Id

Secret Access Key

Expiration

Session Token

Page 54: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 사용자AWS Account’sAccess Key ID

Temporary Security

Credentials

호텔에 비유 한다면

Page 55: 20150109 - AWS BlackBelt - IAM (Korean)

AWS 계정

IAM사용자

Temporary Security

Credentials

IAM의 권한 계층

Permissions Example

모든 조작이 가능 Action: *Effect: AllowResource: *(implicit)

사용자 또는 그룹에 권한을할당

Action: [‘s3:*’, ‘sts:Get*’]Effect: AllowResource: *

Token 생성시에 결정 Action: [ ‘s3:Get*’ ]Effect: AllowResource: ‘arn:aws:s3:::mybucket/*’

Page 56: 20150109 - AWS BlackBelt - IAM (Korean)

Identity Federation(ID연계)

• 기업・조직의 인증 기능과 AWS 인증을 연동

• 예를 들어, LDAP 으로 인증된 사용자에게 S3 권한을할당

• 인증된 사용자에 대해 Temporary Security Credentials을 발행

Page 57: 20150109 - AWS BlackBelt - IAM (Korean)

대표적인 사용 사례

• 임시 권한 양도– 일시적으로 S3 에 업로드 할 수 있는 응용 프로그램

– 일시적으로 EC2 인스턴스를 시작할 수 있는 구성

• 조직 사용자별 접근 제어– 사용자별로 사용 가능한 S3 버켓 생성

• 모든 사용자별 IAM 사용자를 만들 필요 없음

– 조직 그룹과 연동하여 접근 제어

• 모바일 응용 프로그램– 서비스에 로그인한 모바일 앱 사용자별로 임시 인증 정보 생성

– 모바일 앱에서 S3에 직접 업로드

– 유효 기간

– 수천, 수만의 사용자 워크로드를 처리 가능

Page 58: 20150109 - AWS BlackBelt - IAM (Korean)

사용 사례 : API Federation 을 통한 S3 접근(Sample - http://aws.amazon.com/code/1288653099190193)

• Identity provider– Windows Active Directory

– AD 그룹 구성원에 권한 부여

• AWS API (S3*)에 대한 접근 권한을 부여

• GetFederationToken API 사용

Page 59: 20150109 - AWS BlackBelt - IAM (Korean)

5

• Access Key• Secret Key• Session Token

Get Federation TokenResponse

AWS API Federation

Customer (Identity Provider) AWS Cloud (Relying Party)

AWS Resources

User Application

Active Directory

Federation Proxy

4Get FederationToken Request

3

2

S3 Bucket with Objects

Amazon DynamoD

B

Amazon EC2

인증 정보요청

1

인증 정보수신

6

APP

Federation Proxy

• GetFederationTokenRequest()에서는Proxy 에서 IAM 사용자 인증 정보를 사용

• 해당 IAM 사용자의 권한은 Federation 사용자의 권한을 커버 해야 함

• Proxy는 할당된 자격 증명을 안전하게보호할 필요가 있음

AWS API호출

7

http://aws.typepad.com/aws_japan/2011/08/aws-identity-and-access-management-now-with-identity-federation.html

Page 60: 20150109 - AWS BlackBelt - IAM (Korean)

사용 사례 : Console Federation(Sample - http://aws.amazon.com/code/4001165270590826)

• Identity provider– Windows Active Directory

– AD 그룹 구성원에 따라 권한을 부여

– AD 그룹에 따라 IAM role 선택

• AWS 관리 콘솔에 SSO

• AssumeRole API 사용

Page 61: 20150109 - AWS BlackBelt - IAM (Korean)

Console Federation

Customer (IdP) AWS Cloud (Relying Party)

AWS Management

Console

Browser interface

Corporate directory

Federation proxy

1 URL에 접근

3

2

콘솔 redirection

10

로그인 URL 생성9

4 List RolesRequest

8Assume Role Response

Temp Credentials• Access Key• Secret Key• Session Token

7 AssumeRole Request

role 선택Combo box

생성

6

Federation proxy

• AssumeRoleRequest()의 호출을 위해Proxy 에서 IAM 사용자의 인증 정보를요청

• IAM 사용자의 권한은 ListRoles 의assume role 수행이 필요

• Proxy는 인증정보를 안전하게 보관할필요가 있음

5List RolesResponse

Page 62: 20150109 - AWS BlackBelt - IAM (Korean)

SAML 2.0 을 사용한 SSO Federation

• Security Token Service (STS)가 Security Assertion Markup Language(SAML)지원을 시작

• AWS 리소스 접근에 기존의 ID 관리 소프트웨어의 사용이 가능

• AWS 관리 콘솔의 SSO 에도 사용 가능

• 새로운 assumeRoleWithSAML API에 의해 federation 이 가능

New 2013/11/11

Page 63: 20150109 - AWS BlackBelt - IAM (Korean)

SAML을 사용한 Console Federation

Enterprise (Identity Provider) AWS (Service Provider)

AWS Sign-in

Browser interface

Corporate identity

store

Identityprovider

1내부용 포털 접근포털은 IdP 역할

2 인증 요청 응답

5AWS 관리 콘솔

redirection

3

새로운 AWS login 엔드포인트에 SAML 정보를

통해 인증

4

http://aws.typepad.com/aws_japan/2013/11/aws-identity-and-access-management-using-saml.html

Page 64: 20150109 - AWS BlackBelt - IAM (Korean)

사용 사례 : Web Identity Federation

• AssumeRoleWithWebIdentity 의 이용– 소셜 서비스 인증을 이용하여 AWS 접근을 제어하는 서비스

• 소셜 서비스 인증을 확인하는 서버가 필요 없음– 예를 들어, 스마트폰 앱에서 S3에 파일을 로그인 하는 서비스를 만들 수 있음

• 현재 Google,Facebook,Amazon(Login with Amazon)을 지원

• IAM Role 을 사용

Page 65: 20150109 - AWS BlackBelt - IAM (Korean)

Web Identity Federation

AWS Cloud

US-E

AST-1

EU

-WEST-1

AP-S

OU

TH

EAST-1AWS Services

Amazon DynamoDB

S3

사용자 인증1

6

7

IAM

EC2 Instances

Token 검증4

Web identityProvider

3

5정책확인

Id Token획득

2

Mobile App

http://aws.typepad.com/aws_japan/2013/05/aws-iam-now-supports-amazon-facebook-and-google-identity-federation.html

Page 66: 20150109 - AWS BlackBelt - IAM (Korean)

STS 지원 서비스

2014/06 기준

AWS Products

AWS Billing and Cost Management Yes

Amazon AppStream Yes

Auto Scaling Yes

AWS CloudFormation Yes

Amazon CloudFront Yes

AWS CloudHSM No

Amazon CloudSearch Yes

AWS CloudTrail Yes

Amazon CloudWatch Yes

AWS Data Pipeline Yes

AWS Direct Connect Yes

Amazon DynamoDB Yes

AWS Elastic Beanstalk No

Amazon Elastic Compute Cloud Yes

AWS Products

Elastic Load Balancing Yes

Amazon Elastic MapReduce No

Amazon Elastic Transcoder Yes

Amazon ElastiCache Yes

Amazon Flexible Payments Service No

Amazon Fulfillment Web Service No

Amazon Glacier Yes

AWS Identity and Access Management Yes

AWS Import/Export Yes

Amazon Kinesis Yes

AWS Marketplace Yes

AWS Marketplace Management Portal No

Amazon Mechanical Turk No

AWS OpsWorks Yes

AWS Products

Amazon Redshift Yes

Amazon Relational Database Service Yes

Amazon Route 53 Yes

AWS Security Token Service Yes

Amazon Simple Email Service Yes

Amazon Simple Notification Service Yes

Amazon Simple Queue Service Yes

Amazon Simple Storage Service Yes

Amazon Simple Workflow Service Yes

Amazon SimpleDB Yes

AWS Storage Gateway Yes

AWS Support Yes

Amazon Virtual Private Cloud Yes

Amazon WorkSpaces No

http://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html

Page 67: 20150109 - AWS BlackBelt - IAM (Korean)

Federation/SSO 제공하는 파트너 솔루션

http://www.xceedium.com/xsuite/xsuite-for-amazon-web-services http://www.okta.com/aws/ http://www.symplified.com/solutions/single-sign-on-sso https://www.pingidentity.com/products/pingfederate/http://www.cloudberrylab.com/ad-bridge.aspx

http://aws.amazon.com/jp/iam/partners/

Page 68: 20150109 - AWS BlackBelt - IAM (Korean)

Agenda

• IAM overview

• IAM policy

• IAM role

• AWS Security Token Service

• 정리

Page 69: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 모범 사용 사례 (1)

각 사용자에 대해 별도의 IAM 사용자를 생성

권한 관리는 사용자가 아닌 그룹에 할당

최소 권한 부여의 원칙

높은 복잡도의 암호 정책

권한이 있는 IAM 사용자 계정은 MFA 사용

Page 70: 20150109 - AWS BlackBelt - IAM (Korean)

IAM 모범 사용 사례 (2)

EC2 인스턴스에서는 IAM Role 을 사용

권한의 공유는 IAM Role 을 사용

인증 정보는 정기적으로 업데이트

Condition 을 사용하여 접근 권한에 대한 세부 조건을 지정

AWS root 계정은 최대한 사용을 자제

Page 71: 20150109 - AWS BlackBelt - IAM (Korean)

정리

• IAM 을 사용하여 보다 안전하게 AWS 서비스의 사용– 보안 구성 및 권한 제어를 통해 운영에 대한 실수도 미연에 방지

• STS를 활용하면 AWS 서비스를 모바일에서 백엔드로 사용하는 것도가능– 서버 비용 절감 가능

• IAM 자체에는 별도의 비용이 부과되지 않음

Page 72: 20150109 - AWS BlackBelt - IAM (Korean)

참고 자료

• IAM 제품 소개– http://aws.amazon.com/ko/documentation/iam/

• IAM 베스트 프랙티스– http://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPractices.html

• AWS Security Blog– http://blogs.aws.amazon.com/security/

Page 73: 20150109 - AWS BlackBelt - IAM (Korean)

감사합니다.