ELB란 Elastic Load Balancer의 준말로 ELB 설정 정보를 다루기 전 로드 밸런서란 무엇인지에 대해 집고 갔으면 한다.

로드 밸런서란?

- 로드 밸런서는 (부하 분산장치)는 다수의 서버로, 또는 다수의 인스턴스로 트래픽을 분산하는 것을 의미한다 

왜 로드 밸러서를 사용해야하는가

  • 여러 다운스트림 인스턴스에 로드 분산을 할 수 있다.
  • 애플리케이션의 단일 액세스 지점을 노출 할 수 있다.

이러한 ELB를 설정하기 이전에 Target Group(대상그룹)을 설정해야 한다.

대상그룹이란 ELB 생성을 통해 생성을 한다면 아래처럼 리스너 및 라우팅에서 대상 그룹과 프로토콜을 지정하는데 이때의 대상 그룹을 의미한다.

리스너 및 라우팅

 

ELB는 가용 영역 및 로드 밸런서 노드를 설정한다.  로드 밸런서에서 아래 네트워크 매핑의 가용 영역을 활성화하면 ELB가 해당 가용 영역에 로드 밸런서 노드를 생성한다. 

네트워크 맵핑

 

가용영역을 매핑하면 해당 가용영역에 아래와 같이 활성화된 서브넷 영역을 드롭다운 메뉴로 보여주며 

 

 

ELB를 통해 AZ에서 활성화된 프라이빗 서브넷 영역의 타깃 그룹으로 연결을 시켜준다 생각하면 된다.  또한 이 연결된 로드 밸런서를 Route53과 맵핑을 시켜준다면 아래와 같은 플로우를 타게 된다.

 

Route53에서 지정된 도메인 주소 -> elb -> public subnet -> private subnet영역에 위치한 target group

 

필자는 온프레미스로 올려서 위의 VPC를 다른 프라이빗 IP주소로 선택하였고 때문에 기존 서버 주소, 온프레미스 서버주소 두개를 타겟그룹으로 지정하였고 이렇게 설정하게 되면 로드밸러서가 라운드 로빈 방식으로 통신을 진행하게 된다.

반응형

VPC 를 설정하다 보면 왼쪽 보안 영역에 네트워크 ACL(NACL) 과 보안 그룹(Security Group) 에 대한 영역을 확인할 수 있다.

NACL과 SecurityGroup은 우선적으로 적용되는 영역이 다른데, 아래와 같다.

NACL

VPC -> NACL -> Subnet

SecurityGroup

VPC -> NACL -> Subnet -> SecurityGroup

 

SecurityGroup 과 NACL에 대한 내용을 보다보면 Stateless와 Stateful 이라는 용어가 나오는데 

- Stateless란 : 요청 정보를 따로 저장하지 않아 응답하는 트래픽도 제어를 해줘야 한다.(NACL)

- Stateful : 요청 정보를 저장하여 응답하는 트래픽 제어를 하지 않는다(SecurityGroup)

 

다시 표로써 NACL 과 SecurityGroup을 정리하자면

  NACL Security Group
적용 단위 서브넷 단위 인스턴스 단위
상태 저장 여부 Stateless Stateful
Order 순서 있음 순서 없음
Action Allow, Deny Allow만 가능

 

반응형

CloudFront를 사용하여 AWS S3에 접근하는 것이 직접적으로 S3에 연결하는 것보다 좋은 이점이 몇가지 있다.

1. 성능 및 속도 향상: CloudFront는 캐싱 및 콘텐츠 전송 네트워크(CDN)를 제공하여 전 세계 사용자에게 빠른 성능을 제공한다. 사용자가 가장 가까운 위치에 있는 엣지 로케이션에서 콘텐츠를 제공하기 때문에 지연시간이 줄고 성능이 향상된다.

2. 보안 향상: CloudFront는 HTTPS를 통해 콘텐츠를 안전하게 전송할 수 있다. 또한 AWS WAF와 통합하여 보안을 강화 할 수 있다.

