Требуется разрешение c sudoers для ansible пользователей для установки прав - PullRequest
0 голосов
/ 18 марта 2020

В настоящее время я использую ansible для подготовки и настройки нашей aws среды в клиентской среде. Пользователь s sh имеет значение "ansible", доступное для всех экземпляров ec2, работающих в centos, amazon linux, redhat или ubuntu.

Работает нормально, пока я держу ansible Пользователь уполномочен так же, как root. В sudoers, если я упомяну:

ansible ALL=(root)      NOPASSWD: ALL

Но это неприемлемое решение, поскольку ansible нужно давать только все, что нужно.

Например, установка агента cloudwatch на centos , он выполняет следующие шаги:

      - name: install agent
        yum:
          name: /tmp/aws-cw-agent/amazon-cloudwatch-agent.rpm
          state: present
        become: yes

      - name: setup agent
        copy:
         src: amazon-cloudwatch-agent.json
         dest: "{{aws_cw_root}}/etc/amazon-cloudwatch-agent.json"
        become: yes

      - name: configure agent
        shell: |
            ./amazon-cloudwatch-agent-ctl \
                -a fetch-config \
                -m ec2 \
                -c file:"{{ aws_cw_root }}/etc/amazon-cloudwatch-agent.json" \
                -s
        args:
            chdir: "{{ aws_cw_root }}/bin"
        become: yes  

      - name: restart agent
        service: 
          name: amazon-cloudwatch-agent
          state: restarted
        become: yes

Но если я даю явное разрешение, как показано ниже в sudoers для ansible пользователей, он завершается ошибкой:

ansible ALL=(root)      NOPASSWD: /usr/bin/yum install -y amazon* 
ansible ALL=(root)      NOPASSWD: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl *
ansible ALL=(root)      NOPASSWD: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent* 
ansible ALL=(root)      NOPASSWD: /bin/systemctl restart amazon-cloudwatch-agent 

Он завершается неудачей со следующим сообщением:

16:59:03 Running yum as the backend for the yum action plugin
16:59:04 Using module file /usr/lib/python3.6/site-packages/ansible/modules/packaging/os/yum.py
16:59:04 Pipelining is enabled.
16:59:04 <10.1.10.2> ESTABLISH SSH CONNECTION FOR USER: ansible
16:59:04 <10.1.10.2> SSH: EXEC sshpass -d10 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'User="ansible"' -o ConnectTimeout=10 -o ServerAliveInterval=60 -o ServerAliveCountMax=10 -o ControlPath=/home/jenkins/.ansible/cp/09cfb0f6cd 10.1.10.2 '/bin/sh -c '"'"'sudo -H -S -n  -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-wwwwazktxxxxxxxxectin ; /usr/bin/python'"'"'"'"'"'"'"'"' && sleep 0'"'"''
16:59:04 Escalation succeeded
16:59:04 <10.1.10.2> (1, b'', b'OpenSSH_7.9p1, OpenSSL 1.1.1d  10 Sep 2019\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug2: resolve_canonicalize: hostname 10.1.10.2 is address\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 112\r\ndebug3: mux_client_request_session: session request sent\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\n')
16:59:04 <10.1.10.2> Failed to connect to the host via ssh: OpenSSH_7.9p1, OpenSSL 1.1.1d  

16:59:04 fatal: [qa-pilot-vm]: FAILED! => {
16:59:04     "changed": false,
16:59:04     "module_stderr": "OpenSSH_7.9p1, OpenSSL 1.1.1d  10 Sep 2019\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug2: resolve_canonicalize: hostname 10.1.10.2 is address\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 112\r\ndebug3: mux_client_request_session: session request sent\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\n",
16:59:04     "module_stdout": "",
16:59:04     "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
16:59:04     "rc": 1 

Это показывает, что playbook ломается на установочной части yum, чего не должно быть, потому что у него есть соответствующие права.

Фактически, если я добавлю ниже детали в sudoers, это также не работает, что в идеале мне следует не использовать. Но я попробовал, это не сработало, что должно было работать как и для всех пакетов.

ansible ALL=(root)      NOPASSWD: /usr/bin/yum install -y * 

Есть идеи, какие права в sudoers будут работать для ansible пользователя?

...