linuxer-admin

aws route53 의 응답이상-1.

얼마전부터 route53 에서 cf 관련 느린이슈가 발생했다.

skt lte 망에서 발생하는 이슈인지 아니면 다른 이슈가 있는지 애매한 느낌이 있었다.

나도 ipv6 를 꺼서 지연문제가 해결될거라 생각했는데 조금 이상한 부분이 있어서 글을쓰게되었다.

먼저 route53의 응답이 이상하다.

linuxer.name 의 ns 레코드는

>linuxer.name
서버: [205.251.196.29]
Address: 205.251.196.29
linuxer.name nameserver = ns-1053.awsdns-03.org
linuxer.name nameserver = ns-1958.awsdns-52.co.uk
linuxer.name nameserver = ns-406.awsdns-50.com
linuxer.name nameserver = ns-544.awsdns-04.net

총 4개의 ns 를 가지고있다. 이 ns를 지정해보기로 한다.

>server ns-544.awsdns-04.net
기본 서버: ns-544.awsdns-04.net
Addresses: 2600:9000:5302:2000::1
205.251.194.32

서버를 ns-544.awsdns-04.net로 지정하면 ipv6 와 ipv4를 응답한다.

그 후에 다시 내도메인을 쿼리한다.

>linuxer.name
서버: ns-544.awsdns-04.net
Addresses: 2600:9000:5302:2000::1
205.251.194.32
*** ns-544.awsdns-04.net이(가) linuxer.name을(를) 찾을 수 없습니다. No response from server

그냥 도메인에 대한 응답인데..응답하지 않는다.

그럼 ns-544.awsdns-04.net 도메인의 서버IP인 205.251.194.32 로 쿼리를 날려본다.

>server 205.251.194.32
기본 서버: [205.251.194.32]
Address: 205.251.194.32

>linuxer.name
서버: [205.251.194.32]
Address: 205.251.194.32
linuxer.name internet address = 52.85.231.111
linuxer.name internet address = 52.85.231.10
linuxer.name internet address = 52.85.231.68
linuxer.name internet address = 52.85.231.42
linuxer.name nameserver = ns-1053.awsdns-03.org
linuxer.name nameserver = ns-1958.awsdns-52.co.uk
linuxer.name nameserver = ns-406.awsdns-50.com
linuxer.name nameserver = ns-544.awsdns-04.net
linuxer.name
primary name server = ns-1053.awsdns-03.org
responsible mail addr = awsdns-hostmaster.amazon.com
serial = 1
refresh = 7200 (2 hours)
retry = 900 (15 mins)
expire = 1209600 (14 days)
default TTL = 86400 (1 day)
linuxer.name name = 13.209.129.220
linuxer.name MX preference = 10, mail exchanger = mail.linuxer.name
linuxer.name ??? unknown type 257 ???

정리하자면 ipv4인 IP로 연결하면 응답하고 ipv6/ipv4로 응답하는 DNS로는 도메인에 대한 응답을 하지않는다...

이게 cf문제는 아니고 route53에서 ipv6 에 대한 응답을 정상적으로 못해서 발생하는 증상이 아닐까...하고 생각해본다..

다른의견이 있으시면 고견을 들려주시기 바란다.

https://www.facebook.com/groups/awskrug/permalink/2278291878939490/

https://docs.aws.amazon.com/ko_kr/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html?fbclid=IwAR3xOqsWf-xhh5cB0AOQfLW7zTKr-Cvd6mJEHfgIX607K1Rv6_HavoLPsnE

추가 댓글도 있으니 참고하시기 바란다.

2020/01/28 추가

https://tools.ietf.org/html/rfc3484#section-2.1

rfs3484에 의해 route53은 정상적인 응답을 하는것으로 보인다.

발생한 문제는 SK LTE 망내의 DNS에서 ipv6를 사용하므로서 정상적으로 라우팅하지 못한 문제로 보인다.

추가적인 내용은 다음포스팅에서 진행하겠다.

aws-ami-Permissions-ami공유

ami 를 공유하는 방법을 포스팅해 볼까한다.

계정간 인스턴스 이동을 진행하려면 꼭 알아야한다.

ami 메뉴에서 권한수정을 클릭한다.

공유할 계정의 aws 계정 번호를 입력하여 권한을 추가한다.

공유된 계정에서 인스턴스 생성 페이지에서 나의 AMI에서 소유권에 나와 공유됨만 체크해본다.

공유된 AMI를 확인한다.

다른 방법으로 ami 를 확인할수 있는데

공유 받은 계정에서 프라이빗 이미지를 검색해서 확인할수 있다.

리전이 다르다면 스냅샷을 리전복사 한다음에 공유를 하자.

끝!

Azure-네트워크 구성 및 망분리

azure 에서 망분리가 먼저 선행되어야 할 과제이다.
aws 에서의 망분리는 계층적 망분리로 서브넷과 라우팅 테이블을 이용하여 망분리를 구현한다. 하지만 gcp / azure는 망분리의 개념이 좀 다르다.

서브넷을 통한 망분리가 아닌 공인IP의 유무로 망분리를 구현한다.

근래에 구성도를 작성하면서 한편으로 계층적 망구성이 구성도 그리긴 불편한 생각이 들긴한데 그래도 익숙하고 편한데 azure 와 gcp 를 보니까 aws 의 망구성이 관리의 편의성이 떨어지는 느낌이기도 하고..조금 애매한 느낌이 든다.

azure 에서는 어떤 인프라도 리소스그룹안에서 만들어진다. gcp의 프로젝트 개념과도 같다. 그렇지만 좀 다른게 리전에 종속된다.

