변수 변수 및 볼트 사용 방법

ExpressVPN이 Ansible을 활용하는 방법

ExpressVPN에서 Ansible을 광범위하게 사용하는 방법

우리의 개발 팀은 독립적으로 작동합니다. 즉, 팀은 전체 수명주기 동안 제품을 소유합니다. 이러한 설정은 Ansible을 관리하는 중앙 집중식 그룹이 아니라 회사의 여러 팀에서 얻은 지식의 수집에서 Ansible 이해가 이루어짐을 의미합니다..

분산 된 인력은 팀에게 많은 유연성과 이동성을 제공하지만 개인에게 많은 도구에 대해 많은 것을 알도록 압력을가합니다..

지식을보다 쉽게 ​​공유하고 도구를 올바르게 사용하기 위해 구성 관리 및 서버 운영에 Ansible을 사용하는 방법을 표준화하기로 결정했습니다..

이 블로그는 규모에 따른 운영 학습, 업무 방식에 대한 고찰 및 이러한 상황에서 Ansible을 관리하는 방법을 다룹니다..

가능한 문서

바로 들어 가자! Ansible에 대한 문서는 특히 엔드 투 엔드 문서와 관련하여 원하는 사항을 남겨 둡니다 (예 : 지점 A에서 지점 Z로 어떻게 이동합니까?)..

우리가 정기적으로 직면하는 몇 가지 질문은 다음과 같습니다. “가변 우선 순위는 어떻게 작동합니까?”및 “Ansible Vault는 어떻게 맞습니까?”

두 문제 모두 독립적으로 (여기서 여기에) 잘 설명되어 있으며 Ansible Variables 페이지에는 우선 순위에 대한 섹션이 명시 적으로 나와 있지만 두 부분의 교차 부분은 간단히 언급 할뿐입니다. 문제는 변수와 볼트에 대한 문서 사이에 링크가 없기 때문에 사용자가 두 사람이 서로 어떻게 교차하는지 알아낼 수 있다는 인상을줍니다..

오늘은 Variables와 Vault의 교차점과 모범 사례를 다루겠습니다..

Ansible Vault 파일을 사용할 수있는 대상

요약하면 : Vault 설명서에는 Ansible 폴더 내의 모든 것을 Vault 파일로 암호화 할 수 있습니다., Ansible은 재생에 이러한 파일이 포함되어있을 때마다 “영리하게”해독하려고 시도합니다. 허. 멋있는!

변수에 대한 문서는 Vault 파일에 대해서는 전혀 언급하지 않았으며 Vault가 변수 파일 용으로 설계 되었기 때문에 이상합니다. 그래서 그들은 어떻게 함께 맞습니까? 주의해야합니다 Vault 파일 자체는 변수 처리 또는 우선 순위에 특별한 의미가 없습니다., 유연성이 많이 있습니다. 그러나 잠재적으로 이것은 올바르게 사용하는 방법에 대한 충분한 정보를 제공하지 않습니다..

Ansible을 사용하지 않는 방법당신은 잘못하고있어.

간단한 Ansible 폴더의이 예제를 보자 :

.
├── group_vars
│ ├── 모두
│ ├── 생산
│ └── 준비
├── ansible.cfg
├── 인벤토리
└── playbook.yml

언뜻보기 에이 설정은 좋아 보입니다. 이것은 문서를 읽으면 생성되는 비교적 일반적인 구조입니다. 관찰자는 group_vars의 준비 및 프로덕션 파일이 Vault라고 가정 할 수 있지만 실제로는 아니지만 실제로 문제가됩니다..

이제 “all”파일은 준비 및 프로덕션 Vault 파일을 다른 비밀번호로 암호화했기 때문에 Vault 파일이 될 수 없습니다. 또한 환경 당 group_vars 파일에는 환경 당 하나의 파일로 제한되므로 비밀과 비 비밀의 혼합이 포함되어야 함을 의미합니다..