3. 확장성: CloudFront는 높은 확장성을 제공한다. 전 세계적으로 수천 개의 엣지 로케이션을 보유하고 있어, 사용자 트래픽이 증가해도 성능에 영향을 미치지 않는다.

4. 비용절감: CloudFront는 요청당 요금제를 적용하기 때문에 트래픽이 적은 경우에는 비용이 크게 증가하지않으며, 또한 캐싱을 통해 S3에서 직접 콘텐츠를 제공하는 것보다 비용을 줄일 수 있다. 

5. 고급 기능 제공: CloudFront는 다양한 기능을 제공하여 콘텐츠 제공을 더욱 효율적으로 관리할 수 있다. 예를 들어 캐싱 제어, 요청 라우팅, 사용자 정의 도메인 설정 등의 기능을 활용할 수 있다. 

CloudFront 서비스에 배포생성을 클릭하면

 

CloudFront의 Origin domain을 클릭하면 등록된 버킷 리스트 목록이 나열되며 이때 위에서 설정한 S3를 연동한다. 또한 원본 엑세스의 설정 정보를 원본 엑세스 제어설정(권장)으로 표기한다.

Create new OAC 를 통해 아래와 같이 생성한다

설정 탭에서 가격분류는 아래와 같이 설정하며 또한 사용자 정의 SSL은 기존에 등록되어있는 것을 활용한다.

위의 정보를 통해 배포 생성 버튼을 클릭하게 되면 아래와 같이 S3의 버킷 정책을 업데이트 하라는 문구와 함께 정책 복사 버튼이 존재하고 이를 복사하여 연결한 S3 버킷 권한으로 이동하여 버킷 정책 편집을 통해 복사한 정책을 붙여넣는다

아래는 위에서 언급한 버킷 정책 편집 화면이다.

 

Route53 설정을 통해 특정 도메인 이름으로 접근 가능하게 설정을 해보도록 하자

우선 호스팅 영역 페이지에 들어가 레코드 생성 버튼을 통해 별칭을 통한 트래픽 라우팅 대상 설정 및 등록을 아래와 같이 하게 되면 Route53의 설정한 도메인으로 CloudFront 접속이 가능하게 된다.

 

위의 배포 선택 부분은 앞서 CloudFront의 배포 탭으로 가자면 도메인 이름으로 xxxx.cloudfront.ne t이 보이는데 이를 입력해주면 된다.

 

반응형

1. VPC 생성

VPC > Your VPCs > Create VPC를 통해 VPC를 생성한다.

 

2. IPv4 CIDR은 보통 VPC는 /16 prefix, public subnet 같은 경우 /20, private subnet 같은 경우 /22 로 나뉘며 그 이유는 앞단인 public subnet 영역 에서 훨씬 많은 외부접근이 발생할 수 있기 때문에 auto scailing을 통해 ip대역을 원할히 할당하기 위해 prefix를 좀더 널럴하게 잡는다고 한다.

 

3. DR(Disaster Recovery) 를 위해 2AZ 안에 2 Tier의 Subnet 영역을 두고자 하며 각각의

네이밍은 {Service Name}-{Profile}-{AZ}-{public/private}-subnet(예, sample-develop-a-public-subnet)으로 짓는다.

 

4. VPC > Subnets > Create Subnet을 통해 Subnet 생성을 하며 필자는 2 tier 로 구성하기에

4개의 서브넷 영역을 생성했다.(2pub/2pri)

 

5. pub1, pub2 subnet 영역을 하나의 라우팅 테이블에 묶고 pri1, pri2 subnet 영역을 하나의 라우팅 테이블에 묶는다.

최초 VPC 생성시 Default Routing Table이 생성되고 이를 필자는 pub1, pub2 를 묶는데 썼으며 추가로 pri1, pri2 서브넷 영역을 묶기위해 Route Table을 별도로 생성하였다.

 

 

