詳細検索

Chef 2에서 기존 절차에 대한 레시피 작성 (사용자 제작)

아바타
글쓴이 komi

Chef 2에서 기존 절차에 대한 레시피 작성 (사용자 제작)
日本語에서 번역 • 원문 보기

안녕하세요. 플랫폼의 코미야입니다.

이전 기사에서 이어서 셰프 기사에 대해 사과드립니다.

데이터/_bags 사용자 관리를 준비하는 것.

당분간은 전에 여기 글을 썼지만, 관련 정보가 모여 있으면 좋을 것 같아 부분적으로 다시 올리려고 합니다.

data_bags는 LDAP와 유사한 기능으로 데이터 검색과 같이 관리할 수 있는 도구입니다.
chef-server를 사용하면 서버와 통신하여 데이터를 가져오고 반영할 수 있습니다.
이번이 Chef-sol로이기 때문에, 데이터를 로컬 파일에 준비하고 반영할 예정입니다.

참고문헌:
사용자가 많고 계정을 자주 추가하고 변경한다면, 아래 링크에 나와 있는 것처럼 data_bags를 사용해 활성화 및 비활성화를 관리하는 것이 좋습니다.
chef-data-bag 사용법

[shell]# cd ; cd chef-repo/data_bags # mkdir 사용자; CD 사용자 # vi xxx-op.json // xxx-op.json { "id" : "xxx-op", "groups": [ "xxx-op","wheel" ], "uid": 1000, "username" : "xxx-op", "home" : "/home/xxx-op", "shell" : "/bin/bash", "password" : "$1$Ka.Mw69U$TT5HRfSe7xxxxx" }

# vi yyy-op.json // yyy-op.json { "id" : "yyy-op", "groups": [ "yyy-op","wheel" ], "uid": 500, "username" : "yyy-op", "home" : "/home/yyy-op", "shell" : "/bin/bash", "password" : "$1$Ka.Mw69U$TT5HRfSe78Pxxxxx" }

# vi dev.json // dev.json { "id" : "dev", "groups": [ "dev","wheel" ], "uid": 501, "username" : "dev", "home" : "\/home\/dev", "shell" : "\/bin\/bash", "password" : "$1$S/q25RbR$oO7pCoAjBWxxxxx" }[/shell]

다음 명령어로 비밀번호를 생성합니다
[shell]# openssl passwd -1[/shell]

[shell]# 칼 단독 데이터 가방 표시 사용자[/shell] 데이터가 표시되는지 확인해 주세요

  • MySQL에서 사용자 정의를 암호화하기

*노드와 역할에 대해 비밀번호를 일반 텍스트로 정의하는 것은 안전하지 않으며, 각 노드별로 기록하는 것은 현명하지 않습니다.
 그럼 키로 암호화할 수 있는 데이터백을 사용해 봅시다
 암호화는 knife-sol로만 사용할 수 없는 것 같지만, knife-solo_data\\를 _bag 설치하면 사용할 수 있을 거예요.

[shell]# openssl rand -base64 512 | tr -d '\r\n' > /etc/chef/encrypted_data_bag_secret # chmod 400 encrypted_data_bag_secret # CD /ROOT/CHEF-REPO # 칼 솔로 데이터 가방 MySQLUsers root 생성 --secret-file ./encrypted_data_bag_secret 편집기가 열리면 다음 입력이 있습니다 { "id": "root", "user": "root", "pass": "xxxxxxx", "host": "localhost", "privileges": "all" }

# 나이프 솔로 데이터 가방 생성 mysqlusers repl --secret-file ./encrypted_data_bag_secret 편집기가 열리면 다음 입력이 있습니다 { "id": "repl", "user": "repl", "pass":"xxxxxxx", "host":"172.20.28.%", "privileges": ["\\:replication slave", "\\:replication client"] }

# 나이프 솔로 데이터 가방 mysqlusers xxx_admin --secret-file ./encrypted_data_bag_secret 편집기가 열리면 다음 { "id": "xxx_admin", "user": "xxx_admin", "pass": "xxxxxxx", "host":"172.20.28.%" "privileges": "all" }

# 나이프 솔로 데이터 가방 생성 mysqlusers zabbix --secret-file ./encrypted_data_bag_secret 편집기가 열리면 다음 입력이 있습니다 { "id": "zabbix", "user": "zabbix", "pass": "xxxxxxx", "host": "localhost", "privileges": "all" }

체크 # 나이프 솔로 데이터 가방 표시 mysqlusers 표시 # 나이프 솔로 데이터 가방 표시 mysqlusers repl --secret-file ./encrypted_data_bag_secret # 나이프 솔로 데이터 가방 표시 mysqlusers root 표시 --secret-file ./encrypted_data_bag_secret # 나이프 솔로 데이터 가방 표시 mysqlusers xxx_admin --secret-file ./encrypted_data_bag_secret # 나이프 솔로 데이터 가방 표시 mysqlusers zabbix --secret-file ./encrypted_data_bag_secret[/shell] 데이터가 표시되는지 확인해 주세요
다른 명령어들은 아래에서 확인할 수 있습니다.
[shell]# 칼 솔로 데이터 가방 --도와줘[/shell]
chef-server를 이용한 부트스트랩 파일에서 데이터백 키를 클라이언트 호스트에 전달하는 것이 가능한 것으로 보입니다.
아마도 knife-solo_data_bag 때문에 knife solo cook 호스트네임을 사용할 때 부트스트랩 파일을 지정할 필요가 없어 보였습니다.
방랑자 쪽에서는 어떻게 해야 할지 잘 모르겠어요.

