AWS

AWS ALB 규칙 설정

You have a web portal composed of two services. Each service musts scale independently. Both services should be served under the same domain. Which configuration allows this?
A. Use one AWS Classic Load Balancer. Create a redirect in the web server based on users' source IPs.
B. Use two AWS Application Load Balancer; one for each service. Assign the same CNAME to both.
C. Use one AWS Application Load Balancer. Specify listener rules to route requests to each service.
D. Use two AWS Classic Load Balancers; one for each service. Assign the same CNAME to both.

두 개의 서비스로 구성된 웹 포털이 있습니다. 각 서비스는 독립적으로 확장해야합니다. 두 서비스 모두 동일한 도메인에서 제공되어야합니다. 어떤 구성이 가능합니까?
A. 하나의 AWS Classic Load Balancer를 사용하십시오. 사용자의 소스 IP를 기반으로 웹 서버에서 리디렉션을 만듭니다.
B. 두 개의 AWS Application Load Balancer를 사용하십시오. 각 서비스마다 하나씩. 동일한 CNAME을 둘 다에 지정하십시오.
C. 하나의 AWS Application Load Balancer를 사용하십시오. 요청을 각 서비스로 라우팅 할 리스너 규칙을 지정하십시오.
D. 두 개의 AWS Classic Load Balancer를 사용하십시오. 각 서비스마다 하나씩. 동일한 CNAME을 둘 다에 지정하십시오.

이문제는 하나의 domain 으로 두가지의 서비스가 가능한지 물어보는 서비스이다.

A. 출발지 IP 기반하여 서비스를 분기하는데 같은 IP에선 하나의 서비스만 사용할수 있다. 애초에 문제와 동떨어진 답이다.

B. 두개의 ALB를 사용하고 같은 CNAME 을 사용한다. DNS 라운드로빈으로 서비스되게 된다. 정상적인 서비스는 아니다.

C. 하나의 ALB를 사용하고 리스너 규칙을 이용하여 라우팅한다. 정답이다.

D. 두개의 CLB, B와 같이 DNS 라운드 로빈으로 작동하여 정상적인 서비스가 아니다.

그렇다면 여기에서 어떻게 하나의 리스너가 서비스 별로 분기가 가능한지 확인해 보자

리스너 규칙을 확인해 보면 현재 80->443으로 리디렉션 하고 443 리스너는 linuxer-blog-wg 로 전달한다.

https: 443 리스너의 규칙 보기를 누르면 다음과 같다.

그냥 단일로 전달하는 구성이다. 나는 여기서 같은 도메인으로 셋팅후에 /test /test2 로 조건 분기를 하려고 한다. 설정은 다음과 같다.

host는 admin.linuxer.name 이다. 이후 리디렉션으로 각각의 다른 게시물로 연결된다.

https://linuxer.name/test

https://linuxer.name/test2

두개의 경로로 접근해보면 에러페이지로 접근된다. admin 호스트가 명확하지 않기 때문이다.

https://admin.linuxer.name/test

https://admin.linuxer.name/test2

두개의 페이지는 정상적으로 8월과 9월의 게시물로 정상적으로 리디렉션이된다.

경로가 너무길거나 한글은 적용이 정상적으로 되지 않으므로 유의해야한다.

위테스트 URL은 이해를 돕기위해 ALB 리스너 규칙에 남겨놓은 상태이므로 리디렉션이 정상적으로 되는것을 확인해 보시라.

빼먹은 부분이 있는데 리스너 규칙을 이용한 타겟그룹으로 전달을 설정한것을 보여주지 않은것으로 보인다.

위와같이 리디렉션을 전달대상으로 수정하면된다. 대상그룹으로 라우팅시에 확장이 가능한 구성을 사용할수 있다.

이질문은 우리 동료직원들/ 한섭님 등등이 궁금해 했던 이야기 이므로

포스팅 기회를 주신것에대해 감사를 드린다.