6. private subnet 과 public subnet에 각각 ec2 인스턴스를 셋팅한다. public subnet 영역에는 ec2 ami로 amzn-ami-vpc-nat-2018.03.0.20220705.1-x86_64-ebs(이미지 이걸로 안할시에 -> ec2 인스턴스를 nat용으로 사용못함) 를 사용하여 ec2 인스턴스를 nat용으로도 사용하고자 한다. private subnet 영역에는 ami로 amazon default image를 사용하여 t2 medium으로 올렸다.

 

7. bastion host란 private subnet에 올린 ec2에  접근 할 수 있는 방법이 오직 bastion host 로만 관리하는 것이며 이경우 보안과 통신 로그를 일괄적으로 관리할 수 있는 편리함이 보장된다. public subnet에 올린 ec2 인스턴스를 bastion으로 사용하기 위해 기존 private subnet을 묶은 {Service Name}-{Profile}-private-rt 에 Edit routes 로 모든 나가는 목적지를 아래와 같이 public 영역에 위치한 ec2 인스턴스의 아이디를 입력한다.

 

8. public subnet을 묶은 {Service Name}-{Profile}-public-rt 은 외부로 통신해야하기 때문에 Internet Gateway를 우선적으로 생성한다.

 

9. 생성한 Internet gateway를 앞서 생성한 {Service}-vpc에 Attach to VPC 메뉴를 통해 붙인다.(안붙이게 되면 routing table에서 이용할 수 없다)

 

10. 앞서 8번에서 언급한  {Service Name}-{Profile}-public-rt 에 앞서 만든 Internet gateway를 연결한다.

 

11. public 영역에 위치한 ec2 인스턴스와 private 영역에 위치한 ec2 인스턴스에 접근하기 위해선 각각의 Security Group의 Inbound rule 과 outbound rule 에 설정을 해야 하는데 우선 private 영역에 위치한 보안그룹의 inbound와 outbound의 설정 정보는 routing table에 등록되어있는 정보를 토대로 외부로 나아가기때문에 outbound를 모두 all로 표기했으며 inbound는 아래와 같이 ssh만 설정하였다.

 

12. public 영역에 위치한 ec2 인스턴스의 Security Group 은 아웃바운드는 모든 트래픽 허용으로 했으며 inbound 의 source 타겟을 Security Group 도 target으로 할 수 있어 private 영역에 위치한 ec2인스턴스의 security group을 소스로 설정했다. 아래는 그 설정 정보이다.

 

13. 또한 public subnet 영역에 위치한 ec2인스턴스를 nat 용도로 사용해야하기 때문에 원본/대상 확인 비활성화 작업을 해야하며 아래와 같이 진행하면 된다.

14. 정상적으로 nat용도로 활용되는지를 확인하려면 우선 가까운 영역부터 즉 private ec2 에서 public ec2 인스턴스로 핑을 날려보고 

아래와 같이 명령어로 정상적으로 작동 되는지 확인한다.

$ sudo yum update -y

 

* perm key의 권한은 600으로 안해줄시에 SSH 커넥션시에 에러가 발생한다.

 

15. 핑은 VPC 내의 Subnet을 묶는 Default Routing table을 통해 다른 서브넷에 있는 ec2 인스턴스끼리 서로 통신할 수 있지만 IGW를 통해 외부 연결을 하려면 반드시! private subnet을 묶은 routing table에 public subnet에 올린 ec2인스턴스를 등록을 꼭 해줘야한다.

 

https://dev.classmethod.jp/articles/access-private-subnet-ec2-via-ec2-bastion-host/

 

반응형

기존 AWS CLI v1의 아마존 ECR 로그인 같은경우

$ $(aws ecr get-login --no-include-email --region ap-northeast-2)

 

이와 같은 방식으로 명령어를 실행하였으며 $()는  괄호 사이의 명령을 실행한 다음 그 결과 문자열을 다시 실행하는 쉘 문법이다. 따라서 $() 를 제거하고 실행하면 실제로 실행되는 명령어를 확인할 수 있으며 이때의 명령어는

$ aws ecr get-login --no-include-email --region ap-northeast-2
docker login -u AWS -p <Password> https://<ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com

 

