📖 학습주제
가장 많이 사용되는 AWS 클라우드에 대해 실습 중심으로 학습 (3)
IAM(Identity and Access Management)
- AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
- 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어
- AWS 계정을 생성할 때는 해당 계정의 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는 단일 로그인 ID로 시작
- 이 자격 증명은 AWS 계정 루트 사용자라고 하며 계정을 생성할 때 사용한 이메일 주소와 암호로 로그인하여 액세스
- 일상적인 작업에 루트 사용자를 사용하지 않을 것을 권장
IAM 특징
- AWS 계정에 대한 공유
- 세분화된 권한
- Amazon EC2에서 실행되는 애플리케이션을 위한 보안 AWS 리소스 액세스
- 멀티 팩터 인증(MFA)
- ID 페더레이션
- 보장을 위한 자격 증명 정보
- PCI DSS 준수
- 많은 AWS 서비스와의 통합
- 최종 일관성
- 무료 사용
정책

S3에 대한 정책 에시

실습
AWS 관리 콘솔에서 IAM을 검색해 대시보드로 들어간다.
사용자의 사용자 추가를 눌러 사용자를 생성한다.

두번째 단계에서, 기존 그룹에 사용자를 추가하거나 , 기존 사용자에서 권한 복사, 기존 정책에 직접 연결할 수 있다.

최종적으로 생성되는 액세스 키 ID, 비밀 액세스 키, 비밀번호를 별도로 저장해야 한다.
왼쪽 탭에서 선택해 새로운 그룹이나 역할을 생성할 수도 있다.
S3
- 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스
- 모든 규모와 업종의 고객은 Amazon S3를 사용하여 데이터 레이크, 웹 사이트, 모바일 애플리케이션, 백업 및 복원, 아카이브, 엔터프라이즈, 애플리케이션, IoT 디바이스, 빅 데이터 분석 등 다양한 사용 사례에서 원하는 양의 데이터를 저장하고 보호할 수 있음
- 특정 비즈니스, 조직 및 규정 준수 요구 사항에 맞게 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공
S3 기능
- 스토리지 클래스
- 스토리지 관리
- 액세스 관리
- 데이터 처리
- 스토리지 로깅 및 모니터링
- 분석 및 인사이트
- 강력한 일관성
Amazon S3를 사용하여 정적 웹 사이트 호스팅
- Amazon S3을 사용하여 정적 웹 사이트를 호스팅할 수 있음
- 정적 웹 사이트에서 개별 웹 페이지는 정적 콘텐츠를 포함
- 클라이언트 측 스크립트를 포함할 수도 있음
- 이와는 대조적으로, 동적 웹 사이트는 PHP, JSP 또는 ASP.NET 등 서버 측 스크립트를 포함한 서버 측 처리에 의존
버킷
- S3에 저장된 객체에 대한 컨테이너
- 모든 객체는 어떤 버킷에 포함됨
객체
- S3에서 사용하는 기본 개체
- 객체 데이터와 메타데이터로 구성
키
- 버킷 내 객체의 고유한 식별자
- 버킷 내 객체들은 정확히 하나의 키를 갖는다.
- 버킷, 키 및 버전 ID의 조합이 각 개체를 고유하게 식별하기 때문에 S3는 '버킷+키+버전'과 객체 자체 사이의 기본 데이터 맵으로 간주 할 수 있음
CI / CD

지속적 통합(Continuous Integration)
- 모든 개발자가 개발한 코드를 공유 리포지토리에 하루에도 여러번 코드를 커밋하고 병합하는 것
지속적 전달(Continuous Delivery)
- 개발팀이 짧은 주기로 소프트웨어를 개발하고 언제든지 운영환경으로 안정적으로 배포하는 것
CodeCommit