AWS 기본 교육자료

aws 를 설명하기 전에 먼저 클라우드란? 무엇인지 부터 알아야합니다.

일반적으로 가상화를 이용하여 노드를 관리하는 기술을 클라우드라고 지칭합니다.

클라우드는 퍼블릭 클라우드 / 프라이빗 클라우드로 나뉘는데 AWS는 퍼블릭 클라우드를 지양하는 플랫폼입니다.

AWS에 대해서 알기위해선 먼저 기본적인 용어에 익숙해 져야 합니다.

이 기본적인 용어를 설명할것입니다.

on-premise / off- premise 입니다.

일반적으로 하드웨어 기반의 가상화가 아닌 IDC에 종속적인 레거시 인프라를 온프레미스라고 칭합니다. 당연히 반대의 클라우드환경은 오프프레미스라고 하겠죠.

클라우드에서 가장 많이 쓰이는 단어는 On-Demand 입니다. 언제나 사용할수 있는 정도로 이해 하면 될것 같습니다.

간단하게 AWS체로 말하자면

"온프레미스에선 리소스를 온디맨드 하게 쓸수 없잖아요?"

등과 같이 말할 수 있습니다.

오늘은 간단하게 AWS 의 기본 인프라를 소개하려합니다.

기본 인프라 라고 함은 보통 vpc / ec2 / ebs / elb /eip / RDS 등을 뜻 합니다.

VPC
EC@
EBS
ELB
EIP

등으로 표현합니다. aws.ver2 아이콘으로 간단하게 서비스를 나열해 보았습니다.

AWS VPC 안에 인스턴스(서버)를 생성하고 ELB(L4)로 로드벨런싱을 합니다.

EBS는 블럭스토리지로 파일시스템을 생성하여 데이터를 저장하고 스토리지의 타입에 따라 성능과 비용을 조절가능합니다.

퍼블릭 서브넷에 속해있는 인스턴스는 EIP를 가집니다.

인스턴스에 접근을 제어할수 있는 방법은

security group

보안그룹 포트별 제어할수 있으며,



Network access control list

NACL로 IP list 에 대한 컨트롤이 가능합니다.

일반적으로 인스턴스가 퍼블릭에 노출되는경우는 없으며 퍼블릭에 노출되는 인프라는 ELB입니다. 프라이빗 서브넷에서

RDS

web-rds 는 통신을 합니다. 일반적으로 web/rds 는 2 tier 라고 칭합니다.

2tier 구성도는 위와 같습니다.

여기에 ELB-WEB-ELB-WAS-RDS 구성으로 변경된다면 3tier 구성이 됩니다.

기본적인 aws 인프라의 설명을 마치겠습니다.

ALB sticky session 에 대한 고찰.

aws 에선 고가용성을 위한 로드벨런서를 지원한다.

로드벨런서의 이야기다.

오늘 3티어 구성에서 세션이 널뛰는 증상이 있었다. 그 이야기를 하기전에 먼저 설명부터 하겠다.

ELB 라는 이름으로 ALB/NLB/CLB로 불린다.

Application Load Balancer, Network Load Balancer, Classic Load Balancer 이다.

오늘 이야기할 로드벨런서는 ALB인데 그중에도 sticky session 이다.

한글 콘솔에서는 고정 세션이라 불린다. 고정세션은 라운드 로빈으로 작동하는 로드벨런서에 세션을 고정해서 사용자의 경험을 지속할수 있도록 도와주는 역할을 한다.

먼저 옵션을 설정하는 방법부터 보자

로드벨런서>대상그룹> 속성편집 을 누른다.

그럼 아래와 같은 창이뜨고 활성화를 누르면 고정세션의 시간을 활성화 할수 있다.

활성화 한 화면은 다음과 같다.

sticky session 이 정상적으로 붙은지 확인하는 방법은 아래와 같다.