다음으로, 레시피에서 data_bags에 등록된 데이터를 추출해 보겠습니다. data_bag('users')는 data_bags/users 디렉터리에 배치된 사용자 데이터 객체의 ID 목록을 제공합니다.
데이터백에서 data_bag_item('users', id)에 지정된 ID를 가진 객체를 가져올 수 있습니다.

참고문헌:
[[셰프] 데이터 가방 사용] (http://tech.blog.piyo.org/2012/06/19/chef-data-bag%E6%B4%BB%E7%94%A8%E6%B3%95/)
Chef's Data Bag으로 사용자 생성 자동화

·로그인/_users 레시피 작성
[shell]cd site-cookbooks/login_users/recipes # vi default.rb data_ids = data_bag('users')

데이터_ids.각각은 |id| u = data_bag_item('users', id) 사용자 u['username'] do home u['home'] shell u['shell'] uid u['uid'] 비밀번호 u['password'] 끝

그룹 '휠' 수행 그룹_name '휠' 멤버 ['root', 'xxx-op', 'yyy-op', 'dev'] 행동 :수정 끝

cookbook_file '/home/dev/.bash_profile' do source 'home/dev/.bash_profile' 소유자 'dev' 그룹 'dev' 모드 0644 end[/shell] 사용자 리소스가 포함된 하위 그룹을 지정할 수 없어서 그룹 리소스를 사용했습니다.

[shell]echo "umask 002" >> /home/dev/.bash_profile tail /home/dev/.bash_profile mkdir -p /root/chef-repo/site-cookbooks/login_users/files/default/home/dev cp -p /home/dev/.bash_profile /root/chef-repo/site-cookbooks/login_users/files/default/home/dev/[/shell]

・MySQL 사용자 생성

주석
Chef에 MySQL 설치하기 오늘 시작하기Chef에서 mysql 사용자 및 데이터베이스 관리 chef 노출되고 싶지 않은 JSON 데이터 관리 DataBags 사용 데이터 암호화 기록 Chef에서 MySQL 비밀번호 처리

opscode에서 mysql/database 요리책을 구해보려고 했는데,
하지만 효과가 없었고, 제가 직접 작성하지 않은 레시피의 오류를 찾기 어려워서 비판하기로 했습니다.

제가 시도해본 것은 다음과 같습니다→ mysql_database_user 리소스 매뉴

레시피는 다음과 같습니다
[shell]# vi site-cookbooks/mysqld/recipes/mysql-users.rb #include_recipe "openssl" #include_recipe 'database::mysql'

#mysql_connection_info = {:host => "localhost", # :username => 'root', # #:p assword => node['mysql']['server_root_password']} # :p assword => ''}

#mysql_database "xxx_db" do # connection mysql_connection_info # action :create #end

odbadm_data = Chef::EncryptedDataBagItem.load("mysqlusers","odb_admin") root_data = Chef::EncryptedDataBagItem.load("mysqlusers","root") repl_data = Chef::EncryptedDataBagItem.load("mysqlusers",") Repl") MyUser_o = OdBadm_data["User"] MyPass_o =OdBadm_data["pass"] MyUser_ro = root_data["User"] MyPass_ro =root_data["pass"] myuser_re = Repl_data["User"] MyPass_re =Repl_data["pass"] #mysql_database_user "#{user}" do # 연결 MySQL_connection_info # 비밀번호 "#{password}" # 데이터베이스_name "*" # 호스트 "[#{host} , %, localhost]" # 권한 [:all] # action [:create, :grant] #end # mysqlconn = "mysql -u root" 스크립트 "create_msql_odbadm" 하지 않아요_if "ls /root/.path_to_file" #not_if "#{mysqlconn} -p #{mypass_ro} -e 'select count(*) mysql.user where user=\'repl\';'" 인터프리터 "bash" 사용자 "root" 코드 <-EOL #{mysqlconn} < EOF grant all privileges on *.* to #{myuser_o}@'%' identified by "#{mypass_o}"; grant all privileges on *.* to #{myuser_o}@'10.0.0.%' identified by "#{mypass_o}"; grant all privileges on *.* to #{myuser_o}@'localhost' identified by "#{mypass_o}"; grant all privileges on *.* to #{myuser_ro}@'10.0.0.%' identified by "#{mypass_ro}"; grant all privileges on *.* to #{myuser_ro}@'localhost' identified by "#{mypass_ro}"; grant replication slave, replication client on *.* to #{myuser_re}@'10.0.0.%' identified by "#{mypass_re}"; grant replication slave, replication client on *.* to #{myuser_re}@'localhost' identified by "#{mypass_re}"; drop database test; delete from mysql.user where password=''; flush privileges; EOF EOL end

script "create_pfile" do not_if 'ls /root/.path_to_filed' interpreter "bash" user "root" code <-EOL echo="" "#{mypass_ro}"=""> /root/.path_to_file chown 400 /root/.path_to_file EOL 종료[/shell]
지금은 여기까지입니다. 시청해 주셔서 감사합니다.
다음번에는 웹서버 레시피를 사용하세요. </-EOL>

Related Articles