공부하기싫어
article thumbnail

#AWS Certified Developer Associate

 

 

 

 

122. IAM 역할 및 정책 실습

IAM 정책은 JSON 문서형식을 이용해서 직접 만들 수 있다.

정책 생성

서비스 - s3 , 작업(api) - getobject, 리소스 - thebucketofyeonwoo 버킷의 모든 오브젝트 , 조건 추가 안함

 

검토
완성된 커스텀 정책

https://awspolicygen.s3.amazonaws.com/policygen.html

 

AWS Policy Generator

Click below to edit. To save the policy, copy the text below to a text editor. Changes made below will not be reflected in the policy generator tool.

awspolicygen.s3.amazonaws.com

여기서도 정책을 커스텀하게 만들 수 있음

 

위의 gui 환경에서 정책을 만드는 곳을 visual editor 라고 하는것 같고

policy generator 에서 정책을 만드는 것 보다 visual editor 에서 정책을 만드는것을 권고하는것 같다고 함

 

Role 에 Policy 연결

 

 

(8.29 시작)

 

123. AWS 정책 시뮬레이터

 

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies_testing-policies.html

 

IAM 정책 시뮬레이터로 IAM 정책 테스트 - AWS Identity and Access Management

작업이 암묵적으로 거부됨(즉, 명시적으로 허용되지 않기 때문에 작업이 거부된 경우)인 경우 나열(List) 및 문 표시(Show statement) 옵션은 표시되지 않습니다.

docs.aws.amazon.com

aws IAM 정책 시뮬레이터는 기본적으로 어떤 정책이 있는지 확인하고 이에 대한 시뮬레이션을 해보는 기능이다

 

policy simulator

정책이 거부된 이유에 대해 확인하는데 유용함

 

 

124. AWS CLI 테스트 실행

권한이 있는지만 확인하려면 AWS CLI 명령을 활용하는것이 편리하다

--dry-run : API 호출에 대한 시뮬레이션을 실행해서 권한이 없을때는 예외적으로 거부되었다고 알 수 있을테고 권한이 있을 때는 명령이 실행되지 않는다.

 

cli 명령

aws ec2 run-instances --dry-run --image-id [이미지id] --instance-type [인스턴스타입]

-> UnauthorizedOperation : 권한 없음 에러

-> DryRunOperation : 권한이 있으나 dryrun flag 가 set 되어있어서 실행 불가 에러

 

 

125. AWS CLI STS 디코딩

위의 --dry-run 명령 사용시 나오는 failure message 를 디코딩 하려면 STS 명령줄을 사용한다.

 

https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html

 

decode-authorization-message — AWS CLI 1.25.62 Command Reference

Note: You are viewing the documentation for an older major version of the AWS CLI (version 1). AWS CLI version 2, the latest major version of AWS CLI, is now stable and recommended for general use. To view this page for the AWS CLI version 2, click here. F

docs.aws.amazon.com

STS Decode 설명서

 

STS 명령을 인스턴스에서 실행하려면 STS 서비스의 읽기, 쓰기 권한등을 부여해야한다

aws sts decode-authoriaztion-message --encode-message [value]

를 입력하게되면

정제되지않은 json 형식이 반환되는데

복사 후 echo 해주면 형식이 조금 더 나아지고

이걸 복사해서 vscode 로 가져가 json 형식으로 바꾸고 퀵액션에서 format selection 을 선택하면 들여쓰기된 json 문서를 얻을 수 있다.

 

 

 

126. AWS EC2 인스턴스 메타데이터

URL : http://169.254.169.254/latest/meta-data

컴퓨터에서 실행되는것이 아니라 ec2 인스턴스 내부에서 url 을 통해 접속할 수 있음

IAM Role 을 검색할 수 있으며 정책은 확인할 수 없다 - IAM 정책을 확인하는 유일한 방법은 정책 시뮬레이터나 --dry-run 옵션을 사용하는 것이다.

Metadata - EC2 인스턴스 정보

Userdata - EC2 인스턴스의 스크립트를 실행하는 것

 

EC2 mata-data/

/가 붙은것은 뭔가 더 있다는 것인데 /가 없으면 값이라는 뜻

 

명령중

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ 명령을 입력하게되면

AccessKeyID , SecretAccessKey, Token 을 얻게 되는데 약 한시간 정도의 보안 인증 기간을 가지게 된다.

따라서 ec2 인스턴스가 연결된 iam 역할을 통해 임시 보안 인증을 얻을 수 있다는 것

 

 

127. AWS CLI 프로필

만약 여러개의 aws 계정을 커트롤하고싶다면 aws cli 의 profile 을 이용해 구현할 수 있다.

profile 을 만들면