아직 sticky session 설정을 추가하지 않은상태다.

sticky session 세션은 cookie로 생성이된다.

Application Load Balancer는 로드 밸런서가 생성한 쿠키만 지원합니다. 쿠키의 이름은 AWSALB입니다. 이러한 쿠키의 콘텐츠는 교체 키를 사용하여 암호화됩니다. 로드 밸런서가 생성한 쿠키는 해독하거나 변경할 수 없습니다.

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/load-balancer-target-groups.html#sticky-sessions

3tier로 구성하면 AWSALB 쿠키가 2개가 붙는다.

AWSALB fnCHt1XmAslF4YJP1DdrFja2gFlp58fwxawbSD63gMsYHbSY6ZvL47TP9JyNb1LAqNBb1mt3J0xTVTQrbyFV3KVQmFayhf0C+FIcsOoXDpadKRTlRxNiL2jaijXf N/A N/A N/A 131
JSESSIONID BA145F75466D30D122F5BF83873E0C13 N/A N/A N/A 45
_ga GA1.3.549999545.1568632026 N/A N/A N/A 32
Response Cookies 357
AWSALB 7/4O7AyBPsXTcT9Y3AEE+B3ueRztLwkdTz9TwF/bJ191ItEAMN1HoOk1xsVtWsOjbmuZb68s5gs+6xM2oowR3JgexIIVYIUPWwFkkOWliy3FkwsmeMzQmXsKAkV0 / 2019-10-28T10:50:30.000Z 179
AWSALB UUu3Vbr3MNNBSaaby5Z1dduf11BTf0148wbnE+20aF9Ak+QQWv0ZFGlsBsUZTOWRB9k99mVsAzr0PMgLAiciFD5mJW2FLmNn3ojwbh/EEQFdL5qe6NZCkAFKuLOz / 2019-10-28T10:50:30.000Z 178

alb-web-alb-was-rds 구성이면 쿠키가 좀붙는데 was 가 tomcat 라면

awsalb 쿠키 2개와 jsessoinid 라는 쿠키까지 붙는다.

여기서 awsalb 쿠키는 response 한 alb쿠키를 request 에 재활용한다.

awsalb 쿠키는 지속적으로 변한다. 하지만 sticky session 에의해서 jsessionid값은 연결된 was의 고유값을 지니며 jsessionid 가 변경되면 세션이 초기화 되서 재 매칭이 된다.

이걸 왜포스팅하냐면 sticky 가 정상적으로 붙는데 세션이 was1/2로 붙는 증상이 발생해서 확인하는 방법을 포스팅한거다..

아디오스!

RDS CA 인증서 2015 -> 2019 변경

메일을 받았다.

Hello,

Please act before October 31, 2019 to address an upcoming interruption of your applications using RDS and Aurora database instances.

To protect your communications with RDS database instances, a Certificate Authority (CA) generates time-bound certificates that are checked by your database client software to authenticate any RDS database instance(s) before exchanging information. Following industry best practices, AWS renews the CA and creates new certificates on a routine basis to ensure RDS customer connections are properly protected for years to come. The current CA expires on March 5, 2020, requiring updates to existing RDS database instances with certificates referencing the current CA.

You are receiving this message because you have an Amazon RDS database instance(s) in the AP-NORTHEAST-1, AP-NORTHEAST-2, AP-SOUTHEAST-1, AP-SOUTHEAST-2 Region(s). If your applications connect to those instances using the Secure Sockets Layer (SSL) or Transport Layer Security (TLS) protocol please follow the detailed instructions in the link below to complete your update(s). If not completed, your applications will fail to connect to your DB instances using SSL/TLS after March 5, 2020.

We encourage you to test these steps within a development or staging environment before implementing them in your production environments. Beginning today, you can start testing and updating your existing RDS database instances. For detailed instructions, please visit: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html