실제로 docker login 명령어가 실행되는 것을 확인할 수 있다. 명령어를 실행하는 시점에 AWS CLI가 임시 패스워드를 받아와 프라이빗 도커 레지스트리에 로그인을 수행한다.

 

변경된 AWS CLI v2의 아마존 ECR 로그인 방법(AWS CLI 버전에 따라 v1의 ECR 명령어가 실행 안됨)

$ aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

 

반응형

AWS CLI은(는)  AWS Command Line Interface의 약자로 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구이다. 공식문서에서 다음 링크와 같이 AWS CLI를 설치 안내하며 설치 후 아래와 같이 동작한다.

$ aws --version
aws-cli/2.13.33 Python/3.11.6 Linux/3.10.0-1160.102.1.el7.x86_64 exe/x86_64.centos.7 prompt/off

 

이렇게 AWS CLI 설치 후 AWS CLI에서 다양한 리소스를 다루기 위해서 자격 증명이 필요하다.

이 경우 CentOS 기준으로,  profile 및 기본설정 명령어는 아래와 같으며 

$ aws configure
AWS Acess Key Id: { aws_access_key_id }
AWS Secret Access Key: { aws_secret_access_key }
Default region name: ap-northeast-2
# AWS 자원에 대한 응답의 기본 포맷으로 text, table, yml 등이 있다.
Default output format: json

# 특정 profile 별 액세스 키 설정
$ aws configure --profile dev

# 아래 명령어로 현재 설정된 프로그램 액세스 키가 어느 계정에 소속된 것인지 조회할 수 있다
$ aws --region ap-northeast-2 iam get-user

# 프로파일 별 계정 정보 조회
$ aws --profile dev --region ap-northeast-2 iam get-user

 

아래에 위치한 경로 내에 설정한 profile 별 계정 정보를 확인 및 수정할 수 있다.

// /home/{user}/.aws
$ cat credentials 
[default]
aws_access_key_id = { aws_access_key_id }
aws_secret_access_key = { aws_secret_access_key }
[user-1]
aws_access_key_id = { aws_access_key_id }
aws_secret_access_key = { aws_secret_access_key }

 

 

반응형

'AWS > IAM & AWS CLI' 카테고리의 다른 글

AWS - IAM, User, UserGroup, Role, Policy에 대한 관계  (0) 2023.04.15

Amazon EC2 란 Elastic Compute Cloud 의 약어로써 서비스형 인프라스트럭쳐이다(Infrastructure as a Service)

EC2는 다양한 타입으로 구성되어져 있는데

AWS의 EC2 naming convention 에 따르면 

m5.2xlargy

  • m: instance class를 의미 한다.
  • 5: 세대를 의미한다
  • 2xlarge: 인스턴스 클래스 내의 크기를 의미한다.

EC2는 사용 목적 에따라 Instance Type이 나뉘는데 아래와 같다.

  • General Purpose(범용)
  • Compute optimized(컴퓨팅 최적화)
  • Memory optimized(메모리 최적화)
  • Stroage Optimized(스토리지 최적화)
  • Accelerated Computing(HPC) 최적화
  • Instance Features(인스턴스 기능)
  • Measuring Instance Performance(인스턴스 성능 측정)

EC2 Instance Types: example

반응형

IAM

AWS Identity and Access Management 의 약어이며 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스를 뜻한다. IAM을 사용하면 사용자가 액세스 할 수 있는 AWS 리소스를 제어하는 권한을 중앙에서 관리할 수 있다. 

IAM 사용자

AWS에서 생성하는 엔티티이며 AWS에서 사용자 는 이름과 자격 증명으로 구성된다. AWS가 IAM 사용자를 식별하는 방법 중 하나로 Amazon Resource Name(ARN) 이 있는데 다음과 같이 표기한다.

arn:aws:iam::{account-ID-without-hyphens}:user/{user_name}

IAM 사용자  그룹 

