발전하는 나를 기록하기 위해

⭐️ aws 자격증 준비 [ssa], [developer] #6 본문

개발/Infra

⭐️ aws 자격증 준비 [ssa], [developer] #6

발폼도래 2024. 4. 10. 11:30
728x90
EC2 Instance Metadata(IMDS)
    IAM role 상관없이 스스로 metadata 알 수 있다. -> http://169.254.169.254/latest/meta-data
** AWS Security Token Service (STS)의 GetSessionToken
    AWS 자격 증명을 일시적으로 생성하는 데 사용되는 API. 
    일반적으로 AWS IAM 사용자나 역할이 기본 자격 증명(액세스 키와 시크릿 키)을 사용하여 AWS 서비스에 액세스하지만, GetSessionToken을 사용하면 임시 보안 자격 증명을 얻을 수 있다.

AWS SDK(software development kit)
    CLI없이 application에서 aws바로 수행하기 위해서 제공되는 api
    ** 시험 : 언제 SDK 사용하냐?
    ** 시험 : 자세한 설정과 지역을 명시하지 않으면 us-east-1 기본 설정이 될 수 있다.

    AWS limits (quotas 할당량)
        API rate limits : ec2 instance가 초당 100회 제한을 갖는다, s3 GetObject가 5500회까지 get 요청이 제한된다.
        Service Qoutas : 실행할 수 있는 리소스 수
    Exponential Backoff(지수 백오프)
        쓰로틀링 에러 발생했을 때 사용한다. -> api 요청이 엄청 많았다.
        ** 시험 : 언제 지수백오프를 재시도해야 하냐?
            A : 5xx server error와 쓰로틀링 발생했을 때 (4xx에러는 아님)
        
        원리 : 첫요청 실패시 다음요청까지의 대기시간을 늘리는 전략
            ex) 요청 후 2초 뒤 재요청 / 4초 뒤 재요청 / 8초 뒤 재요청 / ...
        
CLI Credentials Provider Chain(자격 증명 공급자 및 체인)
    CLI 사용하면 자격증명 우선순위
    1. command line option 확인 : --region, --profile
    2. 환경변수 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
    3. CLI credentials file : aws configure
    4. CLI configuration file : aws configure
    5. Container credentials : ECS tasks
    6. Instance profile credentials : EC2 Instance profile


AWS Credentials Chain은 AWS에서 자격 증명을 관리하고 얻는 방식의 계층적인 구조
    - IAM 역할 (IAM Roles): AWS Identity and Access Management (IAM) 역할은 AWS 서비스 및 EC2 인스턴스와 같이 AWS 리소스에 할당되는 역할. 
        이 역할을 가지고 있는 인스턴스나 서비스는 역할에 연결된 정책에 따라 자격 증명을 동적으로 얻을 수 있다. 가장 높은 우선순위.
    - AWS CLI 구성 파일 (AWS CLI Configuration Files): AWS CLI는 사용자의 로컬 환경에 AWS 자격 증명을 저장하는 구성 파일을 지원한다. 
        주로 ~/.aws/credentials 파일에서 프로파일을 사용하여 자격 증명을 설정하며, 이 파일은 프로그래밍적으로 또는 AWS CLI에서 직접 편집할 수 있다.
    - 환경 변수 (Environment Variables): AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY와 같은 환경 변수를 사용하여 직접 자격 증명을 설정. 
        환경 변수에 설정된 자격 증명은 다른 모든 방법보다 높은 우선순위를 갖는다.
    - AWS 자격 증명 공급자 (AWS Credential Providers): AWS SDK 및 언어별 SDK는 다양한 자격 증명 공급자를 제공. 
        예를 들어, AssumeRoleCredentialProvider를 사용하여 자격 증명을 로드하고 역할 전환을 수행.
    
AWS HTTP API 요청 보낼 때는 SIGNv4 필요하다.
    -> SDK나 CLI 사용할 때는 대신 해줌.
    s3에서 사진 url에서 보이는 거는 sign이 쿼리스트링에 들어가있어서 그렇다. (헤더에 담아보내는 방식도 있음.)