Any new RDS instances created after November 1, 2019 will default to using the new certificates. If you wish to temporarily modify new instances manually to use the old (rds-ca-2015) certificates, you can do so using the AWS console or the AWS CLI. Any instances created prior to November 1, 2019 will have the rds-ca-2015 certificates until you update them to the rds-ca-2019 version.

If you have questions or issues, please contact AWS Support at: https://aws.amazon.com/support

Sincerely,
Amazon Web Services

rds의 ca 인증서가 2015에서 2019로 변경되었다. 간단한 테스트를 진행할거고 변경을 진행할것이다.

먼저 진행할 테스트는 ca-2015 인증기관과 중간 인증서로 접속하기다. 처음엔 글로벌 CA를 이용할거라 생각했는데 아니었다. 리전마다 중간인증서로 명명된 CA인증서를 사용해야 한다.

접속 정보는 이미 모두 적용된 세션에 SSL CA 만 추가해서 접속한다

사용한 인증서는 RDS 에선 CA-2015 그리고 SSL CA인증서는 아마존에서 제공하는 중간인증서를 사용하였다.

https://s3.amazonaws.com/rds-downloads/rds-ca-2015-ap-northeast-2.pem

위 인증서를 받아서 접속을 하였다.

/* 구분자를 ";" 으(로) 변경 / / linuxer-blog-rds.ctekipxl.ap-northeast-2.rds.amazonaws.com 에 MariaDB (SSH tunnel) 을(를) 통해 연결 중, 사용자 이름 "admin", 암호 사용: Yes… / / SSL 매개 변수를 성공적으로 설정하였습니다. / / Attempt to create plink.exe process, waiting 4s for response … / /
/ SELECT CONNECTION_ID(); / 연결됨. 스레드-ID: 579 / / 문자 집합: utf8mb4 */

정상적으로 접근이 가능한것을 확인하였다.

인증서 다운로드 리스트는 아래의 링크이다.

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html

그럼 이제 테스트할것은 RDS CA-2015 을 CA-2019 로변경하고 rds-ca-2015-ap-northeast-2.pem 인증서로 접근해 볼것이다. 인증기관을 변경하는 방법은 다음과 같다.

수정을 누르고~ 스크롤을 내린다.

인증기관 부분을 2015 -> 2019로 변경한다.

변경하면 위와같은 노티가 발생한다. 새인증서를 받아서 사용하라는 메시지 이다.

2분가량의 다운 타임이 발생하고 이테스트를 진행하는 이유는 다음 글귀 때문이다.

aws docs 에서 본 글귀인데

이 루트 인증서는 신뢰할 수 있는 루트 개체이므로 대부분의 경우에 작동하지만 애플리케이션에서 인증서 체인을 수락하지 않는 경우 실패할 수 있습니다.

대부분의 경우에 작동한다. 물론 2015-2019 인증서가 교차로 작동할거라 생각하진 않으나 혹시나 하는 생각에 진행해 본다.

tmi로

유지관리 기간 설정은 같은 페이지에서 할 수 있다. 즉시 적용을 하지 않을 계획이라면 알아두자. 필자는 즉시적용을 했다.

재부팅이 이어지고 완료가 되면 접속테스트를 진행한다.

CA-2019 인지라 rds-ca-2015-ap-northeast-2.pem 인증서론 접근이 안된다.

이후 사용한 인증서는 아래의 링크이다. 접속이 잘된다.

https://s3.amazonaws.com/rds-downloads/rds-ca-2019-ap-northeast-2.pem

HeidiSQL 프로그램으로 SSL을 사용한 접근을 하는 테스트를 진행해 보았다.

이테스트를 진행한 이유는 사실 목적은 읽기전용복제본에 있었다.

CA인증서가 변경되면서 master - slave 사이의 통신채널에도 문제가 있을까? 하는 질문을 받았기 떄문이다.

https://aws.amazon.com/ko/rds/details/read-replicas/

