안녕하세요. 코미야입니다. 내부적으로 데이터를 설명해야 해서 여기에도 적겠습니다_bags.
다음은 요즘 데이터를 사용하는 방법_bags 소개합니다.
- LDAP에서 관리하지 않는 시스템 사용 OS 사용자 정보를 불러와 레시피로 추가함 2. SSL 인증서를 저장하고, 레시피에서 불러와서 템플릿에 설정하기 3. NTP 서버에서 정보를 불러와 템플릿에 설정하기 4. AWS 자격 증명 정보를 관리하여 다양한 스크립트에 삽입함 5. MySQL과 LDAP와 같은 비밀번호와 같은 계정 정보 관리 6. nginx, apache vhosts, 그리고 역할과 환경에 맞지 않는 업스트림 정보 관리 7. Ganglia의 머리/_node 및 클러스터에서 정보를 관리_name
0. 예비 설명
*전제 조건으로, chef-solo의 경우 "knife-solo_data_bag"라는 보석이 필요해서 넣을 수 있습니다. (보석 목록이 아니라면 보석 설치나 번들러에 넣어주세요.)
보관 및 점검 방법
암호화하고 싶지 않다면, vi, OK chef-repository/data_bags/arbitrary directory name/arbitrary directory name/arbitrary filename.json 같은 편집기에서 편집하세요. 내용은 json의 규칙을 따라야 하니, 구문을 json_verify로 CHK하세요.
cat data_bags/dirname/filename.json |json_verify 그리고 JSON is valid
암호화할 때는 먼저 EDITOR의 환경 변수를 ~/.bashrc로 설정하고, 암호화 키를 생성하고 설정해야 합니다. (*키는 프로젝트마다 다른 이미지이며, .gitignore로 작성해야 합니다.) 누수는 엄격히 금지되며, 제거하면 데이터가 보이지 않습니다. )
내보내기 편집기=vi
vi .chef/knife.rb
------ 언급하지 않았다---------------------
encrypted_data_bag_secret "data_bag_key"
-----------------------------------------
*코멘트를 언크하면, 키를 지정하지 않아도 knife 명령어로 생성하면 항상 암호화되어 있으니, vi에서 암호화 없이 처리하고 싶은 데이터 파일을 만들거나 주석을 달아야 합니다.
키가 필요하다면, (*.chef/knife.rb의 상대 경로는 chef 저장소 바로 아래를 의미합니다)
OpenSSL RAND -base64 512 > data_bag_key
Knife, Solo, 데이터 가방, 이름 생성 파일명 # 생성 (*기존 파일 덮어쓰기)
나이프 솔로 데이터 가방 파일 이름 편집 # 편집기에서 파일 편집
Knife Solo Data Bag show dirname filename # JSON contents
Knife solo data bag list # directory list
·주의할 점→ 가능한 한 bash나 실행 리소스를 사용하지 않는 것이 좋습니다. 템플릿 리소스를 사용해 주세요. bash를 사용할 때, data_bags에서 변수에 넣은 특수 문자가 확장되고 의도치 않은 값이 포함됩니다.
1. LDAP에서 관리하지 않는 시스템 애플리케이션의 OS 사용자 정보를 불러와 레시피로 추가하세요
이건 별일 아니니 포인터를 말씀해 주세요. Chef 2에서 기존 프로시저 레시피를 작성하기(사용자 생성) | DEVLAB 암호화되지 않은 패턴. (비밀번호는 미리 암호화되어 있습니다) 개별 사용자는 LDAP 관리이고, chef는 LDAP 클라이언트 구성 파일 배포 등을 담당합니다.
2. SSL 인증서 저장소와 레시피에서 불러와서 템플릿에서 설정하세요
저는 Apache와 NGINX로 하고 있지만, NGINX의 경우를 설명하겠습니다.
SSL 인증서를 저장하는 방법에 관해서는, 줄기 코드를 문자열로 변환한 값을 다음과 같이 붙여넣으세요. 인증서이자 키이기 때문에 당연히 암호화되어 로드됩니다.
cat cert.pem|perl -pe 's/n/n/g'
Knife solo data bag create SSL jenkins
Knife solo data bag edit SSL jenkins
Knife solo data bag show SSL jenkins
{
"id": "젠킨스",
"CRT": "-----인증서 시작-----nMIIDd~생략~",
"key": "~생략~",
"패스키": "~생략~",
"암호문": "호게호게"
}
레시피 쪽에서 어떻게 로드하나요 (일부 발췌문)
# 고양이 사이트-요리책/nginx/레시피/nginx_ssl_client.rb
---
# 변수에 data_type (≒role) 이름과 환경 이름을 넣어 데이터 파일 이름으로 만들었습니다
#role = ("#{node.roles}"[/[w_-]+/])
environment = ("#{node.environment}"[/w+/])
data_type = node['nginx']['data_type']
sslclientconf_type = 노드['nginx']['sslclientconf_type']
Datafile = "#{data_type}_#{environment}"
# 키 이름 등을 변수로 정의하세요 (role과 같은 속성에서 로드됨)
sslkeyfile = node['nginx']['sslkey1']
sslcrtfile = node['nginx']['sslcrt1']
clientcrtfile = node['nginx']['clientcrt']
clientcrlfile = node['nginx']['clientcrl']
sslkeydir = '/etc/nginx'
# 암호화된 데이터를 불러오고 변수로 정의data_bags
ssl = Chef::EncryptedDataBagItem.load("ssl", "#{datafile}")
sslcrtdata = ssl["crt"]
sslkeydata = ssl["key"]
ClientCrtdata = SSL["ClientCRT"]
#clientcrldata = ssl["clientcrl"]
# 이 레시피는 data_type 'if'에서 갈라져 나오는 레시피예요.
만약 "#{data_type}" == ""
#~생략~
그렇지 않으면
# 템플릿 자원을 사용해 놻등성을 유지할 수 있습니다
Template "#{sslkeydir}/#{sslcrtfile}" do
notities :restart, 'service[nginx]'
출처 "sslcrtfile.erb"
변수({
:sslcrtdata => sslcrtdata
})
끝
template "#{sslkeydir}/#{sslkeyfile}" do
notities :restart, 'service[nginx]'
출처 "sslkeyfile.erb"
변수({
:sslkeydata => sslkeydata
})
끝
Template "#{sslkeydir}/#{ClientCrtFile}" Do
notities :restart, 'service[nginx]'
출처 "clientcrtfile.erb"
변수({
:clientcrtdata => clientcrtdata
})
끝
---
템플릿 파일에 일어나는 일은 다음과 같습니다
# cat 사이트-쿡북/nginx/templates/default/sslcrtfile.erb
<%= @sslcrtdata %>
# cat 사이트-쿡북/nginx/templates/default/sslkeyfile.erb
<%= @sslkeydata %>
# cat 사이트-쿡북/nginx/templates/default/clientcrtfile.erb
<%= @clientcrtdata %>
변수가 @인 data_bags에서 불러와서 변수의 값을 설정할 수 있습니다.
3. NTP 서버에 정보를 불러와 템플릿에 설정하기
5. mysql, ldap 같은 비밀번호와 같은 계정 정보 관리
이것도 가리켜서 미안해. 셰프 솔로 레시피 커스터마이징 기록 | DEVLAB 참고용.
4. AWS 자격 증명을 관리하고 다양한 스크립트에 삽입합니다
물론 암호화하세요. SSL 인증서의 경우 로딩 방식과 임베딩 방식이 크게 다르지 않으니 생략하겠습니다.
생성, 편집, 확인은 다음과 같습니다.
# 칼 솔로 데이터 가방 AWS KEYS 생성 배포
# 칼 솔로 데이터 가방 편집 AWSkeys 배치
# 칼 솔로 데이터 가방 쇼 AWSkeys 배치
{
"id": "배치",
"aws_access_key_id": "Axxxxxxxxxxxxxxxxxx",
"aws_secret_access_key": "oxxxxxxxxxxxxxxx",
"지역": "US-xxxx-2"
}
예를 들어, 로드 방법은 다음과 같습니다. (스크립트를 설치하지 않고 변수를 전달합니다)
cookbook_file "/usr/local/sbin/renamehost"는
출처 "renamehost"
소유주 '루트'
그룹 '루트'
모드 0750
끝
오하이 "재장전" 두
플러그인 "hostname"
끝
# 환경에서 해당 AWS 계정을 얻으세요
env_rank = data_bag_item("master_data", "env_rank")
rank_awsaccount = data_bag_item("master_data", "rank_awsaccount")
환경 = node.chef_environment
랭크 = env_rank[환경]
awsaccount = rank_awsaccount[순위]
# 계정에 맞는 자격 증명을 받으세요
awscredential = Chef::EncryptedDataBagItem.load("awskeys", "deploy_#{awsaccount}")
aws_access_key_id = awscredential["aws_access_key_id"]
aws_secret_access_key = awscredential["aws_secret_access_key"]
aws_region = awscredential["region"]
role = ("#{node.roles}"[/[\w_-]+/])
"exec-renamehost" 하는 걸 빚어보세요
not_if { node[:hostname] =~ /^#{role}/ }
알림 :reload, "ohai[reload]", :즉시
알림 :restart, "service[rsyslog]", :즉시
코드 <-EOC
/usr/local/sbin/renamehost `echo #{aws_access_key_id} #{aws_secret_access_key} #{aws_region}`
EOC
end
include_recipe "base_setting::hosts"
6. nginx와 apache에서 vhost와 upstream 같은 역할과 환경에 맞지 않는 정보를 관리하세요
레시피는 다음과 같습니다
ngxdata = data_bag_item('nginx',"#{datafile}")
서버이름 = ngxdata['서버이름1']
업스트림 = NGXDATA['upstream1']
Upstreamport = ngxdata['upstreamport']
템플릿 "/etc/nginx/conf.d/ssl.conf"
출처 "#{ROLE}/SSL.CONF.ERB"
경로 '/etc/nginx/conf.d/ssl.conf'
백업 5
소유주 '루트'
그룹 '루트'
모드 '0644'
행동 :Create
notities :restart, 'service[nginx]'
변수({
:서버이름1 => 서버네임,
:upstream1 => 상류,
:upstreamport => upstreamport
})
끝
json 파일은 특별히 암호화되어 있지 않아요(git에서 보기 어렵습니다).
# 고양이 data_bags/nginx/nginx-hoge_test1.json
----
{
"id": "nginx-hoge_test1",
"서버이름1": "exsample.hoge.net",
"업스트림1": "internal-ELB-int-hoge-test1-xxxxxxx.us-xxxx-2.elb.amazonaws.com",
"업스트림포트": "80"
}
----
**역할과 환경은 다양하며, 어느 한쪽에 맞지 않으면 어쩔 수 없이 데이터를 _bags 넣을 수밖에 없습니다.
7. 신경절 중_node 및 과_name 정보 관리
이건 6과 크게 다르지 않으니 생략하겠습니다
참고문헌:
데이터백 사용에 관한 전체 이야기 (1) - 요헤이노 니치리 성신 [chef] 데이터 가방 사용법 | IT 인프라 잡다한 노트북 데이터 가방을 사용해 JSON 데이터를 암호화한 기록 - Chef에 게시하지 말고 싶지 않은 데이터 가방 - 안녕 인터넷. 참고용으로. 읽어주셔서 감사합니다. **