본문 바로가기

여기저기서 질문받으며 알게 된 자잘한 지식들

 

1. AWS Auto Scaling이 지원하는 OS는 어떤 것이 있나요?

더보기

딱히 제한 없음. AWS에서 제공하는 AMI로 만들었다면 Quick Start에서 골랐든, 마켓플레이스에서 골랐든 상관없이 오토 스케일링 그룹이 만들어진다.

 

2. VPN의 전이적 통신이 가능한가?

더보기

: A(VPC) <-(VPN)-> B(On-premise) <-(VPN)-> C(VPC) 구조에서 A와 C가 통신이 가능한지?

불가. 애초에 이런 곳에 쓰라고 Transit Gateway가 있는 것이다. 동일하게 VPC Peering의 경우에도 전이적 통신이 안된다.

 

3. On-premise에서 사용하던 VM에서 스냅샷을 떠서 AWS로 마이그레이션하려 한다.
    이 경우 VM에서 사용하던 볼륨이 AWS로 들어올 경우 어떻게 되는가?

4. AWS Root 계정에 로그인하면 이메일이 오게 구성하려 하는데, 작동을 하지 않습니다.

(SNS, EventBridge 사용)

더보기

보통 검색해서 블로그나 AWS 공식 문서에 나온 방식으로 하면 된다. 

SNS에서 EventBridge 정책을 통해 CloudTrail에서 발생한 이벤트 알림을 받을 텐데, 기본값으로는 안 되는 것으로 보인다.

CloudTrail에서 추적을 생성해 이벤트 로그를 S3 버킷으로 받는데, 이때 기존 버킷을 선택하면 권한 문제로 이벤트가 제대로 전달되지 않는다. 추적 생성 시 버킷을 새로 생성하거나, 적절한 권한을 가진 버킷을 선택해야 한다.

아무래도 EventBridge의 이벤트가 작동하려면 CloudTrail에서 바로 받아오는 것은 아닌 듯?

쓸데없이 삽질을 했는데, 기본적으로 검색해서 나온대로 하면 된다. 추적 생성하고 개짓거리 안 해도 된다.

나만 안되던데, 왜 이러지?

 

5. RDS 다른 엔진들보다 Aurora를 추천할 만한 요소가 무엇이 있을까요?

더보기

- 인스턴스 오토 스케일링

- 읽기 전용 엔드포인트/사용자 지정 엔드포인트 제공

- 읽기 전용 복제본과 마스터(쓰기) 인스턴스의 스토리지 공유 : 비동기식 동기화로 장애 복구 시 데이터 유실 우려가 없다.

- 되감기(Backtracking) 기능 제공 : 특정 시점 복원(PITR)과 달리 새로운 DB 인스턴스를 생성하지 않고 롤백 가능.

 

6. 특정 사용자가 S3의 특정 디렉토리에 있는 파일을 다운로드할 수 있게 하고 싶습니다.
    정책을 어떻게 만들어야 할까요?

더보기

https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-folder-user-access/

 

Amazon S3 버킷의 폴더에 IAM 사용자 액세스 권한 부여

또 다른 예제로, 다음 IAM 정책은 사용자가 콘솔이나 AWS 명령줄 인터페이스(AWS CLI) 또는 Amazon S3 API와 같은 프로그래밍 방법을 사용하여 DOC-EXAMPLE-BUCKET/media 폴더에 객체를 다운로드 및 업로드할 수

aws.amazon.com

 

그대로 긁어서 버킷명만 수정하면 된다.

사용자명과 동일한 이름을 가진 디렉토리에 접근해 파일 목록을 보고 다운로드할 수 있다.

사용자명과 디렉토리 이름을 다르게 하고 싶다면.... 다른 정책이 필요할 듯.

※ 사용자 MFA 검증 과정을 걸치려면 조회 허용 정책 부분의 조건에 MFA 확인하는 부분을 넣으면 된다.

 