보안을 고려한 설계
Amazon RDS for MySQL, Amazon RDS for MariaDB 및 Amazon RDS for PostgreSQL의 읽기 전용 복제본을 생성할 때, Amazon RDS는 리전 간에 복제하더라도 원본 DB 인스턴스와 읽기 전용 복제본 간에 퍼블릭 키 암호화를 사용하여 안전한 통신 채널을 설정합니다. Amazon RDS는 안전한 채널을 제공하는 데 필요한 모든 AWS 보안 구성(예: 보안 그룹 항목을 추가)을 설정합니다.

퍼블릭키 암호화 부분이 CA를 사용하는건 아닐까하는 궁금증이었는데,

스크린샷을 찍어가며 작업한것은 아니나, CA-2015 에서 생성한 읽기전용복제본의 인증기관을 2015 로 설정하고 마스터는 CA-2019 로 변경시에 퍼블릭키를 이용한 암호화 채널에는 아무 문제가 없었다.

고로 퍼블릭 키는 별도의 퍼블릭키라 결론을 내렸다.

현재 CA-2015 에서 CA-2019로 교체이슈가 뜨겁다.

즉시적용이던 유지관리에 적용이던 얼른적용하자.
사실 RDS에서 SSL 인증을 사용하는것이 아니면 기능상의 문제는 없으나....

이벤트에 의해 강제로 리부팅되고 단절에의해 서비스에 장애가 생기는거 보단 미리하는것이 나을것이라 생각한다.

한섭님의 좋은 궁금증이었다.

한섭님께 감사를 드린다!

route53 에서 한글 도메인 사용법. 부제 - 장난으로 리눅서.com 구매한 이야기

흔히들 한글도메인을 많이 사용한다.
처음 한글도메인을 사용하시는분들이 겪게 되는 이야기다.

route53에서 한글 도메인 구입은되는데 hosted zone 생성은 안된다고 한다.

간단하다 모든 네임서버는 한글을 인식할수 없다.

그런데 우리는 한글도메인을 사용한다. 사용할때 필요한것이 퓨니코드다.

퓨니코드(Punycode)는 유니코드 문자열을 호스트 이름에서 허용된 문자만으로 인코딩하는 방법으로, RFC 3492에 기술되어 있다. 퓨니코드는 유니코드가 지원하는 모든 언어로 국제화 도메인을 쓸 수 있게 한 IDNA의 일부로, 변환은 전적으로 웹 브라우저와 같은 클라이언트에서 이루어진다.

뭐그렇단다.

그래서 퓨니코드로 인코딩된 문자열로 hosted zone 을 생성하면 사용할수 있다.

갑자기 든 의문이다. 퓨니코드 서브도메인은 생성이 가능할까?

도전해 본다.

https://후이즈검색.한국/idnconv/index.jsp

에서 변환가능하다.

리눅서.linuxer.name 를 변환하면 xn--pd1b38litg.linuxer.name 가 된다.

퓨니코드로 변환된 서브도메인으로 접속시에 잘된다.

결론. 한글서브도메인 route53에서 사용가능하다. 그럼 혹시 com 도메인도 퓨니코드로 변환해서 등록이 가능하지 않을까?

xn--pd1b38litg.com 으로 검색이 되고 구매까지 이어진다.

크래딧으로는 도메인을 구매할수 없다.

등록대기중 뜨고.

결제도 되구..
엥? 진짜? 리눅스.com 생성되는거야??????????????????????

리얼리? 농담인데;;;;;;;;;;;;

자동으로 hosted zone 도 생성됬고.......돌이킬수 없게 됬다.

나는 장난으로 리눅서.com을 가지게 되었다...

1년시한부로..

당연히 될건 알았는데 사고나니 좀 웃기기도 하고 그렇다.

리눅서.com 출격합니다.

acm도 잘추가되고!

웹사이트도 잘열리고!

감사합니다.