한국리전은 중부와 남부로 나뉘는데 중부를 azure 에선 중부를 주로 추천하는데 나는 중부말고 남부를 선택했다.

요구하는 바는 구독 그룹네임 리전 리소스 그룹다음에는 virtual network 를 생성하는데 VN은 서브넷을 생성하게 된다.

가상네트웤의 최대 크기는 10.0.0.0/8 까지로 16777216개 주소 를 사용할수 있다.

서브넷을 3개로 나누었고 서브넷은

보안그룹을 서브넷에 설정하여 접근제어가 가능하다.

aws 의 구성의 경우엔 az 별 서비스별 서브넷을 설정했지만 azure 는 az가 명시적으로 지정되지 않아 서비스별 서브넷을 생성해서 사용하는것이 최선으로보인다.

서브넷의 보안그룹으로 막으려면 tag ip id 로 명시적으로 막자.

서브넷별 nsg 가 구성되는게 좋을것 같다.

가상머신은 공용아이피를 없앤 채로 생성한후 나중에 공용IP를 부여할수있었다.

직렬연결은 가상화 머신의 화면을 그대로 포워딩해주는 방식으로 보이며 공용IP가 없는 상태에서도 연결할수 있었다.

굉장히 불편한 부분은 이다음에 발생했는데 lb 는 sku 개념덕분에 혼파망이 되었다.

sku는 basic / standard 두가지로 나누어져있는데

Configures outbound SNAT for the instances in the backend pool to use the public IP address specified in the frontend.

인터넷 통신

기본적으로 VNet의 모든 리소스는 인터넷으로 아웃바운드 통신을 할 수 있습니다. 공용 IP 주소 또는 공용 Load Balancer를 할당하여 리소스에 대해 인바운드로 통신할 수 있습니다. 공용 IP 또는 공용 Load Balancer를 사용하여 아웃바운드 연결을 관리할 수도 있습니다. Azure의 아웃바운드 연결에 대한 자세한 내용은 아웃바운드 연결공용 IP 주소 및 Load Balancer를 참조하세요.

하...모든인스턴스는 인터넷과 통신이 가능하다. 이거때문에 한참을 헤멧다.

nat gw가 필요가 없다..............................충격 막으려면 NSG로 막아라.

그래서 일단 정리하자면 azure 의 모든 네트워크 접근제어는 네트워크 단위가 아니라 NSG에서 모두 컨트롤한다.

선택한 서브넷 'linuxer-subnet-pri(10.0.0.0/24)'이(가) 네트워크 보안 그룹 'pri-sub-sg'에 이미 연결되어 있습니다. 여기에 새 네트워크 보안 그룹을 만드는 대신 기존 네트워크 보안 그룹을 통해 이 가상 머신과 연결을 관리하는 것이 좋습니다.

azure LB사용할땐 가용성 집합을 이용해서 VM을 만든다.

리소스그룹-vpc-subnet-가용성집합-vm-lb 순으로 생성하게 된다.

LB는 베이직과 스텐다드..하 sku 개념이 제일짜증난다.

LB를 베이직으로 생성시에

???같은 가용성 집합인데????

음...이유는 다음에 찾아보기로 하고..

sku 가 스텐다드인경우엔 잘 된다..음 베이직이라 제한이 있는것으로 이해하고 지나가기로 한다.

상태 체크는 로드벨런스 안에서..아니면 zure monitor 을 이용하자.

근데 LB에서 페이지가 뜨는건 잘안됬다 왜지?

그리고 스터디를 마치고 집에와서 백엔드 규칙만 재생성하니 정상적으로 잘됨..뭐야이거..빡치네..

aws-cloudfront-s3-lambda cross-account access

cloudfront - s3 를 이용하게되면 결국 OAI를 이용한 Bucket policy를 사용하게 된다.

단일 계정에서 사용할 경우엔 cloudfront 에서 자동으로 생성까지 해주므로 어려울것이 전혀없다.

그런데 이제 이게 파트너사를 통해서 cloudfront 전용계정을 사용하게 된다던거 multi account 로 프로젝트를 진행할경우 자동으로 생성이 되지 않는다. 이 경우에 어떤방식으로 s3 Bucket policy 를 설정해야 하는지 포스팅하려 한다.

먼저 Bucket policy 를보자

{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": " Grant a CloudFront Origin Identity access to support private content",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E39X8K28W3EQ"
]
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::*"
}
]
}

일반적으로 계정에서 버킷정책을 설정하면 위와같은 형태로 적용을 한다.
가끔 정상적으로 적용이되지않는경우엔

{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": " Grant a CloudFront Origin Identity access to support private content",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity 49821f785cce6ee4f575de3f01c503dade8a7b15003aa337faa471d830d07493cbb195eec14f0d86d4a914622e1e42"
]
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::*"
}
]
}

이런식으로 caninucal user id 를 이용하여 정책을 설정하면 자동으로 OAI ID로 정책이 적용되게 된다.

여기까진 아주 쉬웠다. 그런데

람다 엣지를 이용한 리사이즈를 하는 프로세스에서 단일계정이 아니라 교차계정을 구성하게 되면 lambda가 A 계정에서 B 계정으로 접근하게 해줘야한다. 이부분에서 조금 헤멧는데 결국엔 굉장히 간단한 부분이었다.

s3 Bucket policy 에서 계정의 role을 허용해주면 끝..

{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": " Grant a CloudFront Origin Identity access to support private content",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E39X8K58WRN3EQ",
"arn:aws:iam::328341115633:role/lambda-resize-cloudfront"
]
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::linuxer-resize/*"
}
]
}

arn:aws:iam::328341115633:role/lambda-resize-cloudfront

json 문법에 또 약해서 좀 해멧는데 금새 해결할수 있었다..