잠시 위치추적 앱개발에 집중해버려서 한동안 앱개발에 빠저있었다.. ㅠㅠ 도중에 앱이 터져버려서.. 끝은 아쉬웠지만 꼮 완성시켜서 유용하게 써먹어야겠다!!! 그리고 목표했던 AWS자격증도 3월이 지날땐 꼭 취득해둬야짓!!
1. IAM관련 정책을 테스트 하는 방법
사용자가 필요한 정책을 IAM에 추가하거나 커스텀하기전에 우리는 해당 정책이 미치는 영향을 미리 테스트하는 법을 알아보자!
- 온라인 도구 사용
아래 링크롤 들어가면 aws에서 제공하는 시뮬레이터 URL을 찾을 수 있다.
아래 그림과 같은 시뮬레이터 웹페이지를 들어가보면 왼쪽엔 사용자가 사용할 정책을 설정하는 공간이고 해당 정책들을 설정후 오른쪽에 내가 사용할 서비스를 클릭 후 시뮬레이션을 실행시키면 해당 정책내에서 필요한 서비스를 동작시킬 수 있는지 혹은 필요하지 않은 정책인지 확인 할 수 있다!
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
- CLI를 사용한 방법
우리는 ec2내부에서 CLI를 사용해 새로운 ec2를 생성하는 명령어를 실행해볼 것이다!
아무 권한이 없는 유저로 ec2를 로그인해 아래와 같은 인스턴스 생성 명령어를 실행하면 RunInstances 권한이 없다는 에러메세지를 확인할 수 있다.
해당 문제를 해결하기 위해 IAM 유저에게 RunInstances 권한을 부여해보자!
- 우리가 필요한 권한은 ec2 서비스에서 RunInstances의 권한이 필요해 아래와같이 JOSN으로 표현하거나 Visual editor로 해당 권한을 추가해준다.
- 결과로는 아래와같이 인스턴스를 추가할 수 있다는 문구를 얻을 수 있다. 지금 에러가 발생한 이유는 --dry-run이란 명령어 때문으로 해당 명령어는 실제로 명령어를 실행하는게 아닌 CLI가 가능한지 아닌지를 판단하는 여부만 확인하겠다는 말이다!
tip
만약 CLI 명령어에 에러 문장이 발생시 STS를 명령어를 통해 해결하는 법을 소개해주자!
"An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message: 9sPVKvraPRWJKduST-WyJsU5YVXY-ofbalIll486QLC8SV7ojlTAAHlup1LMRXh0nn330lQ1AM-LCAfJd35gbTgIGdtISR4Edbf3YpGuoibpklOhTvb0nLl1XfFQ8NoFtabREe_3D1eI-zPZf-NIXy8H4PvyC1ESHt6t8vq8tXLNdt-UVfjoS9q3bI4kiXI4u2KjDNP7DW97nlrDtQIpu50LFtVgqaTkKtgLhW0gsvP_Ep788r-RCf5WCvPgOqGaQlTqCLegNRkMD4RqxbBJh6zjokaiq_wwPnDGVibfZ913JdMenewOlUQF6IOxATQ4KIWieySpKKflqXUXeN-7RzBXpHO470UhXHkU_I5C-Z5XfYwbssS7Qq6mElO6ewVjgov7EoKiUuaZHZp62L1oEXI30T9grHHMY86fBA6n2m_s1qNFgXPzKMQ42Zs4WGaWuRjE9VE0IArhNc91kHRr31ylpljOgXntk8xe4ZXZc3KuBdNKHSA9JO3s-63npALSOIeY5lHdQNw7FKEYm8AqRbqVrApwkEav0MPPEXgY75og9ZKdsjvC73fcVmL5m4K11_klWjAnQXiPYLNiAD27V22bV6nC0pRmQbLZzMGcOWRElR9ogz8agJBfB8vQQIiu0dYMGwv02eQj-Ahx7eNwk4rTlO-B1_OH8_HeaA"
만약 이런 에러가 발생한다면 위에 인코딩 되어있는 문장을 디코딩해 문제를 해결하는 법이있다. (시험에도 자주 출제된다네...)
- 'aws sts decode-authorization-message --encoded-message "인코딩된 메세지"' 와같이 해당 명령문을 실행한다....
그러면 끝이냐? 아니지.. ㅎㅎㅎ
아래와 같이 STS를 실행하기위한 권한이 없다는 문장을 볼 수 있다.. 그렇기 떄문에 우린 해당 권한을 설정하고 재실행한다.
(설정방법은 이전 방법과 동일하니 스킵... sts:DecodeAuthorizationMessage요놈만 추가하면 끝난다!)
해당 권한을 추가후 다시 STS명령어를 실행하면 JSON형식처럼 생긴 문자열을 리턴받는다.
해당 문자열을 echo명령어로 재호출하고 JOSN형식에 맞춰 들여쓰기를 이뿌게 설정하면.... (이건 VScode를 쓰면 자동 들여쓰기 기능이 있다.. ) 끝!!
그럼 발생한 원인을 파악하기 좀 더 수월해진다!! 끝!
2. 개발자 팁
2-1. AWS EC2 인스턴스 메타데이터
EC2 인스턴스에서 AWS의 내부 IP인 169.254.169.254를 사용해 우리는 메타데이터와 유저 데이터 정보를 확인할 수 있는 아주 기가막힌 방법을 배워보자!
이번 시간엔 Matadata에 대해 학습해보자
- 먼저 matadata는 오직 인스턴스에서만 실행이된다는점 참고하자! 그리고 메타데이터는 인스턴스에 관한 정보이다.
2-2. AWS 계정의 관리 방법
EC2에서 여력 계정을 관리하는 법
- 먼저 cat config를 통해 현재 aws cmd에 연결된 계정을 확인한다.
- 다음으로 cat credentials를 입력하면 동일하게 연결된 계정정보가 나올것이다.
- 이때 여러계정을 사용하고 싶으면 어떻게 할까?? 정답은 profile을 사용하면 가능하다!
시작 이부분은 좀더 학습 후 해보자! 색션12 - 127 AWS EC2 인스턴스 프로파일관리 강의 참고
3. MFA with CLI
먼저 CLI를 사용하려면 임시 세션이을 생성해야 하고, API를 사용하려면 STS GetSessionToken을 사용해야된다. 이부분은 꼭 기억하자!
그렇다면 임시 세션을 어떻게 생성하는지부터 알아보자
3-1. IAM 유저에게 MFA 설정하기
- 사용중인 IAM유저 정보에서 아래와같은 경로로 들어가 MFA를 Assign MFA device를 클릭해 생성한다.
처음 QR코드가 보일텐데 해당 코드를 Authenticator이란 어플을 설치해 QR코드를 찍으게되면 코드가 나올거다!! 그럼 처음 나온코드를 코드1에 입력하고 시간이 지나면 새로운 코드로 초기화되면 초기화된 코드를 코드2에 입력하면 끝!!(한번더 찾아보도록 ㅠㅠㅠ 나는 이렇게 했다.. ㅎㅎ)
3-2 ec2인스턴스에서 sts명령어로 임시 세션 토큰을 발급받기
ec2로 접속후 " aws sts get-session-token "명령어를 실행한다. 이때 우리는 MFA를 추가해준 유저이므로 " --srial-number [Identifier 명] --token-code [Authenticator에서 생성한 코드]"를 추가한다.
요럿게! " aws sts get-session-token --srial-number [Identifier 명] --token-code [Authenticator에서 생성한 코드] "
아래와같이 임시 세션 토큰을 발급받을 수 있다!
3-3 임시 세션 토큰 등록하기
먼저 mfa라는 계정을 profile에 추가해준다! 추가방법은 "aws configure --profile mfa"로 원하는 access key정보를 입력한다. 다음으로 "vi .aws/credentials"명령어로 vim 에디터로 해당 파일을 열어 mfa 계정에 위에서 발급받은 SessionToken을 복사해준다. 그렇게 되면 발급받은 임시 세션토큰을 사용해 CLI 명령어를 사용할 수 있다!(해당 강의에선 s3 정보를 불러오는 "aws s3 ls --profile mfa"를 사용해본다! 만약 사용중인 s3가 있으면 정보들이 나올것이다! )
4. SDK란?
한번쯤은 개발을 해봤다면 SDK라는 것은 들어봤을테니 시험에서 나올법한 내용만 작성하겠다 ㅎㅎㅎ
AWS SDK에서 알아야될 부분은 리전을 지정하지 않고 기본 리전을 구성하지 않으면 API 호출을 위해서 us-east-1이 기본으로 선택된다는 것!
5. AWS 제한
> AWS에선 API 호출과 서비스를 제한하는, 즉 할당량에 대한 개념이 존재한다.
5-1 AWS API 호출 제한
- 특정 API를 사용하려고 할때 서버에 부하를 막기위해 호출수를 제한하는 방법이다.
그런데 간헐적 오류가 발생하는 경우가 있는데 이는 어떻게 해결할 수 있냐??? 방법은 "지수 백오프 전략"이다. 해당 방법은 아래서 추가 설명 해줄게!
5-2 AWS 서비스 제한
이말은 서비스를 실행 할 수 있는 리소스 수를 할당해준다는 의미이다.
-- "지수 백오프 전략"
사용때 : ThrottingException,즉 조절 오류가 발생할때 사용한다.
조절오류란 API 호출을 많이 했을때 발생하는 오류를 의미한다. 일반적으로 AWS SDK를 사용하면 오류발생 시 API를 재시도하는 매커니즘이 있는데 해당 매커니즘을 사용할떄는 지수 백오프 전략을 사용해야된다.
- 지수 백오프 전략을 사용해야되는 경우(중요)
: 자체 SDK를 실행할 때
: 5xx와 같은 서버 오류와 조절 오류가 발생할 때
- 사용해선 안되는 경우
: 4xx와 같이 클라이언트를 통해 잘못된 접근 또는 데이터로 인한 오류가 발생할 때
-지수 백오프 전략의 원리
ex)
1초동안 첫번째 요청을 시도하고 다음 요청까지 대기시간을 2배 늘린다. 그러면 2초가 되고 또 요청 대기시간을 2배늘린다. 이렇게 다음 ㅇ요청대기시간을 2배씩 늘리는 것이 지수 백오프 전략이다. 이를 사용하면 서버의 부하가 점점 줄어들어 서버에 가능한 많이 응답할 수 있도록 한다는 것이 지수 백오프 전략이다!
6. AWS의 자격 증명 공급자 체인
6-1 AWS CLI 자격 증명 제공자 체인
CLI는 아래 순서대로 자격증명을 우선순위로 확인합니다.
6-2 AWS SDK 기본 자격 증명 제공자 체인
JAVA환경에서 SDK 자격 증명 순서를 알아보자
6-3 AWS 자격증명 시나리오
쭉쭉 읽어보자! 결과적으론 좋지 않는 사용법이므로 위의 내용을 이해하는 정도로 참고하자!
6-4 AWS 자격증명 관련해서 반드시 주의해야될 점
7. SigV4
Signature v4라고 부르며 이는 CLI나 SDK를 요청할떄 관련 자격증명을 서명해주는 AWS 프로토콜이다.
AWS와 통신을하기위해 특정 프로토콜 패킷을 전송할때 해더를 사용하는 경우와 쿼리를 사용하는 경우 2가지가 있다.
만약 해더를 사용하면 해더에는 SigV4에서 올바른 권한인지 확인 할 수 있는 정보가들어있고, 쿼리의 경우엔 쿼리문에 데이터를 통해 전송되면 해당 데이터를 sigV4에서 해당 요청에 자격증명을 확인후 서명해주는 방식이다.
(현재 자격증에서는 주의깊게 알아보진 않지만 공인 개발자라면 필수로 알아야하는 내용이란다..)
'udamy > AWS Devleoper' 카테고리의 다른 글
10-1. 고급 s3 스토리지 클래스 (AWS Certified Developer Associate) (0) | 2023.03.02 |
---|---|
10. 고급 s3 및 Athena (AWS Certified Developer Associate) (0) | 2023.03.02 |
8. AWS S3 (AWS Certified Developer Associate) (0) | 2023.02.20 |
7. AWS VPC (AWS Certified Developer Associate) (0) | 2023.02.19 |
6-1. AWS Route 53 - 라우팅 정책 (AWS Certified Developer Associate) (0) | 2023.02.16 |