ChatGPT를 이용하여 현재 구성이 AWS Well-Architected에 가까운지 확인할 수 있을까 – 두 번째

ChatGPT를 이용하여 현재 구성이 Well Architected에 적합한지 확인하고 부족한 부분을 수정받는 작업에 대해 작성한 글입니다
2023.06.20

지난 글에 이어 작성합니다.

추가적으로 보안 검사 받기

좀 더 보안적으로 문제가 없는지 확인하기 위해 ChatGPT로 수정한 코드를 다시 확인해보았습니다.

1. Ensure that the Security Groups have the most restrictive rules possible (보안 그룹에 가능한 한 가장 제한적인 규칙이 있는지 확인)
2. Enable VPC Flow Logs (VPC 플로우 로그 활성화)
3. Use Network Access Control Lists (NACLs) (네트워크 액세스 제어 목록(NACL) 사용)
4. Enable AWS CloudTrail (AWS CloudTrail 활성화)
5. Implement Encryption (암호화 구현)
6. Implement Security Monitoring and Incident Response (보안 모니터링 및 사고 대응 구현)
7. Consider Secrets Management (비밀 관리 고려)
8. Implement IAM Roles and Policies (IAM 역할 및 정책 구현)
9. Implement Security Patching and Updates (보안 패치 및 업데이트 구현)
10. Enable AWS GuardDuty (AWS GuardDuty 활성화)

각 항목의 상세한 내용도 받았지만 이미지가 너무 길어지기 때문에 항목의 주요 내용만 정리하였습니다.
컨설팅 업무에서도 고객 환경의 보안 취약점을 검토할 때 확인하게 되는 부분들이기에 받은 내용들은 납득이 되었습니다.

물론 피드백 받은 내용도 코드에 반영하는 것은 가능했습니다.
하지만 바뀐 점이라고는 보안 그룹의 아웃바운드 룰이 인바운드 룰에서 허용하는 IP 범위와 똑같은 범위를 사용하도록 변경되기만 하였습니다.
그리고 AWS CloudTrail 구현, AWS GuardDuty 사용, 보안 패치 및 업데이트 적용 등의 작업은 CFn 코드에 반영하기 어렵다고 판단하여 직접 하는 것을 권장받았습니다.

결론적으로 현재 구성은 여전히 퍼블릭 서브넷에 인스턴스와 RDS가 배치되어 있고, 보안 그룹은 여전히 모든 룰이 동일한 범위에 대해서만 인/아웃을 허용하도록 되어있습니다.
아무래도 보안 그룹의 룰을 어떤 식으로 구현하길 바라는지 확실히 요청할 필요가 있는 것 같습니다.
- 코드

보안 이외의 부분에 대해

보안에 대한 검사만을 진행하니 결국 초기 구성에서 일부 리소스의 옵션 변경은 있었지만 새로운 종류의 리소스 추가 등은 이루어지지 않았습니다.
보안 이외에 어떤 부분을 변경하면 좋을지 확인해보았습니다.

보안에 대해 리소스를 변경할 때는 보안 하나만을 지정해서 변경해달라고 요청했었습니다.
이번에는 보안 이외의 모든 사항에 대해 수정을 명령해보겠습니다.
기대하는 결과는 코드 전체에 각 항목들이 반영된 모범사례와 같은 코드입니다.

각 항목에 대해 반영은 하지만 대략적인 예시만을 알려주며 그 안의 내용들도 좀 부족하다고 생각되는 부분이 있습니다.

더 확실히 질문해보기

아무래도 각 항목마다 반영을 요청하되, 필요한 내용도 확실히 명시를 해야할 것 같습니다.
우선 프라이빗 서브넷을 추가하여 인스턴스를 격리하고 로드 밸런서와 NAT Gateway 등을 추가하겠습니다.

결과적으로 이 코드를 얻기 위해서 다음과 같은 과정이 필요했습니다.

  1. 요청 작업 : EC2, RDS용 프라이빗 서브넷 추가 / ALB를 퍼블릭 서브넷에 추가 / NAT Gateway 추가 및 연결
    1. 결과 : RDS와 EC2가 같은 서브넷에 배치됨. NAT Gateway가 추가되지 않음. 퍼블릭 서브넷이 추가되지 않음
  2. 요청 작업 : NAT Gateway 추가 / RDS와 EC2를 별도의 프라이빗 서브넷에 배치
    1. 결과 : EC2와 ALB를 같은 서브넷에 배치. Internet Gateway에 대한 설정을 EC2 서브넷에 추가. 이후 NAT Gateway 설정을 추가. RDS를 별도의 서브넷에 배치
  3. 요청 작업 : 퍼블릭 서브넷을 새로 만들어서 ALB를 배치. NAT Gateway는 EC2와 연결되도록 수정
    1. 결과 : NAT Gateway 용 루트 테이블과 Internet Gateway 용 루트 테이블을 구분하여 설정

이미지와 같이 설명만 보면 작업이 잘 완료된 것 같이 보이지만 생각만큼 원할하게 작업이 진행되지는 않았습니다.
그래서 어떤 작업을 해야하는지 하나하나 지정해줘야 의도했던 코드를 답변해줍니다.

이 외에도 태깅이나 다른 항목들도 하나하나 설정해줘야 제대로 된 반영이 될 것 같습니다.

결과적으로 느낀점

처음 이 글을 작성할 때 기대헀던 점은 지식이 없는 사람일지라도 ChatGPT를 이용하여 좋은 환경을 만들 수 있는가? 였지만 단순히 ChatGPT를 이용하여 [가장 좋은 퀄리티]로 명령한다고 해서 좋은 아키텍처(혹은 설계)가 나온다고는 할 수 없었습니다.
ChatGPT가 모범 사례와 비교하여 어떤한 피드백을 하는 것은 가능하지만 결국 상세한 설정은 이용자가 하나하나 지정해야하는 상황이 많았습니다.(보안 그룹의 허용하는 IP 등)

실제 컨설팅 업무에서도 고객의 니즈를 하나하나 상세하게 파악하며 진행하기 때문에 ChatGPT에게 필요한 점을 하나하나 지정하며 설계를 진행하는 것은 어떻게 보면 꽤나 닮아있다고 생각되었습니다.

다만 솔루션 아키텍터가 진행하는 컨설팅은 고객이 클라우드에 대한 지식이 없거나, 무엇부터 시작해야할지 잘 모르더라도 모르는 부분을 캐치하여 설명해주거나 필요에 따라 권장 값을 추천하는 것도 가능합니다.
하지만 ChatGPT를 이용하기 위해서는 이용자 스스로가 어느정도의 지식을 가지고 있어야만 지시를 할 수 있고, ChatGPT가 추천해준 내용도 문제가 없는지 판단을 할 수 있다는 점은 크게 다르다고 생각됩니다.

따라서 ChatGPT를 이용하여 피드백을 받는 정도라면 실질적으로 도움이 될 수 있겠지만 설계 자체를 모두 맡기는 것은 아직 불가능하다고 생각됩니다.
(물론 보안적인 이유로 설계 전체를 ChatGPT에 공유하는 것은 )

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 언제나 환영합니다. must01940 지메일로 보내주시면 감사합니다.