+ 디렉터리 안의 디렉터리 레벨에서 관리하려면?

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowStatement1",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "AllowStatement2A",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::[BucketName]"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "",
                        "home/"
                    ],
                    "s3:delimiter": [
                        "/"
                    ]
                }
            }
        },
        {
            "Sid": "AllowStatement3",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::[BucketName]"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "home/${aws:username}/*"
                    ]
                }
            }
        },
        {
            "Sid": "AllowStatement4A",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::[BucketName]/home/${aws:username}/*"
            ]
        }
    ]
}

 

참고 링크 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/iam-s3-user-specific-folder/

 

IAM 정책을 사용하여 사용자별 폴더에 대한 액세스 권한 부여

단일 사용자 정책 - 이 예제 정책을 사용하면 특정 IAM 사용자가 버킷의 첫 번째 수준에서 특정 폴더를 확인한 다음, 원하는 폴더 및 하위 폴더의 객체에 대해 작업을 수행할 수 있습니다. 이 예제

aws.amazon.com

 

 

7. Nat Gateway 사용 시 DNS 필터링 적용할 수 있나요?

 

8. Application에서 DB로 접속하는 자격 증명 관리에 IAM 인증보다 Secret Manager를 권장하는 이유는?

더보기

인증 순환(비밀번호를 일정 주기마다 변경하는 것)에는 2가지 방법 모두 가능합니다.

IAM 인증도 좋은 선택이지만, IAM DB 인증 토큰이 15분 동안에만 유효하기에 Secret Manager가 더 좋습니다.

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

다만 Secret Manager는 DB 안의 유저들 각각의 비밀번호는 관리해주지 않는다. 오직 마스터만...

그래서 각 유저들을 관리하려면 기타 API로 직접 만들어야 한다.

 

9. RDS 로그 관리 방법은?

더보기

RDS 설정에 로그를 CloudWatch Log로 게시하는 것을 했다면 CloudWatch 로그 그룹에 쌓이고 있다.

CloudWatch 로그 그룹은 쌓이다 보면 비용이 나름 나오는 편이니 보존 기간 설정으로 가끔 털어내거나 S3로 내보내서 관리해야 한다.

CloudWatch에 쌓인 로그는 Log Insight를 사용해 편하게 볼 수 있으니 RDS에서 로그 보는 것보다는 Log Insight로 보는 것이 좋다.

 

10. ALB와 NLB의 차이는?

더보기

가장 쉽게 알 수 있는 차이점은 네트워크 계층 차이다.

ALB는 7계층 Application Layer에서, NLB는 4 계층 Network Layer에서의 부하 분산을 지원한다.

하지만 사용자들이 원하는 차이점은 이게 아니다. 실 사용 시 참고할 만한 차이점은 뭐가 있을까?

 

1) ALB는 스위칭할 때 패킷 내용도 확인한다(IP + 포트 번호 확인은 ALB/NLB 공통)

2) ALB는 HTTP/HTTPS 프로토콜의 헤더를 보고, NLB는 TCP/IP 프로토콜의 헤더를 본다.

3) NLB는 4계층에서 확인하기에 ALB보다 처리가 빠르다. 짧은 시간 내 스파크성 트래픽에 대한 대응이 더 원활하다.

4) ALB는 7계층을 지원하기에 인프라 단계에서의 SSL 적용이 가능하다. NLB는 불가(Application에서 따로 적용해줘야 함)

5) NLB는 ALB와 달리 고정 IP를 할당할 수 있다. 즉 ALB는 ELB DNS로 접근해야 하고, NLB는 IP 주소/DNS 주소로 접근

6) 단순한 라우팅/많은 트래픽이 필요한 경우에는 NLB가 적합

7) Target Group 지정 대상에 따라 찍히는 IP 주소의 차이

   7-1) ALB에서는 인스턴스에 대한 연결이 ALB를 통해서 설정된다

      -> 서버 액세스 로그에는 ALB의 IP 주소가 찍힌다.

      -> 서버에 액세스 한 클라이언트의 IP 주소를 알고 싶다면 ALB의 X-Forwarded-For 요청 헤더 옵션을 사용해야 한다.

   7-2) NLB에서는 Target Group 유형에 따라 다르다.

      -> Instance ID로 지정 : DSR(Direct Server Return) 방식으로 작동. 응답 시 서버가 직접 클라이언트에게 패킷 전달.

                                           (서버에서 클라이언트의 IP 확인 가능)

      -> IP로 지정 : 기존 방식대로 ELB를 경유해 응답. 서버에서 ELB의 IP 확인 가능.

8) ALB의 IP 주소는 유동적이다. NLB는 EIP가 할당되기에 추가 비용이 발생한다.

 

11. AMI로 인스턴스를 만들 때 과정은?

더보기

질문을 좀 모호하게 썼는데, 상황은 다음과 같다.

 

EC2에서 작업/설치 후 해당 인스턴스의 AMI를 떴다. 그리고 이 AMI로 인스턴스를 만들 때, 어떤 과정을 통해 만들어지나?

 

AMI에 따라 설정된 구성을 만들어간다고 해도 결국은 단계별로 목표 구성까지 다시 설치하는 것이다.

즉 다 만들어둔 AMI로 인스턴스를 만든다고 해도 외부와의 통신은 필요하다는 것.

 

12. Bastion host로 Private Subnet에 있는 서버에 접속하는 방법은?

더보기

무식하게 하려면 배스천 호스트의 로컬에 접속 키를 갖다 놓겠지만, 보안적으로 좋지 않다.

터널링 방식을 사용하는 것이 제일 편하다.

 

1) CMD 창을 열어 다음 명령어 입력

ssh -i "bastion-host-key.pem" -N -L [임의의 포트 번호]:{target-private-ip}:22 [배스천 호스트에 접속할 사용자명]@{bastion-host-public-ip}

2) 위 명령어가 성공하면 새로운 CMD 창을 열어 다음 명령어 입력

ssh -i "target-key.pem" -p [동일한 임의의 포트 번호] [타겟에 접속할 사용자명]@localhost

 

 다른 방법으로는 OpenVPN을 사용하는 방법이 있지만, 동시 접속자 수나 별도의 라이선스 비용이 발생해서 좀...

 

13. EC2에서 SMTP(25번) 포트를 사용하려면?

더보기

AWS는 스팸 메일에 대비해 EC2의 25번 포트를 막아놨다.

특정 필요에 의해 해당 포트 허용이 필요하면 서포트 케이스를 열어 요청해야 한다.

의외로 빨리 처리되는 것 같기도?

 

14. AWS 글로벌 서비스는 어디에서 API 호출 기록을 볼 수 있나요?

더보기

AWS 글로벌 서비스들은 CloudTrail 버지니아 북부 리전에서 작업 기록을 조회할 수 있습니다.

IAM 같은 서비스의 기록을 보는 경우가 있겠네요.

 

15. AWS MSK도 CloudWatch에 지표가 찍히나요?

더보기

Topic 수나 Partition 수 등이 CloudWatch에 지표가 수집됩니다.

 

16. Linux에서 대용량 마운트 시 어떻게 해야 하는지?

더보기

파티션 스타일에서 차이가 발생한다. 2TB까지는 MBR 방식으로, 2TB 이상은 GPT 방식을 사용한다.

비교를 위해 이상/이하로 말하긴 했는데 GPT는 2TB 이하도 지원한다.

 

GPT 방식은 fdisk 대신 parted를 사용한다고 한다.

 

기존 MBR 방식의 파티션을 GPT 방식으로 변환하기 위해 mbr2gpt 명령어를 사용하기도 한다.

 

17. 사용 중인 포트 번호 조회하려면?

더보기

lsof -P -n -i 명령어를 사용했다.

이게 옵션이 꽤 된다.

 

-u [username] : 사용자 지정

[파일명] : 특정 파일을 사용하고 있는 프로세스

-i [ProtocolName:PortNum] : 특정 포트를 사용하는 프로세스 정보

   -> PortNum을 A-B 처럼 작성하면 포트 범위를 지정할 수 있다.

   -> -i [4 or 6] : IPv4/IPv6의 버전만 조회

   -> 그냥 -i 하면 모든 네트워크 포트 표시. 인자로 프로토콜을 명시해 특정 프로토콜만 조회 가능

-c [명령어] : 특정 명령어가 사용하는 포트

-n : 호스트 이름 대신 IP로 정보 출력

 

18. EC2의 gp2, gp3 사용은 어떻게 결정해야 하나?

더보기

gp2는 용량 기반 최소 1000 IOPS부터 GB 당 3 IOPS로 최대 16000 IOPS까지 버스팅 가능

gp3는 기본으로 3000 IOPS를 제공하지만 고정(버스팅 불가)

DB나 버스팅이 필요한 경우에는 gp2를 쓰는 것이 낫다.

일반적으로 1TB 이상 사용하면 버스팅에 대비해 gp2를 쓰고, 그 미만이면 gp3가 효율적

 

19. 대상 그룹의 Health Check 경로는 어디로 하는 것이 좋을까?

더보기

웹 페이지 기준으로...

 

처음에는 접속 시 첫 화면을 헬스체크 경로로 지정하는 것이 좋을 것이라고 생각했다.

당연히 사이트가 잘 작동하고 있는지 확인하려면 첫 화면을 확인하는 것이 좋으니까... 그런데 다른 관점도 있었다.

 

헬스체크용 경로를 따로 만들어 사용하는 방법이다. 

첫 화면은 죽었는데 헬스체크 경로만 살아있으면 어쩌지? 라는 생각도 들었으나, 첫 페이지가 무거운 경우는 다르다.

첫 페이지가 무거울 경우 헬스체크에 응답하느라 부하가 꽤 걸릴 수 있다고 한다.

 

요약하자면 정답은 없으나, 첫 페이지가 무거울 경우는 별도의 경로를 만들어 사용하는 것이 좋다.

 

20. ELB 사용 시 클라이언트의 IP를 대상 서버(EC2)에서 확인할 수 있나요?

더보기

1) ALB의 경우

   X-Forwarded-For Header를 사용해야 한다. HTTP/HTTPS 리스너가 있는 ALB/CLB의 경우 여기에서 설정.

   Apache 웹 서버 기준으로 httpd.conf 설정 파일에서 RemoteIPHeader의 값을 X-Forwarded-For로 수정

 

2) NLB의 경우

   클라이언트 IP 주소 보존 설정을 활성화하면 확인할 수 있다.

   (연결된)대상 그룹 > 설정 > 클라이언트 IP 주소 보존 편집.

   대상을 IP로 하는 경우는 클라이언트 IP 주소 보존이 비활성화되어 있고,

   대상을 인스턴스로 하는 경우는 활성화되어 있다.

 

※ 위 내용은 들어오는 경우... 나갈 때에는 ELB를 거쳐서 나갈까? 아니면 바로 NAT-IGW를 타고 나갈까?

 

21. EC2에 VMWare 설치가 가능한가요?

더보기

불가능. VMWare는 하이퍼바이저라 하이퍼바이저 안에 하이퍼바이저를 설치하는 구조는 불가.

 

베어메탈 인스턴스를 사용하면 가능할 수도 있지만, 비용이 지나치게 많이 나오기에 안된다고 생각하는 편이 좋다.

 

22. EC2에서 사용하는 OS에서도 비용이 발생하나요?

더보기

발생한다. 별도 OS 비용이 발생하는 것이 아니라 EC2에 적용한 인스턴스 유형의 비용에 추가 비용이 붙는 방식.

 

오픈 소스 OS외에는 비용이 발생하는 것으로 보인다.

 

 

계속 업데이트할 예정.

질문받을 때 모르면 부끄럽긴 한데 받을수록 지식이 늘어나는 게 느껴지니 좋다.