IAM 사용자의 집합으로서, 사용자 그룹 을 활용하면 다수의 사용자들에 대한 권한을 지정함으로써 해당 사용자들에 대한 권한을 더 쉽게 관리할 수 있다. 사용자 그룹의 모든 사용자가 정책의 권한을 받도록 Identity기반 정책을 사용자 그룹에 연결할 수 있다. 그룹은 인증이 아니라 권한과 관련이 있고 보안 주체는 인증된 IAM 엔티티이기 때문에 정책에서 사용자 그룹을 Principal로 식별할 수 없다.

 

다음은 사용자 그룹이 갖는 몇 가지 중요한 특징이다.

  • Root accout 는 기본생성 되어지며 사용하거나 공유해서는 안된다. 
  • 조직내의 사용자들은 그룹화(사용자 그룹) 할 수 있습니다.
  • 그룹에는 사용자만 포함할 수 있으며 다른 사용자 그룹은 포함할 수 없습니다.
  • 사용자는 사용자 그룹에 속할 필요가 없으며 사용자는 여러 그룹에 속할 수 있습니다.

 

User & Group

 

IAM 역할

IAM 역할 은 계정에 생성할 수 있는, 특정 권한을 지닌 IAM 자격 증명이다. IAM역할은 AWS에서 자격 증명이 할 수 있는 것과 없는 것을 결정하는 권한 정책을 갖춘 AWS 자격 증명이라는 점에서 IAM 사용자와 유사하다. 그러나 역할은 그와 연관된 암호 또는 액세스 키와 같은 표준 장기 자격 증명이 없다. 때문에 역할을 맡은 사람에게는 해당 역할 세션을 위한 임시 보안 자격 증명이 제공된다. 이와 관련된 것이 

AWS STS와 Assume Role인데

AWS STS(Security Token Service)는 AWS에서 보안 토큰을 생성하는 서비스이며, Assume Role은 AWS IAM에서 지원하는 기능 중 하나로써 AWS IAM에서 Assume Role을 사용하면 IAM 사용자 또는 AWS 외부 자격 증명으로 다른 AWS 계정 또는 리로스에 엑세스 할 수 있다.

IAM Permissions

  • 사용자와 그룹은 JsonType document로 Policies(정책)를(을) 할당 받을 수 있으며  이러한 Policies는 사용자의 권한을 정의합니다.
  • 최소한의 권한 정책을(least privilege principle)을 적용해야 하며 사용자가 필요로 하는 것보다 더한 권한을 주워서는 안된다. 

 

IAM Policies inheritance (정책 상속)

정책 상속

 

IAM Policies Structure

  • 구성 정보
    • Version: 정책 언어 버전(항상 2012-10-17일로 고정)
    • Id: 정책 식별자(선택 사항)
    • Statement: 하나 또는 그 이상의 개별 명령문(Statement)(필수)
  • Statement 구성 정보
    • Sid: 명령문의 식별자(선택사항)
    • Effect: 명령문이 액세스를 허용하는지 또는 거부 하는지 여부(Allow or Deny)
    • Principal: 이 정책이 적용될 사용자, 계정, 역할(Account, User, Role)
    • Action: 허용하거나 거부된 정책 목록
    • Resource : Action 이 적용된 리소스 목록
    • Condition: 이 정책이 적용되는 조건(선택사항)

 

IAM Password Policy

복잡한 암호는 계정의 보안을 강화시키기에, AWS는 비밀번호 정책을 다음과 같이 설정할 수 있다.

  • 최소 암호 길이 설정
  • 특정 문자 유형
    • 대문자, 소문자, 숫자, 특수기호를 포함한 유형
  • 모든 IAM 사용자가 자신의 암호를 변경할 수 있도록 허용 
  • 일정 시간이 지나면 사용자에게 비밀번호를 변경하도록 요구(비밀번호 만료) 
  • 비밀번호 재사용 방지

 

반응형

'AWS > IAM & AWS CLI' 카테고리의 다른 글

AWS - AWS CLI와 AWS Profile  (0) 2023.11.10

+ Recent posts