aws cli 환경에서 명령을 실행할 때 --profile [계정명] 을 입력해서 다른 계정 작업을 할 수 있다.

 

 

128. MFA 가 있는 AWS CLI

MFA(다요소 인증 장치)를 CLI 와 함게 사용하기 위해서는 임시세션이 열려야 하고

그러기 위해서는 STS GetSession Token API 를 호출해야만 한다.

aws cli 환경에서 STS GetSession Token API 를 이용하면

임시 ID, 임시 SecretKey, 세션토큰을 얻을 수 있음

 

 

129.  AWS SDK 개요

Offcial SDK - java, .NET, Node.js, PHP, python, Go, ruby, c++

만약 aws sdk 를 사용할 리전을 설정하지 않는다면 us-east-1 이 기본으로 선택된다

dynamoDB 나 S3 를 애플리케이션에서 연결하려고 할때 사용됨

 

 

130. 지수 백오프 및 서비스 제한 증가

AWS Limits (Quotas)

제한에는 2가지가 있는데

 

API Rate Limits(api 비율 제한)

- aws api 를 연속으로 호출하는 횟수를 말함

- 애플리케이션 사용량이 많아서 계속 제한을 초과하는 경우에는 API 제한 증가를 요청해 계속 사용하도록 해야함

Service Quotas (서비스 할당량)

- 실행할 수 있는 리소수 수를 말함

- 티켓을 오픈해서 서비스 한도 증가를 요청할 수 있다.

- 서비스 할당량 api 를 이용해서 프로그램에서 요청할 수 있다.

 

간헐적 오류 발생시 - 지수 백오프(Exponential Backoff)

- 조절 오류(ThrottlingException)가 발생한 경우 사용 - 조절오류 : api 호출을 많이 했기 때문에 발생

- aws sdk 를 사용한다면 이 재시도 메커니즘은 이미 sdk 동작에 포함되어있다.

- 500번대 HTTP 서버 오류가 발생한다면 재시도 메커니즘을 실행해야 한다.

 

 

 

131. AWS 자격 증명 공급자 및 체인

AWS Credentials Scenario

ec2 인스턴스에서 애플리케이션을 배포하고 IAM 사용자의 환경변수로 Amazon S3 API 를 호출하는 상황

IAM 유저는 S3FullAccess 권한을 가짐

배포된 s3는 하나의 s3버킷을 사용함

 - 배포하는 EC2 인스턴스 프로필에서 생성 및 할당하고있는 IAM 역할 및 EC2 인스턴스 프로필을 정의하고 있음

 - 그리고 이 혁할은 사용하고 있는 애플리케이션에 하나의 S3 버킷에만 액세스하는 최소 권한이 할당되어있음

 

-> 인스턴스 프로필이 EC2 인스턴스에 할당되었다 해도 모든 S3 버킷에 액세스 할 수 있다.

이유 - 이전에 설정한 환경변수에 자격 증명 체인이 여전히 우선순위를 부여하기 때문

- 이것을 없애려면 환경 변수 설정을 해제하고 자격 증명 체인 우선순위를 살펴보면 결국은 EC2 인스턴스 프로필과 프로필에서 나오는 권한을 활용하게 됨

 

자격 증명 모범 사례

- 절대로 자격 증명을 코드에 저장하면 안된다. (정말 나쁜 사례)

- 자격 증명 모범 사례는 이후 Cognito 에서

 

AWS에서 작업을 실행하면, 최대한 많이 IAM 역할을 사용해야 한다는 뜻

- EC2 인스턴스 - EC2 역할

- ECS tasks - ECS 역할

- Lambda 함수 - Lambda 역할

AWS 를 사용하지 않는다면, 환경변수 혹은 명명된 프로필을 사용해야 한다.

 

 

132. AWS 서명 v4 서명

AWS HTTP API를 호출할 때, 해당 요청을 API로 인증해야 한다. - 즉 그 요청에 서명을 해야만 사용자 전용 AWS 자격 증명을 통해 AWS가 사용자를 식별할 수 있는 것

만약 SDK 나 CLI 를 사용한다면 HTTP 요청에 서명하게 됨

만약 SDK나 CLI를 사용하지 않는다면 Signature v4(SigV4)라는 프로토콜을 사용해 직접 서명해야 하는데 extrimley complecated

SigV4 서명 프로토콜은 웹사이트에서 확인할 수 있다

 

SigV4

AWS로의 요청이 사용자 자격 증명을 이용해 서명되었으며 AWS로 인증을 받았다는 의미

- HTTP 헤더를 사용해 요청에 서명하는 경우

- 쿼리 문자열 옵션을 사용하는 경우

 

 

이제 지금까지 배웠던 내용을 짧게 복습을 해보자

내일하자