이득:
- 가장 좁은 권한과 안전한 기본값을 갖춘 인공 지능으로 IaC(Terraform, Ansible) 코드를 생성하고 선언적 접근 방식을 이해하는 능력
- 계획/점검 출력을 적용하기 전에 삭제 및 강제 교체 라인을 읽고 캡처하여 데이터 손실을 방지하는 기능
- 원격 백엔드에서 상태 파일을 암호화 및 잠긴 상태로 유지하고 변경 사항을 되돌릴 수 있는 작은 단계로 나누어 비밀 유출을 방지하는 기능
코드형 인프라 관리(IaC): Terraform, Ansible 및 AI를 통한 계획 제어
과거에는 수동 클릭, 명령, 개인 메모만으로 서버 설정이 완료되었습니다. 그 결과, 설정 방법을 정확히 아는 사람이 아무도 없는 재현 불가능한 "눈송이" 서버가 탄생했습니다. IaC(Infrastructure as Code)는 이러한 혼란을 끝내는 접근 방식입니다. 서버, 네트워크, 보안 규칙은 수동으로 정의되지 않고 버전 지정 가능한 텍스트 파일(코드)로 정의됩니다. 이 코드를 실행하면 인프라는 작성한 대로 정확하게 설정되며, 매번 동일하고 문서화되어 반복 가능합니다. 가장 일반적인 도구는 클라우드 인프라용 Terraform 및 CloudFormation과 서버 구성용 Ansible입니다. 여기서 AI는 이 IaC 코드를 작성, 설명 및 검토하는 데 매우 능숙합니다. 그러나 IaC의 힘은 위험이기도 합니다. 잘못된 라인 하나가 전체 인프라를 망칠 수 있습니다. AI가 코드를 작성하면 "계획"을 읽고 승인하고 실행합니다.
이 단원에서는 선언적 접근 방식, 계획/적용 구별, 상태 보안 및 멱등성에 대해 논의합니다. AI를 이용한 IaC 생성과 가장 중요한 기술인 '계획 제어'를 배우게 됩니다.
선언적으로 생각하기: "어떻게 할 것인가"가 아니라 "만약에"
대부분의 IaC 도구는 선언적입니다. 시스템의 최종 상태("웹 서버 3개, 로드 밸런서 1개")를 설명하면 도구 자체가 해당 상태에 도달하는 방법을 계산합니다. 이는 스크립트를 작성하는 것과는 다릅니다(단계적으로 "이것을 하고, 다음을 하십시오"). 선언적 접근 방식의 가장 큰 장점은 멱등성입니다. 코드를 10번 실행하더라도 도구는 원하는 상태가 이미 존재하는지 확인하고, 존재하더라도 해당 상태를 건드리지 않기 때문에 결과는 동일합니다. AI에 IaC를 작성할 때 이 차이점을 기억하세요. "이 명령을 실행"이 아니라 "이 인프라 상태를 유지"라고 말하게 합니다.
계획/적용: 가장 중요한 안전 난간
IaC의 생명을 구하는 기능은 계획 단계입니다. Terraform에서 terraform plan, Ansible의 --check 모드는 코드를 실행하기 전에 "적용하면 무엇이 변경될 것인가"에 대한 미리보기를 생성합니다. "리소스 2개가 추가되고 1개가 변경되고 0개가 삭제됩니다." 이는 구현하기 전에 의도와 현실을 비교할 수 있는 유일한 방법입니다. 중요 규칙: 계획을 읽지 않고 신청하지 마십시오. 특히 "파괴" 줄을 찾으세요. 오타로 인해 "1개는 변경됩니다" 대신 "12개는 삭제됩니다"라고 표시되면 해당 계획이 재난으로부터 여러분을 구한 것입니다. 코드를 AI에 인쇄한 후 "나와 함께 계획 출력을 한 줄씩 검토하고 삭제/재생성이 포함된 모든 줄을 표시하세요."라고 말하게 합니다.
주의: Terraform에 대한 일부 변경 사항은 "제자리에서 업데이트"하는 대신 리소스를 "파괴하고 다시 생성"합니다. 이는 데이터베이스의 데이터 손실을 의미합니다. 계획 출력에서 -/+ 또는 "강제 교체"를 무시하는 것은 가장 비용이 많이 드는 실수 중 하나입니다.
상태 파일: 비밀과 진실의 기록
Terraform과 같은 도구는 상태 파일에서 관리하는 인프라의 현재 상태를 유지합니다. 이 파일은 두 가지 이유로 중요합니다. 첫째, 비밀이 포함될 수 있습니다(데이터베이스 비밀번호, 키는 일반 텍스트 상태가 될 수 있음). 따라서 상태를 공개 저장소나 AI에 붙여넣지 말고 암호화되고 액세스가 제한된 원격 백엔드에 보관하십시오. 둘째, 국가가 손상되거나 상실되면 차량은 실제 인프라와 상상의 인프라 사이의 연결을 잃게 됩니다. 따라서 상태의 백업과 잠금 장치(두 사람이 동시에 깨지지 않도록 하는 잠금 장치)가 필수적입니다.
단계별: AI로 IaC 보호
- 상태 의도 및 제공자. "이 지역, 이 크기 및 보안 그룹에서 Terraform을 사용하는 AWS의 2개 서버입니다." 클라우드, 도구, 버전이 명확하면 AI는 올바른 구문을 생성합니다.
- 보안 기본값을 요청합니다. "보안 그룹을 열고, 암호화를 활성화하고, 비밀을 변수로 추출하고, 공개 액세스 권한을 부여하세요." AI는 기본적으로 느슨한 샘플을 생성할 수 있습니다.
- 코드를 읽고 이해하세요. 모든 리소스, 모든 권한을 한 줄씩 이해하세요. 이해하지 못하는 권한을 적용하지 마십시오.
- 계획을 세우고 감사하세요. plan/--check를 실행하고, AI로 출력을 검사하고, 삭제 및 재구축 라인을 표시합니다.
- 작고 뒤집을 수 있는 것을 적용하십시오. 한꺼번에 큰 변화를 구현하는 것이 아닌 작은 부분으로 큰 변화를 구현하세요. 모든 단계에서 돌아가는 길을 알아라.
- 상태를 보호합니다. 원격 암호화된 백엔드 및 잠금을 사용합니다. 절대로 누출되지 않는 상태.
세 개의 미니 케이스
사례 1 - 계획에 따라 데이터베이스가 복구되었습니다. 한 엔지니어는 AI로 생성한 Terraform 코드로 데이터베이스의 크기를 늘리고 싶었습니다. 그는 Terraform 계획 출력에서 "1이 변경됨"을 예상했지만 "1은 파괴하고 1은 추가"를 확인했습니다. 그가 선택한 매개변수는 전체 데이터가 삭제된다는 의미인 전체 업데이트가 아니라 재구축을 트리거하는 것이었습니다. 계획 제어가 구현되기 전에 되돌릴 수 없는 데이터 손실을 중지했습니다.
사례 2 - 느슨한 기본값에서 돌아갑니다. 한 팀은 AI에게 방화벽 코드를 요청했다. 예시를 실행하기 위해 AI는 "인터넷에 공개됨"을 의미하는 0.0.0.0/0이라는 간단한 규칙을 생성했습니다. 엔지니어는 코드를 읽는 동안 이를 발견하고 엔터프라이즈 IP 범위로만 액세스 범위를 좁혔습니다. 감사를 거치지 않고 구현된다면 데이터베이스는 전체 인터넷에 공개될 것입니다.
사례 3 — 상태 유출이 방지되었습니다. 후배 회원이 Terraform 문제를 해결하기 위해 terraform.tfstate 파일을 공개 도구에 그대로 붙여넣으려고 했습니다. 수석 엔지니어가 중지됨: 상태에 일반 텍스트 데이터베이스 비밀번호가 포함되어 있습니다. 대신 문제를 설명하는 해독된 요약이 공유되었으며 상태는 원격 암호화된 백엔드로 이동되었습니다.
복사 가능한 템플릿 4개
1) IaC 리소스 생성(보안 기본값):
귀하의 역할: 수석 클라우드 인프라 엔지니어. [클라우드, 예: AWS] for[도구, 예: Terraform] 코드를 생성합니다. 목적: [목적].보안 규칙: 공개(0.0.0.0/0) 액세스 OPEN;가장 좁은 권한으로 시작; 암호화를 켜십시오. 비밀을 변수로 추출하고 코드에 삽입하지 마세요. 삭제/재생성될 수 있는 설정을 확인하세요. 간단한 설명과 함께 각 소스를 설명하세요.
2) 계획 출력 감사:
아래는 [Terraform plan / Ansible check] 출력입니다. (1) 추가/변경/삭제할 리소스 수, (2) 데이터 손실 위험이 있는 "파기" 또는 "강제 교체" 행도 표시, (3) 예상치 못하거나 위험해 보이는 변경 사항을 나열하십시오. 출력: [계획]
3) IaC 코드 보안 검토:
보안을 위해 다음 IaC 코드를 검사하십시오. (1) 지나치게 광범위한 액세스/권한이 있습니까? (2) 암호화가 꺼져 있습니다. (3) 코드에 비밀이 포함되어 있습니까? (4) 공개적으로 사용 가능한 리소스가 있습니까? 각 결과에 대한 수정을 제안합니다. 코드: [마스킹된 코드]
4) 변경 사항을 안전한 부분으로 분할합니다.
저는 이 큰 인프라 변경[설명]을 한꺼번에 구현하고 싶지 않습니다. 다시 쉽게 돌아갈 수 있도록 작고 독립적인 단계로 나누세요. 각 단계에 대해: 어떤 변경 사항이 있는지, 계획에서 주의해야 할 사항은 무엇인지, 문제가 있는 경우 취소하려면 어떻게 해야 합니까?
약한 프롬프트 / 강한 프롬프트
약한 프롬프트:
AWS에 서버를 생성하는 Terraform 코드를 작성합니다.
지역, 규모, 보안, 네트워크, 암호화가 불분명합니다. AI는 가장 느슨하고 가장 명시적인 작동 기본값을 생성합니다. 프로덕션에 적용하면 취약점이 됩니다.
강력한 프롬프트:
귀하의 역할: 수석 클라우드 인프라 엔지니어. AWS eu-central-1: t3.small에서 Terraform을 사용하여 웹 서버를 정의합니다. 회사 IP 범위에서만(변수와 함께 제공하겠습니다) 포트 443이 열려 있고 디스크가 암호화되어 있으며 공개 액세스가 없으며 레이블이 필수입니다. 비밀은 변수에 공개됩니다. 코드 후 : 구현 전 계획에서 주의해야 할 선종류 3가지와 복귀경로에 대해 설명해주세요.
무대
위험
안전 난간
코드 작성
느슨한 기본값(공개)
가장 좁은 권한 + 읽기
계획/점검
자신도 모르게 삭제
계획검사, 마킹파기
적용
주요 일회성 변경
작고 가역적인 단계
국가 행정
유약 누출, 왜곡
원격 암호화된 백엔드 + 잠금
일반적인 실수
- 계획을 읽지 않고 신청합니다. 이 계획은 삭제 및 재구성을 예고합니다. 건너뛰면 데이터 손실이 불가피합니다.
- 느슨한 기본값을 알지 못합니다. AI 인스턴스는 종종 0.0.0.0/0을 생성합니다. 프로덕션으로 이동하면 전체 인터넷에 대한 오픈 소스를 의미합니다.
- 누출 상태. 상태 파일을 AI 또는 공개 저장소로 내보내면 일반 텍스트 비밀이 노출됩니다.
- 코드에 비밀을 삽입합니다. IaC 코드에 비밀번호를 쓰는 것은 코드 버전 기록에서 지속적인 유출입니다.
- 재구축을 업데이트로 착각합니다. 강제 교체 행을 무시하면 데이터베이스의 데이터가 손실됩니다.
팁: 검토를 위해 AI에 계획 출력을 제공하는 경우에도 계획 텍스트가 아닌 자신의 지식을 바탕으로 최종 결정을 내리십시오. AI는 계획을 요약하고 위험한 노선을 표시합니다. 그러나 "이 삭제가 허용됩니까?"라는 질문에 대한 대답은 비즈니스 상황에 따라 다릅니다.
요약하면
IaC는 수동 클릭이 아닌 버전 지정 가능 코드로 인프라를 관리하여 반복성과 문서화를 제공합니다. AI는 이 코드를 작성하고, 설명하고, 보안을 위해 검토하는 강력한 파트너입니다. 그러나 IaC의 힘은 위험합니다. 라인 하나가 전체 인프라를 휩쓸어버릴 수 있습니다. 선언적이라고 생각하고, 가장 좁은 권한으로 시작하고, 느슨한 기본값을 수정하고, 코드와 상태에서 비밀을 유지하세요. 가장 중요한 가드레일은 계획/확인 단계입니다. 삭제 및 재구축 행을 읽지 않고는 실행하지 마십시오. 상태를 암호화하고 잠긴 상태로 원격으로 유지합니다. 코드는 AI의 것이고 결정은 당신의 것입니다.
응용과제
소규모 인프라 대상(예: 단일 가상 머신 및 보안 규칙)을 선택합니다. 위의 "IaC 리소스 생성" 템플릿을 사용하여 AI에 안전한 기본값이 있는 코드를 요청하세요. "IaC 코드 보안 검토" 템플릿을 사용하여 코드를 다시 확인하고 느슨한 설정을 하나 이상 찾아보세요. 가능하다면 테스트 계정에서 plan/-check를 실행하고 "계획 출력 확인" 템플릿을 사용하여 출력을 검토하세요. 삭제 또는 재생성 줄이 있는지 확인하세요. 당신이 알아낸 사실과 국가를 어떻게 확보할 것인가를 6가지 항목으로 적어보세요.
체크리스트
- [ ] AI에 클라우드, 도구, 버전을 지정하고 가장 좁은 권한으로 코드를 요청했나요?
- [ ] 느슨한 기본값(0.0.0.0/0, 폐쇄형 암호화)에 대한 코드를 확인했습니까?
- [ ] 코드에 비밀을 삽입하는 대신 변수에 대한 비밀을 추출했습니까?
- [ ] 계획/점검 결과를 읽고 신청하기 전에 삭제 라인을 표시했습니까?
- [ ] "강제 교체"/라인 재구축의 데이터 손실 영향을 평가했습니까?
- 제가 [ ] 상태 파일을 원격 백엔드에 암호화, 잠금 상태로 보관하고 유출한 것은 아닌가요?