S3 고급
    라이프사이클 - 설정 주기로 클래스 변경
    이벤트 알림 - 알림설정 SQS, SNS, 등 받는쪽에서 SendMassage 정책 넣어줘야함
    S3 성능 - 버킷의 접두사당 초당 3500개 put, 5500개 get 가능
        upload
            multi-part upload : 하나의 파일 쪼개서 병렬 업로드, s3가 알아서 파일하나로 합침
            transfer acceleration : edge location(s3까지 private으로 통신) 둬서 public 연결을 최소화
        download
            byte-range fetch : 쪼개서 병렬로 받음, 부분 데이터만 사용(ex. 파일의 헤더)
    
    S3 select
        SQL 식을 사용하여 애플리케이션이 객체에서 일부 데이터만 가져올 수 있도록 하는 서비스
    Glacier select
        표준 SQL 문을 사용하여 Glacier 객체에 대해 직접 필터링을 수행

    S3 metadata & object tags
        **시험 : s3 검색하려면 DynamoDB와 같은 외부 인덱스 구축해야 할 수 있다. 
            모든 metadata와 tag 인덱스에 넣은다음 DynamoDB에서 검색 수행하면 S3의 객체로 추출됨.

S3 Encryption
    SSE(Server-side Encryption) 
        SSE-S3
            aws에서 key관리 한다.
            AES-256 사용
            default 암호화
        SSE-KMS
            KMS 서비스 사용해서 키 직접관리
        SSE-C (Customer-Provided Keys)
    CSE(Client-side Encryption)
        클라이언트에서 암호화해서 업로드
    default encryption 은 s3로 켜져 있지만 변경할 수 있고, 
    버킷 policy에서 https가 아닐 경우, 헤더에 kms나 사용자알고리즘 사용했는지 여부에 따라 deny 설정 할 수 있다.
    서버 암호화 이전에 정책을 먼저 확인한다.
    
    CORS
        서버쪽에서 설정해줘야함 허락하는 origin 주소
    MFA delete : 영구삭제 할 때 인증해야 됨.
    Pre-Signed URL : 일시적인 접근허용 URL (s3 저장된 private Object)
    Access Point
        접두사를 지정해서 Read/Write grant 설정
        접근포인트로 DNS name을 가진다.
            - Internet Origin
            - VPC Origin
        버킷 정책(bucket policy)와 유사한 액세스 포인트 정책(access point policy) 연결할 수 있음.
        
        S3 Object Lambda
            S3 객체 Lambda를 통해 자체 코드를 S3 GET, HEAD, LIST 요청에 추가하여 애플리케이션으로 데이터가 반환될 때 데이터를 수정 및 처리할 수 있습니다. 
            사용자 지정 코드를 사용하여 행을 필터링하고 동적으로 이미지 크기를 조정하며 기밀 데이터를 교정하는 등 S3 GET 요청에서 반환한 데이터를 수정할 수 있습니다. 
            또한 S3 객체 Lambda를 사용해 S3 LIST 요청 출력을 수정하여 버킷에 저장된 객체를 볼 수 있는 사용자 지정 보기를 생성하거나, 
            S3 HEAD 요청 출력을 수정하여 객체 이름이나 크기 같은 객체 메타데이터를 변경할 수 있습니다. 
            AWS Lambda 함수에서 지원하는 이 기능을 사용하면 코드는 AWS의 완전관리형 인프라에서 실행되므로 
            데이터의 파생 사본을 생성 및 저장하거나 고가의 프록시를 실행하지 않아도 되며, 애플리케이션에 추가 요금이 발생하지 않습니다.

CloudFront(CDN Content Delivery Network)
    cache, edge location
    "Ingress"는 컴퓨터 네트워크 및 클라우드 컴퓨팅 용어로, 주로 네트워크 트래픽을 컨트롤하는 라우팅 및 진입 지점을 가리킵니다
    OAC (Origin Access Control) 보안처리
    origin(원본서버) : S3, http 서버가 될 수 있다.
    
    vs S3 cross region replication
        동적컨텐츠를 낮은 지연으로 적은 리전에 제공할 때 좋다.

    서명된 URL -> 뭔소린지 잘 모르겠음.
        CloudFront 서명된 URL은 일반적으로 동적으로 생성된 서명된 URL을 통해 유료 콘텐츠를 배포하는 데 사용됩니다.
        S3 pre-signed 비교
        키그룹생성(RSA 2048 bit)
        
    고급개념
        - pricing
        - multi Origin(Origin gruop 으로 path마다 다른 origin으로 보내거나 빠르게 DR 할 수 있다.)
        - field 레벨의 암호화 : public key로 암호화하고 전송하면 web server에서만 개인키로 해독할 수 있고 전달해주는 cloudfront나 alb 같은애들은 암호화된 값밖에 모름.
        - real time log : kinesis를 활용해서 실시간 로그 수집할 수 있다.
            수집한 로그를 lambda 이용해서 바로 처리하는 방법, 
            kinesis firehose 사용해서 s3나 다른곳으로 보낼 수 있다.

    Cache key
        캐시 객체 고유 식별자 (기본값 : hostname + resource URL)
    Cache Policy (Cache Key 생성할 방법 구성)
        쿼리스트링, 쿠키, 헤더 옵션가지고 cache key에 적용할지 말지 정할 수 있음.
        cache policy에 따라 적용된 옵션들은 모두 origin 요청에 들어간다.
        Origin Policy : origin 요청에 들어갈 때 적용할 정책도 따로 설정할 수 있다.

    **시험 cache policy vs origin policy 구분해서 알아둘 것.

    Cache Invalidation(캐시 무효화)
        
