본문 바로가기

Amazon Web Service

(145)
AWS IAM Identity Center를 활용한 Datadog SSO 인증 AWS IAM Identity Center 란? AWS Identity and Access Management (IAM)은 AWS에서 사용자, 그룹 및 역할을 쉽게 관리하는데 도와주는 서비스입니다. AWS 멀티 어카운트 관리, User 관리, 권한 관리 그리고 SSO 인증 등 보안 작업을 수행할 수있는 다양한 기능이 포함됩니다. 예를 들어, 사용자를 생성하고 액세스 권한을 할당하거나, IAM 그룹을 생성하고 사용자를 추가하여 효율적으로 권한을 관리 할 수 있습니다. AWS IAM Identity Center는 IAM을 사용하여 AWS 리소스에 대한 사용 권한을 관리하는 데 필요한 모든 기능을 제공합니다. 이를 통해 사용자 및 그룹에 대한 액세스 제어, AWS 리소스에 대한 권한 관리, 인증 및 권한 부여..
AWS Key Management Service(KMS) KMS란? 암호화 키의 라이프사이클을 관리하는 전용 시스템으로 암호화 키의 생성, 저장, 백업, 복구, 파기 등의 기능을 제공하는 시스템으로 CMK 제어 및 관리, AES-256 / RSA(SHA_256)을 지원. 다만 CMK는 4KB까지 데이터만 암호화 가능. 따라서 4KB 이하의 데이터 보다 큰 데이터들을 암호화할 때는 데이터키를 활용. [암호화] 1) CMK의 generate를 이용하여 데이터키와 암호화 된 데이터키를 생성. 2) 원본 데이터키를 이용하여 데이터를 암호화. 3) 원본 데이터키를 삭제. [복호화] 1) CMK를 이용하여 암호화 된 데이터키를 복호화. 2) 복호화 된 원본 데이터키를 이용하여 데이터를 복호화. 3) 복호화 된 원본 데이터키를 삭제. 암호화 방식은 아래 링크에 잘 설명되어..
AWS Network Load Balancer(NLB) 동작 방식과 주의사항 AWS Network Load Balancer(NLB)란? AWS(Amazon Web Services) NLB(Network Load Balancer)는 들어오는 트래픽을 하나 이상의 가용성 영역에서 Amazon EC2 인스턴스, 컨테이너 및 IP 주소와 같은 여러 대상에 분산하는 로드 밸런싱 서비스입니다. NLB는 초저지연 상태를 유지하면서 초당 수백만 건의 요청을 처리하도록 설계되었습니다. NLB는 연결 수준(계층 4)에서 작동하며 대상 IP 주소 및 포트, 소스 IP 주소 및 포트와 같은 IP 프로토콜 데이터를 기반으로 트래픽을 라우팅합니다. NLB는 TCP 및 UDP 트래픽을 모두 처리할 수 있으며 초당 수백만 패킷으로 확장할 수 있습니다. 따라서 HTTP(S)의 cookie 방식의 sticky는..
AWS Route53 Registered domains과 Hosted zones 연결 AWS 내에서 도메인을 구매할 경우 자동적으로 Host Zone이 생성된다. 그러나 새로 구입한 도메인을 바로 사용하지 않은 경우, Route53 Host zone에 대해서도 과금이 되기 때문에 사용하기 전까지는 구입한 Host zone을 삭제했다. 그리고 구입한 도메인을 사용하기 위해서는 새로 Host zone을 만들고, Registered domain과 Host zone의 Name servers를 아래 사진과 같이 동일하게 매핑해주면 된다. 그러나 문제는 Host zone의 NS를 변경해도 정상동작 하지 않는 경우가 있다. AWS Console 상에서는 Host zone의 NS이 변경된 것처럼 보이나, aws cli로 확인해보면 처음 생성 되었던 NS가 연결되어 있는 걸로 확인된다. $aws rout..
error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1" 버전 이슈 EKS에서 현재 kubectl 최신 버전(1.24.1) 사용 시 버전 문제로 아래 버전 에러 발생 (eksctl의 버전은 v0.100.0) error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1" https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/ Install and Set Up kubectl on Linux Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.24 client can co..
AWS WAF 로그 수집 방법 AWS WAF 란 무엇인가? AWS WAF(Web Application Firewall)는 Application 가용성에 영향을 미치거나 보안을 손상시키거나 과도한 리소스를 사용할 수 있는 일반적인 웹 악용으로부터 웹 응용 프로그램을 보호하는 데 도움이 되는 보안 서비스입니다. AWS WAF는 SQL 주입, 사이트 간 스크립팅(XSS) 및 요청 위조(CSRF)와 같은 가장 일반적인 웹 취약성에 대한 보호 기능을 제공합니다. AWS WAF를 사용하여 Amazon CloudFront 배포, Amazon API Gateway API 또는 애플리케이션 로드 밸런서로 전달되는 HTTP 및 HTTPS 요청을 모니터링할 수 있습니다. 헤더, 쿼리 문자열 및 기타 요청 매개 변수의 값과 같은 지정된 조건에 따라 요청을..
Serverless Framework [환경설정] Cloud9을 이용 아래 내용에 따라 Cloud9의 Role을 적용 https://awskrug.github.io/eks-workshop/prerequisites/workspaceiam/ EKSworkshop.com In this workshop, we will explore multiple ways to configure VPC, ALB, and EC2 Kubernetes workers, and Amazon Elastic Kubernetes Service. www.eksworkshop.com 서버리스의 IAM 권한 확인 https://www.serverless.com/framework/docs/providers/aws/guide/iam Serverless Framework - AWS Lam..
AWS Lambda X-ray 및 Insight(Serverless, MSA 모니터링) 재미와 학습으로 시작했던 서버리스 MSA로 구성한 서비스가 어느새 2년이라는 시간이 지났다. 사용자도 꽤 늘어 기능을 추가하다 보니, 현재 40개가 좀 넘는 Lambda가 돌아가고 있다. (비용은 월 $150 정도) 모든 것을 AWS에 위임하여 서비스 중이더라도 장애는 발생되어(특히 외부 API들) 서버리스 MSA 모니터링을 위한 X-Ray와 Lambda Insight에 대해 간략하게 포스팅 한다. (규모가 작은 서비스지만 모니터링 체계는 크게 다르지 않을 듯 하여..) 기본적으로 CloudWatch를 통한 Lambda 모니터링은 아래와 같다. Invocations – 5분 동안 함수가 호출된 람다 횟수 기간 – 함수 코드가 이벤트를 처리하는 데 소요하는 평균, 최소 및 최대 시간 오류 수 및 성공률(%..
AWS Session Manager로 Private RDS, ElastiCache 접근 AWS SSM으로 EC2 인스턴스에 접근하기 (SSH 대체) 목차 서론 들어가기: 더 좋은 방법 대상 독자 SSM: AWS Systems Manager 원격 호스트 접속 방법 비교: SSH (기존) vs. SSM (개선) S... musma.github.io 기존에는 AWS Private VPC 내의 EC2 접근을 위해서 Bastion Host(Jumping Host)를 사용했다. 그러나 AWS SSM(Systmes Manager)의 세션매니저가 발표되고, 더이상 Bastion Host는 사용하지 않는 것을 권장한다. AWS SSM(AWS Systems Manager) 세션매니저를 사용하면 계정과 인증키 관리가 필요 없어지고, 보안에 대한 안전성 또한 높일 수 있다. 다만 문제는 SSM을 이용할 경우 V..
AWS Cloud9로 EKS DashBoard 구성 Cloud9을 통해 EKS(K8s) -> DashBoard 구성 Cloud9 K8s/EKS 설치 https://aws-eks-web-application.workshop.aws/ko/10-intro.html Amazon EKS로 웹 애플리케이션 구성하기 워크샵 소개 워크샵 진행 순서는 아래와 같습니다. AWS Cloud9을 통한 실습 환경 구축 도커를 이용하여 컨테이너 이미지 생성 컨테이너 이미지를 ECR에 업로드 Amazon EKS 클러스터 구축 및 서비스 배 aws-eks-web-application.workshop.aws K8s Dashboard https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/dashboard-tutorial.html 자습서: Ku..
AWS Config 5분만에 이해하기 [AWS Config 요약] AWS Config는 Rule 생성을 통해 AWS IAM(유저 및 권한) 및 인프라에 대한 보안 관리를 도와주는 서비스 Rule들은 190개가 존재하며, 이미 AWS에서 생성한 Rule들 (ex. 방화벽에 22번 포트 오픈, IAM User에 MFA 적용 확인 등) 커스텀룰도 생성 가능 가능 다만 Lambda의 스크립트 개발을 통해 AWS API로 들어오는 Event를 받아 처리해야 하기 때문에 어려움(안 해봄) 또한 너무 많은 Rule이 존재하여 보안 담당자가 컨트롤하기 어려운 부분(?)이 있기 때문에 AWS에서는 미리 만들어 놓은 템플릿을 제공 템플릿은 Rule들의 집합이며, AWS 자체 혹은 기타 컴플라이언스에 맞춰 Rule을 모아놓은 것 [AWS Templete 확인]..
AWS Lambda Edge 콜드스타트? Lambda Edge(이하 LE) 도입을 위해 성능을 측정 비교는 LE를 적용한 CF와 적용하지 않은 CF의 레이턴시 및 에러률 측정 원본은 동일하게 S3로 정적이미지 URL LE의 동작은 Viwer Response에 커스텀 헤더를 추가 성능 측정은 locust로, RPS 5,000 / 인터벌 1~3초 / 커넥션 50,000 그 결과 콜드스타트 문제를 넘어 RPS가 1,000을 넘어갈 때 약 3% 이상의 503(람다 실행 초과)가 발생 반면 LE를 적용하지 않은 CF의 경우 특이사항은 발견되지 않음 사실 LE의 RPS 기본 쿼터는 1,000으로 아주 정확하게 동작하고 있는 듯 보임 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cl..
Python locust load test tool 보통 벤치마크는 간단히 ApacheBenchmark를 통해 Req 임계치, Latency 정도를 확인하거나, (ab -n 100 -c 5 -C "somecookie=rawr" http://google.com/) Jmeter, nGrinder(Java)와 같은 프로그램을 통해 더 많은 정보를 확인하거나(nGrinder는 안 써봄) 장점 1. GUI 환경 2. 필요 시 플러그인 사용 단점 1. GUI 환경 2. 필요 시 플러그인 사용 3. 환경 구성이 짜증남 4. 메모리 소모가 매우 큼 구성해놓은 Jmeter 클러스터 VM들은 다시 start 하기도 싫음... 뭔가 버벅이는 느낌.. 그러던 중 Python locust를 발견 Installation — Locust 0.12.2 documentation On ..
AWS Lambda@Edge Redirect / Add Custom Header Viewer Request, Origin Request 둘 다 동작 (Viewer Req의 경우 캐싱 동작) 'use strict'; /* This is an origin request function */ exports.handler = (event, context, callback) => { /* * Generate HTTP redirect response with 301 status code and Location header based on region. */ const request = event.Records[0].cf.request; const request_uri = request.uri; const host = request.headers.host[0].value const path = ..
IT 미디어 그리고 클라우드 먼저 미디어의 사전적 의미를 알아보자. “어떤 작용을 한쪽에서 다른 쪽으로 전달하는 역할을 하는 것.” 그럼 IT에서 미디어란 무엇일까? 연속된 사진을 압축하고 네트워크를 통해 사용자에게 전달하는 일련의 작업이라고 말할 수 있다. 그럼 IT 트래픽에서 미디어가 차지하는 비중은 얼마나 될까? 과학기술정보통신부에 의하면 국내 분야별 모바일 트래픽 추이에서 동영상(미디어)이 차지하는 비율은 압도적으로 높다. 앞으로도 4K 등의 보급으로 미디어 트래픽이 급격하게 성장하리라 누구나 예상할 수 있다. IT 시장에서 트래픽은 곧 회사의 가치로 평가되기 때문에 미디어 플랫폼 회사의 가치는 시간이 지날수록 더욱 높아질 것이다. 화질 그럼 본론으로 IT 미디어의 워크플로를 알아보자. 처럼 IT 미디어의 워크플로를 보면, ..
Amazon CloudFront 글로벌 서비스 활용 국가별 서비스 시 CDN을 사용하는 여러 방법이 존재할 수 있다. 뭐 GeoIP를 활용할 수도 있고, DNS 분기를 이용할 수도 있고.... 그러나 가장 간단하게 사용할 수 있는 방법은 CloudFront의 Viewer-Country 헤더를 사용하는 것이다. 참고로 레이턴시가 중요하지 않은 서비스는 한국/북미/유럽에서 App 서버 구성 + CDN정도로 원활히 운영할 수 있다. https://aws.amazon.com/ko/about-aws/whats-new/2020/07/cloudfront-geolocation-headers/ Amazon CloudFront, 세분화된 지리 기반 타겟팅을 위한 추가 지리적 위치 헤더 추가 Amazon CloudFront에서 새 캐시 및 원본 요청 정책에 사용할 수 있는 ..
AWS ELB WebSocket 사용 시 헬스체크 방안 테스트용 WS 데모 [채팅 서버] const WebSocketServer = require("websocket").server; const http = require("http"); const port = 3000; //포트 const server = http.createServer(function (request, response) { //일반 HTTP 요청 처리 console.log( new Date() + " Can not get information reqeust of http " + request.url ); response.writeHead(416); response.end(); }); server.listen(port, function () { console.log(new Date() + "..
AWS Global Accelerator 성능 테스트 일단 AWS Global Accelerator 설명은 아래 Docuemnt와 영상 참고 AWS Global Accelerator FAQ – Amazon Web Services aws.amazon.com https://youtu.be/2Dk-HHDV8f4 바쁜 사람은 아래 장표만 보면 된다. 영상에서는 성능 테스트 시나이로는 US-EAST-1 리전의 원본에서 5MB 파일을 다운로드 받는 것이다. 일단 캐싱모드는 당연히 빠를테고, CF 프록시 구성과 GA 모두 Origin 에서 바로 다운로드 받는 거보다 빠른 결과를 보여줬다. 비슷한 구성으로 성능 측정을 진행해봤다. 원본은 송도 IDC에 존재하는 서버, 테스트 파일은 약 2MB, 타겟은 북미(LA) / 캐치포인트 사용 GA의 엔드포인트는 서울 리전 구성은 ..
Amazon EC2 Linux 2 minikube 설치 [Docker Install] 의 Docker 기본 사항Amazon ECS - Amazon Elastic Container Service 경우에 따라서는 ec2-user가 도커 데몬에 액세스할 수 있는 권한을 제공하기 위해 인스턴스를 재부팅해야 할 수도 있습니다. 다음 오류가 표시될 경우 인스턴스를 재부팅해 보십시오. Cannot connect t docs.aws.amazon.com [kubectl Install] Install and Set Up kubectl on Linux Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.2..
Amazon S3 임시 자격 증명(assume_role), Bucket Prefix 별 오브젝트 사이즈 체크 import boto3 from boto3.session import Session def assume_role(): client = boto3.client('sts') account_id = client.get_caller_identity()["Account"] IAM_ROLE_ARN = 'arn:aws:iam::58xxx119:role/xxRole' IAM_ROLE_SESSION_NAME = 'xxRole' REGION_NAME = 'ap-northeast-1' response = client.assume_role( RoleArn=IAM_ROLE_ARN, RoleSessionName=IAM_ROLE_SESSION_NAME ) session = Session(aws_access_key_id=respon..
Amazon S3 Intelligent-Tiering 30초 정리 S3 Intelligent-Tiering 기능은 2년 전 2018년 12월에 출시되었다. Amazon S3 지능적 티어 출시 – 자동 비용 최적화 스토리지 클래스 (서울 리전 포함) | Amazon Web Service Amazon Simple Storage Service(S3)는 약 12년 6개월 동안 사용되면서 수조에 달하는 객체를 저장하고 이러한 객체에 대한 초당 수백만 건의 요청을 처리하고 있습니다. AWS 고객은 S3를 통해 백업 및 복구, aws.amazon.com 이제 와서 포스팅을 하는 이유는 한 달 전 출시된 아카이브 액세스 기능 때문이다. Amazon S3 Intelligent-Tiering, 아카이브 액세스 계층 추가 | Amazon Web Services AWS는 2년 전에 S3 I..
AWS Elemental MediaConnect 소개 MediaConnect는 미디어 전송을 위한 AWS DirectConnect 서비스다. 구성은 아래와 같다. 인코더와 인코더 사이에서 안정적인 라이브 미디어 스트림 전송이 가능하다고 한다. 인풋과 아웃풋에는 AWS MediaLive 뿐만 아니라 아래 프로토콜을 지원하는 인코더들도 사용할 수 있다. 인풋 프로토콜: RTP-FEC / RTP / Zixi push / RIST 아웃풋 프로토콜: RTP-FEC / RTP / RIST / Zixi push / Zixi pull 그럼 언제 MediaConnect를 써야 할까? 라이브 미디어 스트림을 인코더 to 인코더로 보내줘야 하는데 지연이 발생될 때 권장한다. 가장 직관적인 예제는 국내에서 발생되는 라이브 미디어 스트림을 해외로 전송할 때 혹은 그 반대의 경우다..
API Gateway, DynamoDB 사용 시 주의사항 API Gateway는 백단에 HTTP(S) / Lambda 뿐만 아니라, Dynamodb를 비롯한 AWS 서비스들을 바로 호출할 수 있다. 서버리스의 경우 Front(S3) -> Cognito -> API Gatway -> Lambda -> DynamoDB나 기타 DB 를 통해 CRUD를 구성할 수 있다. 간단한 서비스의 경우에는 Lambda 없이, API Gateway -> DynamoDB으로도 가능하다. (간단한 RestAPI 혹은 크롤링 같은 목적의 경우 해당 구성이 가성비 최고인 듯...) https://aws.amazon.com/ko/blogs/compute/using-amazon-api-gateway-as-a-proxy-for-dynamodb/ Using Amazon API Gateway a..
AWS Step Functions 이해 AWS Step Functions은 AWS Lambda 및 Amazon ECS의 워크플로우를 연결하여 Serverless 서비스의 설계를 명확하고 유연하게 만들어준다. 특히 많은 데이터들을 Lambda를 통해 처리할 때 Lambda의 제한 시간 900초는 부족하다... Lambda의 Invoke를 사용해서 분산 API를 구성할 수 있지만 유지보수가 힘들어지고, Invoke의 Timeout도 고려해야 한다. (https://aws.amazon.com/ko/premiumsupport/knowledge-center/lambda-function-retry-timeout-sdk/) 그럴 때 Step Function을 고려해 볼만하다. - AWS Step Functions을 사용하면 Serverless의 가시성이 ..
AWS DynamoDB 소개 AWS DynamoDB(NoSQL PaaS, Key/Value Store) NoSQL의 사용 이유(RDBMS 한계?) Row->Document 성 데이터 이동 Scale-up의 한계 -> Scale-out 가능 비정형 데이터의 최적화 DynamoDB는 Partition과 Sort Key(옵션)만을 지원한다. Sort Key를 생성하고 DynamoDB SDK의 get_item() API를 사용할 경우 Partition + Sort Key 조합만 지원한다. 만약 Sort Key를 생성했음에도 Partition Key만을 사용할 경우에는 필터를 걸거나, query() API를 사용해야 한다. 자유롭게 CRUD API를 구성하려면 GET, PUT Item 등의 API 보단 Query API 사용을 권장한다. (..
S3 sync shell(IDC -> S3 데이터 실시간 복제) AWS CLI를 통해 기존 IDC 원본 데이터를 S3로 이관한다. (CLI 설치는 아래 참고) https://aws.amazon.com/ko/cli/ AWS에는 DataSync, Snowball 등 데이터 마이그레이션 서비스들도 있다. 그러나 DataSync의 경우 기존 IDC가 VM 환경이라는 제약이 있고, Snowball은 흠좀무... 수 TB 정도의 데이터 이관을 위해서 언제 또 쓸 지도 모르는 AWS 서비스를 학습할 시간도 아깝고... 무식하지만 심플하게 AWS S3 sync로도 충분하다고 생각한다. 그러나 AWS CLI에는 Rsync가 없기 때문에, 프로세스 확인 후 aws s3 sync를 연속적으로 실행해주는 방식으로 진행했다. [Linux(CentOS 6.X)] sync 프로세스가 쓰레드를 ..
CORS (simple, preflight request) https://developer.mozilla.org/ko/docs/Web/HTTP/CORS 교차 출처 리소스 공유 (CORS) 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행합니다. developer.mozilla.org https://nhj12311.tistory.com/69 CORS 처리 시 options는 왜 부르는거지?(Simple, Pre-flight) 이번에 별도 시스템을 개발하..
AWS S3 Events(SNS) or CloudWatch Event Trigger(S3 -> SNS) S3에 오브젝트 업로드 시 SNS로 받은 후 HTTP(S) 트리거 시에 "Permissions on the destination topic do not allow S3 to publish notifications from this bucket" 같은 에러 발생. 이는 SNS의 Policy 문제로 SNS의 Access policy - optional에 아래와 같은 Policy를 넣어줘야 함. CloudWatch Event Trigger에서도 S3가 Source일 경우 동일하게 동작하지 않음. { "Version": "2008-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Princi..
Amazon API Gateway Proxy 모드 Amazon API Gateway 사용 시, 기본적으로 모든 Path, Method, Header, QueryString 등을 아래와 같이 미리 프로비저닝 해야 한다. 그러나 API Gateway {Proxy+} 사용 시 해당 매개 변수들을 일일히 설정할 필요가 없이, Lambda 등 BackEnd에서 받을 수 있다. 참고https://aws.amazon.com/ko/blogs/korea/api-gateway-update-new-features-simplify-api-development/ 실제로 {Proxy+} 테스트를 진행해보자. 먼저 API Gateway와 연동할 Lambda를 생성한다. (Node v.12)exports.handler = async (event) => { // TODO implem..
Route53 NS 레코드 위임 문제(재귀쿼리) 및 DNS Query 트래픽, 로그 확인 기존 DNS 서버에서 Route53으로 NS 레코드를 이관할 때, Route53에서 위임된 다른 NS에 정의된 레코드들을 응답받지 못한다. 가령 아래와 같이 DNS 쿼리를 수행했을 경우, Route53에서 app.testhtm.com을 다른 NS로 위임했을 때 A레코드까지 질의되지 않는 경우다. dig +trace app.testhtm.com @ns-638.awsdns-15.net 와 같이 질의한 경우, NS 레코드까지만 응답. 로컬 DNS를 Route53으로 지정하고 Query를 하면 NS에 대한 DNS 재귀쿼리(Recursive Query)까지는 수행되지 않는다. 이 경우 NS 레코드 값을 받았으나, 상위(?), 이전(?) DNS가 없기 때문에 Route53에 등록한 NS까지만 받게 된다. 따라서 실..