이로 인해 Ansible 문서에서 Vault에 대한 소개를 읽은 후 약간 외삽 한 경우 처음에 “all”의 내용을 복사 한 다음 수정하여 프로덕션 / 스테이징 볼트를 생성했을 수 있습니다..

즉, “all”파일은 다음과 같습니다.

데이터 베이스:
사용자 이름 : default_user
비밀번호 : false

super_important_var_that_should_be_one : 1

프로덕션 Vault 파일은 다음과 같습니다.

데이터 베이스:
사용자 이름 : produser
비밀번호 : supersecretpasswordnoonecansee

super_important_var_that_should_be_one : 1

걱정하지 마세요. 실제 프로덕션 비밀번호가 아닙니다. 다시 확인했습니다.

위의 내용은 분명하지 않은 이유로 위험합니다. 예를 들어, 프로덕션 기본값을 변경하지 못하거나“all”파일의 이름이 잘못되어 전혀 포함되지 않을 수도 있습니다! (이것은 지난 주에 발생한 정전의 근본 원인입니다.)

모범 사례 : Ansible Vault 파일을 안전하게 사용하는 방법

모범 사례 페이지에 설명 된대로 파일을 Vault 파일로 만들면 파일의 내용이 모호해 지므로 큰 단점이 있습니다. Vault 파일에서 변수를 명시 적으로 해독하지 않으면 검색 할 수 없습니다. 이 시스템은 Ansible 구성을보고있는 사람이 Vault 암호 (코드 검토에 끔찍함)를 알지 못하면 이러한 파일 내부에 무엇이 있는지 모릅니다. 따라서 Vault 파일에 가능한 한 적은 수의 변수를 넣는 것이 좋습니다. (즉, Vault 파일에만 비밀을 입력하십시오!)

따라서 발로 자신을 쏠 수없는 구조를 살펴 보겠습니다.

.
├── group_vars
│ ├── 모두
│ │ └── vars.yml
│ ├── 생산
│ │ ├── vars.yml
│ │ └── vault.yml
│ └── 준비
│ └── vault.yml
├── ansible.cfg
├── 인벤토리
└── playbook.yml

모범 사례 문서는 “간접 레이어”를 사용하도록 권장합니다. 즉, Vault 파일의 모든 변수를 플레이 북에서 참조되는 변수로 템플릿 화해야합니다. 또한 볼트 변수 앞에“vault_”를 붙여서 all / vars.yml이 다음과 같이 표시 될 것을 권장합니다.

데이터 베이스:
사용자 이름 : default_user
비밀번호 :“{{vault_database_password}}”

super_important_var_that_should_be_one : 1

프로덕션 /vars.yml은 다음과 같습니다.

데이터 베이스:
사용자 이름 : produser

그리고 production / vault.yml 파일은 다음을 포함해야합니다 :

vault_database_password : supersecretpasswordnoonecansee

이 수정 된 구조에는 몇 가지 이점이 있습니다. 우선, 코드 검토를 수행하는 경우 (제발!) 검토자가 변경 한 내용과 구성에서 추가 및 제거 된 사항 (거의 모든 부분)을 볼 수 있음을 의미합니다. 이 구조를 사용하면 검토자는 Vault에서 수동으로 암호를 해독하고 디스크에 저장하고 이전 버전과 비교해야하는 전체 파일 변경 사항 만 볼 수는 없습니다..

더 중요한 것은 Ansible이 vars가 누락 된 경우 var를 렌더링하더라도 실패합니다. vault_database_password Vault 내 변수는 Vault 파일에서 탭을 가깝게 유지하지 않으면 발생할 수있는 최소한의 문제를 방지합니다..

이 패턴을 고수하더라도 환경 내 호스트 그룹이든, 변수를 설정하는 전체 환경이든, 심지어 “all”폴더이든 상관없이 동료는 내부 및 외부에 무엇이 있는지 혼동하지 않습니다. 금고.

그게 다야, 우리는 그것이 당신에게 도움이 되었기를 바랍니다.!