ECS, ECR, Fargate
    ECS lunch type
        - EC2일 때, EC2가 클러스터의 요소가 된다.
            EC2 인스턴스는 반드시 ECS Agent를 실행해야 된다.
            ECS Agent는 ECS Cluster에 인스턴스들 등록 시킨다. 
        - fargate (no instance)일 때, 서버리스로 동작한다.
            EC2 인스턴스 관리할 필요가 없다.
            ECS Task만 정의하면 된다.

        ECS는 클러스터 안에서 작동한다.
    ECS cluster 와 ECS Task 구별해볼껏
    AWS에서 docker 컨테이너 실행하는 것 == ECS cluster에서 ECS task 실행하는 것
    
    IAM role for ECS
        EC2 Instance profile (EC2 only)
            - ECS agent 사용한다.
            - API call 사용한다.
            - cloudWatch logs 보냄
            - ECR에서 pull 받음
            - Secret manager, SSM 사용
        EC2 Task role (EC2 + Fargate 둘다)
            - 각각 상세한 역할(role)을 가진다. (ex. EC2 task 하나는 S3에 연결, 다른 task는 DB 연결)
            - task definition 에서 정의한다.
        **시험 EC2 profile vs Task role 구분하기

    EFS (File System)
        EC2와 Fargate 모두 호환됨.
        
    **시험 Task definition 당 IAM role 하나씩 정의, service에서 정의하는 게 아니다!
        
    ECS Task 배치전략
        - binback : EC2 instance에 더이상 배치할 수 없을 때 까지 진행
        - Random : 무작위
        - spread : 기준값가지고 분산배치

    배치 제약
        - distinctInstance : 같은 task는 같은 instance에 있을 수 없다.
        - memberOf : 표현식을 만족해야된다. (ex. 인스턴스 유형이 t2 인 곳에만 배치가능)

    패더레이션(federation) : AWS에서 "페더레이션(Federation)"은 여러 다른 신원(Identity) 공급자(Identity Provider) 또는 인증 시스템을 통합하여 사용자 및 리소스에 대한 인증 및 권한 부여을 관리하는 방법을 의미.

Beanstalk
    개발자 중심의 관점을 제공
    EC2, ELB, ASG, RDS, 등 다 다룬다.
    서비스 자동으로 관리해준다. (auto scaling) 개발자는 코드만 짜면 됨.
    내부적으로 cloudformation 사용해서 인프라 생성.
    
    deployment option
    - all at once
    - rolling
    - rolling with additional batches : 추가 batch를 둬서 기존 application 갯수 유지하면서 rolling update
    - immutable : 아예 새로운 인프라 구성(ASG) 테스트 후 기존 ASG로 병합, 기존 application 종료
    - blue green
    - traffic splitting

    Extension
        .ebextensions/~~.config 에 설정파일 존재(.config파일이지만 yaml 형식으로 설정)
        "option_settings:" 안에서 설정

CloudFormation
    aws 인프라 개요를 선언. 
    인프라를 코드로 관리 (= template)

    스택(stack) : AWS CloudFormation에서 AWS 리소스 및 기타 관련 정보를 그룹화하고 관리하는 개념
    리소스(resource) : 다양한 AWS 서비스에서 사용되는 가상 머신, 데이터베이스, 스토리지, 네트워킹 등의 구성 요소
        ex) Resources:
                MyInstance:
                    Type: AWS::EC2::Instance
                    Properties:
                        AvailabilityZone: us-east-1a
                        ImageId: ami-a4c7edb2
                        InstanceType: t2.micro
    output
    내장함수
    