- 클라우드에서 자산 (예: 문서, 소스 코드, 바이너리 파일) 을 비공개로 저장하여 관리하는 데 사용할 수 있도록 Amazon Web Services Services에서 호스팅되는 버전 관리 서비스
CodeCommit 특징
- 높은 서비스 가용성과 내구성을 제공해 하드웨어와 소프트웨어 자체적으로 관리하는 부담을 덜어줌
- 코드를 안전하게 저장할 수 있음
- 코드에서 공동으로 작업이 가능
- 버전 관리 프로젝트를 쉽게 확장 가능
- 언제든지 어떤 것이든지 보관할 수 있음
- 다른 AWS 서비스 혹은 그 외의 서비스와 함께 사용 가능
- 타 Git 기반 레포지토리에서 CodeCommit으로 마이그레이션 가능
- 이미 알고 있는 Git 툴을 이용할 수 있음
실습
콘솔에 CodeCommit을 검색해서 리포지토리 생성을 눌러 생성한다.

git clone이나 직접 리포지토리에 직접 파일을 올려서 작업을 할 수 있다.
CodeBuild

- 클라우드상의 완전관리형 빌드 서비스.
- 소스 코드를 컴파일하고 단위 테스트를 실행하며 배포 준비가 완료된 아티팩트를 생성
- 자체 빌드 서버를 프로비저닝, 관리 및 확장할 필요 없음
- 이 서비스는 Apache Maven, Gradle 등과 같은 널리 사용되는 프로그래밍 언어 및 빌드 도구에 맞게 사전 패키지된 빌드 환경을 제공
- CodeBuild에서 빌드 환경을 사용자 지정하여 사용자 고유의 빌드 도구를 사용
- CodeBuild는 최대 빌드 요청 수에 맞게 자동으로 확장
실습
콘솔에 CodeBuild를 검색해 빌드 프로젝트를 생성한다.

깃허브 등과 연동이 가능하다.

이렇게 함으로써 깃허브에 있는 리포지토리를 가져와 이용할 수 있다.
buildspec 파일을 이용하거나 직접 빌드 스크립트를 삽입 할 수 있다.

CodeDeploy
- Amazon EC2 인스턴스, 온프레미스 인스턴스, 서버리스 Lambda 함수 또는 Amazon ECS 서비스로 애플리케이션 배포를 자동화하는 배포 서비스
- 다음을 포함하여 다양한 애플리케이션 콘텐츠를 거의 무제한으로 배포가능.
- 코드
- 서버리스 AWS Lambda 함수
- 웹 및 구성 파일
- Executables
- 패키지
- 스크립트
- 멀티미디어 파일
- 서버에서 실행되고 Amazon S3 버킷, GitHub 리포지토리 또는 Bitbucket 리포지토리에 저장되는 애플리케이션 콘텐츠를 배포가능
- 서버리스 Lambda 함수 배포 가능
- CodeDeploy를 사용하기 위해 기존 코드를 변경할 필요가 없음
실습
콘솔에 CodeDeploy를 검색해 애플리케이션을 생성한다.

CodePipeline

- 빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위해 릴리스 파이프라인을 자동화하는 데
도움이 되는 완전관리형의 지속적 전달 서비스
CodePipeline 특징
- 소프트웨어 릴리스 프로세스를 모델링하고 서버를 설정하거나 프로비저닝할 필요성을 줄일 수 있음
- AWS Management Console 또는 AWS command line interface(CLI)를 사용하여 소프트웨어 릴리스 프로세스 단계를 정의할 수 있음
- 피드백을 반복하고 각 코드 변경을 테스트하여 버그를 포착하는 새로운 기능을 신속하게 릴리스할 수 있음
- 릴리스 프로세스의 모든 단계에서 자체 플러그 또는 사전 구축된 플러그인을 사용하여 필요에 맞추어 조정할 수 있음
실습
콘솔에 CodePipeline을 검색해 파이프라인을 생성한다.

CodeCommit 때와 마찬가지로 소스 스테이지를 추가한다.

이미 만들어 놓은 CodeCommit을 선택하거나 GitHub(버전 2)를 선택해 깃허브에 연결해 가져올 수도 있다


CodeBuild 때와 마찬가지로 빌드 스테이지를 추가한다.

이미 만들어 놓은 CodeBuild를 선택하거나 새로운 프로젝트를 생성해 추가할 수 있다.


CodeDeploy 때와 마찬가지로 배포 스테이지를 추가한다.

이미 만들어 놓은 CodeDeploy을 선택하거너ㅏ Elastic Beanstalk을 이용해 만든 프로젝트로 다이렉트로 배포할 수 있다.