SQS
    standard 
    FIFO
    DLQ(dead letter queue)
SNS
    Fan-out 패턴은 AWS의 SNS (Simple Notification Service)와 SQS (Simple Queue Service)를 함께 사용하여 메시지를 여러 구독자에게 전달하는 패턴
Kinesis
    실시간 스트리밍데이터를 수집, 처리, 분석하기 쉽게 해줌
    - kinesis Data Streams
        Producer
            - kinesis agent
            - sdk
            - KPL(kinesis producer library)
            provisionedThroughputExceeded 해결방법
                partition key 잘 분배하기
                exponential backoff 시도
                increase shard (scaling)
        Consumer
            - kinesis data analytics
            - data firehose
            - KCL(kinesis consumer library)
            - Lambda
    - kinesis Data Firehose
        record 받아서 lambda로 데이터 가공해서 batch write -> s3, redshift, elastic search /  3rd party / http endpoint
        ** 시험문제 data stream vs firehose 
    ** 시험문제 kinesis Data Streams vs SQS FIFO
    - kinesis Data Analytics
    - kinesis Video Streams

CloudWatch
    udemy 문제 복습하기
Lambda
    event source mapping : AWS Lambda 함수에서 AWS 서비스의 이벤트 소스를 트리거하기 위해 사용되는 매핑을 정의
    동시성
    외부종속성
    cloudFormation
DynamoDB
    partition key 고르는 법 : 카디널리티가 높은 값으로 정한다.
        카디널리티는 데이터의 다양성을 나타내는 지표입니다. "도시"라는 열에 저장된 데이터가 있다고 상상해보세요. 
        만약 이 열의 카디널리티가 높다면, 이 도시 열에는 많은 다른 도시들의 이름이 들어있을 것입니다. 예를 들어, "도시" 열에 '뉴욕', '파리', '도쿄', '런던'과 같이 다양한 도시들의 이름이 포함될 수 있습니다. 
        이와 반대로, 만약 "도시" 열의 카디널리티가 낮다면, 중복되는 도시 이름이 많이 들어있을 수 있습니다.

API Gateway
CodeCommit = github
    "leverage the codebuild agent"라는 문장은 "CodeBuild 에이전트를 활용하다"라는 뜻입니다. "Leverage"는 어떤 자원이나 기회를 최대한 활용하거나 이용하는 것을 의미합니다
CodeBuild = jenkins, CircleCICD, Travis ...
CodeDeploy = jenkins, CircleCICD, Travis ...
CodePipeline 
CodeStar = 한눈에 서비스 관리할 수 있는 서비스
CodeGuru = ML 사용한 코드리뷰, 모니터링

SAM (ServerLess Application Manager)
    cloudFormation을 템플릿으로 관리

CDK (cloud development kit)
    javascript, python 등 c언어로 cloudFormation yml 파일 관리

Cognito
    SAML (Security Assertion Markup Language)은 클라우드 서비스와 신뢰할 수 있는 식별 제공자 간에 사용자 인증 및 권한 부여 정보를 전송하기 위한 표준 프로토콜. 
    SAML을 사용하면 사용자가 여러 서비스 간에 단일 로그인(SSO)하여 신원을 확인하고 권한을 부여할 수 있습니다.
    CUP (cognito User Pool) -> AuthN
    CIP (cognito Identity Pool) -> AuthZ
    ACM (aws Certificate Manager)
        SSL/TLS 인증서를 손쉽게 프로비저닝, 관리, 배포 및 갱신

Step Function
AppSync
AppAmplify

STS
IAM 고급
KMS
    Symmetric(대칭) : AES-256
    Asymmetric(비대칭) : RSA & ECC key pair
        public and private 쌍으로
CloudHSM (Hardware Security Module)
SSM (System Manager parameter Store)
SM (Secrets Manager)

ACM (강의랑 별개로 궁금해서 찾아본 것)
    AWS Certificate Manager(ACM)는 AWS에서 SSL/TLS 인증서를 발급하고 관리하는 데 사용되는 서비스입니다. 
    이 서비스를 통해 손쉽게 고객의 웹사이트 또는 애플리케이션에 SSL/TLS 암호화를 적용