Ansible을 사용하여 AWS IAM 사용자 생성 및 관리

이제 IAM 사용자부터 시작하겠습니다. 1부에서 언급했듯이 IAM은 AWS(루트) 계정을 생성한 후 가장 먼저 필요한 서비스입니다. AWS로 하고 싶은 일에 루트 계정을 사용하고 다른 사람에게 루트인 기본 계정을 공유하여 함께 사용하는 것은 정말 안전하지 않습니다. 하지마!

이제 로그인 프로필인 자격 증명과 액세스 키(선택 사항)와 함께 IAM 사용자를 생성하겠습니다. 그런 다음 회사에 새 직원이 있고 AWS를 통해 액세스해야 하기 때문에 일부 IAM 사용자를 생성해야 하는 경우에 대비합니다. 여기서 우리는 ansible을 사용할 것입니다. 이것이 여기서 ansible을 사용하는 주요 포인트입니다. 한 번의 클릭으로 여러 사용자를 생성하는 여러 작업에 사용할 수 있습니다! 와우, 어떻게 되어가나요? 변수와 태그를 가지고 놀기만 하면 됩니다!

IAM 사용자는 community.aws.iam_user 모듈을 사용합니다.


1. 사용자 생성

    - name: create user
      community.aws.iam_user:
        name: "{{ item }}"
        state: present
      loop: "{{ user_new }}"
      tags:
        - iam_user_new ### create user + pass + key
        - iam_user_only ### create user only
        - iam_user_key ### create user + key
        - iam_user_pass ### create user + pass


이 작업은 새 사용자를 생성합니다. 보시다시피 저는 변수user_new와 4개의 태그를 사용합니다. 사용상의 이점을 말씀드리겠습니다.
  • 루프는 변수의 여러 값에 대해 동일한 작업을 재생합니다. 인벤토리로 돌아가서 변수를 정의하겠습니다. 작업보다 인벤토리에서만 값을 변경하는 것이 좋습니다. 그래서, 그것은 당신을 혼란스럽게 만들지 않을 것입니다. 이제 인벤토리에 다음과 같은 추가 변수가 있어야 합니다.

  •       user1: nurul
          user2: rama
          user3: beny
          user4: rahman
          user_new:
            - "{{ user1 }}"
            - "{{ user2 }}"
            - "{{ user3 }}"
            - "{{ user4 }}"
          user_key:
            - { name: "{{ user1 }}" }
            - { name: "{{ user2 }}" }
            - { name: "{{ user3 }}" }
            - { name: "{{ user4 }}" }
          user_pass:
             - { name: "{{ user1 }}", pass: "{{ temp_pass }}" }
             - { name: "{{ user2 }}", pass: "{{ temp_pass }}" }
             - { name: "{{ user3 }}", pass: "{{ temp_pass }}" }
             - { name: "{{ user4 }}", pass: "{{ temp_pass }}" }
    


  • 태그를 사용하면 실행할 작업을 자유롭게 선택할 수 있습니다. 예를 들어 자격 증명 없이 사용자만 만들고 싶습니다. 그래서 저는 그냥 iam_user_only 태그를 사용하겠습니다. 그런 다음 비밀번호만으로 사용자를 만들고 싶습니다. iam_user_pass 태그를 사용하겠습니다. 그것이 우리가 태그를 가지고 노는 방법입니다.



  • 2. 사용자 액세스 키 생성

        - name: create user's key
          shell: 'aws iam create-access-key --user-name "{{ item.name }}" >> key_list.txt'
          loop: "{{ user_key }}"
          tags:
            - iam_user_new
            - iam_user_key
            - iam_user_key_only
    
        - name: list user's key
          shell: 'cat key_list.txt | grep "UserName\|AccessKeyId\|SecretAccessKey" | sed "s/,$//"'
          register: list_key
          tags:
            - iam_user_new
            - iam_user_key
    
        - debug:
            var: list_key.stdout_lines
          tags:
            - iam_user_new
            - iam_user_key
    


    액세스 키는 쉘 명령과 결합합니다. 실제로 그것을 생성하기 위한 모듈이 있습니다. 그것은 community.aws.iam_access_key이며 다음과 같이 보입니다.

        - name: create user's key
          community.aws.iam_access_key:
            user_name: "{{ item }}"
            state: present
          loop: "{{ user_key }}"
          tags:
            - iam_user_new
            - iam_user_key
    


    그러나 액세스 키와 비밀 액세스 키 정보도 필요하므로 첫 번째 옵션을 사용하겠습니다. 쉘 명령으로 이동하면 두 번째 옵션이 출력을 제공하지 않고 CLI를 사용하기 때문에 다운로드할 수 없습니다. 콘솔에서 할 수 있는 것처럼 직접 키 파일에 액세스합니다. 그래서 3가지 작업을 결합하여 액세스 키를 생성하고 출력을 파일에 저장하고 필요한 값을 표시합니다. 그래서!


    3. 사용자 비밀번호 생성

        - name: create user's password
          command: aws iam create-login-profile --user-name "{{ item.name }}" --password "{{ item.pass }}" --password-reset-required
          loop: "{{ user_pass }}"
          tags:
            - iam_user_new
            - iam_user_pass
    


    이제 iam_user_new 태그를 사용하여 위의 모든 작업으로 플레이북을 실행하여 암호 및 액세스 키와 함께 4명의 새 사용자를 생성하겠습니다.

    $ ansible-playbook -i host.yml iam.yml -t iam_user_new
    
    PLAY [iam] *************************************************************************
    
    TASK [create user] *****************************************************************
    changed: [localhost] => (item=nurul)
    changed: [localhost] => (item=rama)
    changed: [localhost] => (item=beny)
    changed: [localhost] => (item=rahman)
    
    TASK [create user's key] ***********************************************************
    changed: [localhost] => (item={'name': 'nurul'})
    changed: [localhost] => (item={'name': 'rama'})
    changed: [localhost] => (item={'name': 'beny'})
    changed: [localhost] => (item={'name': 'rahman'})
    
    TASK [list user's key] *************************************************************
    changed: [localhost]
    
    TASK [debug] ***********************************************************************
    ok: [localhost] => {
        "list_key.stdout_lines": [
            "        \"UserName\": \"nurul\"",
            "        \"AccessKeyId\": \"AKIAZ44MXOFLL5MRZWON\"",
            "        \"SecretAccessKey\": \"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\"",
            "        \"UserName\": \"rama\"",
            "        \"AccessKeyId\": \"AKIAZ44MXOFLL36LYJKV\"",
            "        \"SecretAccessKey\": \"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\"",
            "        \"UserName\": \"beny\"",
            "        \"AccessKeyId\": \"AKIAZ44MXOFLCMV33DHV\"",
            "        \"SecretAccessKey\": \"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\"",
            "        \"UserName\": \"rahman\"",
            "        \"AccessKeyId\": \"AKIAZ44MXOFLDJASSSVD\"",
            "        \"SecretAccessKey\": \"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\""
        ]
    }
    
    TASK [create user's password] ******************************************************
    changed: [localhost] => (item={'name': 'nurul', 'pass': 'passwordup2U!'})
    changed: [localhost] => (item={'name': 'rama', 'pass': 'passwordup2U!'})
    changed: [localhost] => (item={'name': 'beny', 'pass': 'passwordup2U!'})
    changed: [localhost] => (item={'name': 'rahman', 'pass': 'passwordup2U!'})
    


    참고*: 다른 사람에게 액세스 키를 보여주지 마십시오. 이것은 나중에 삭제할 예시일 뿐입니다.

    위의 작업을 실행하면 4명의 사용자가 비밀번호와 액세스 키를 갖게 됩니다. 사용자마다 비밀번호 재설정이 필요하다는 것을 기억하고 확인합시다!




    효과가있다. 비밀번호를 입력하면 비밀번호 재설정 안내가 나옵니다.

    4. 사용자 생성 및 관리형 정책 첨부
    사용자를 생성하는 것 외에도 사용자를 생성하고 관리형 정책을 연결할 수도 있습니다. 글쎄요, 이것은 최선의 방법은 아니지만 여기서 우리가 ansible로 이것을 할 수 있다는 것을 보여드리겠습니다.

    다음 변수를 인벤토리에 추가합니다.

          user_new_policy:
            - { name: "{{ user5 }}", policy: arn:aws:iam::aws:policy/IAMFullAccess }
    


    작업:

        - name: create a user and attach a managed policy
          community.aws.iam_user:
            name: "{{ item.name }}"
            managed_policies: "{{ item.policy }}"
            state: present
          loop: "{{ user_new_policy }}"
          tags:
            - iam_user_new_policy
    


    그런 다음 iam_user_new_policy 태그가 있는 플레이북을 실행하겠습니다.

    $ ansible-playbook -i host.yml iam.yml -t iam_user_new_policy
    
    PLAY [iam] *************************************************************************
    
    TASK [create a user and attach a managed policy] ***********************************
    changed: [localhost] => (item={'name': 'aira', 'policy': 'arn:aws:iam::aws:policy/IAMFullAccess'})
    


    자, 이제 IAMFullAccess 정책이 연결된 aira라는 사용자가 한 명 더 있습니다. 점검 해보자!
  • 사용자 aira에 대한 액세스 키를 생성합니다. 변수를 업데이트하고 작업에 대한 특정 태그를 사용하는 것을 잊지 마십시오.

  •       user_key:
    #        - { name: "{{ user1 }}" }
    #        - { name: "{{ user2 }}" }
    #        - { name: "{{ user3 }}" }
    #        - { name: "{{ user4 }}" }
            - { name: "{{ user5 }}" }
    



    $ ansible-playbook -i host.yml iam.yml -t iam_user_key_only
    
    PLAY [iam] *************************************************************************
    
    TASK [create user's key] ***********************************************************
    changed: [localhost] => (item={'name': 'aira'})
    



    $ cat key_list.txt | grep -A3 aira | grep -v Status 
            "UserName": "aira",
            "AccessKeyId": "AKIAZ44MXOFLNSZ6RO3F",
            "SecretAccessKey": "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"
    


  • IAM 사용자를 설정합니다. 기본 사용자로 사용하지 않을 경우 --profile를 추가할 수 있습니다.

  • $ aws configure --profile aira
    AWS Access Key ID [None]: AKIAZ44MXOFLNSZ6RO3F
    AWS Secret Access Key [None]: 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
    Default region name [None]: 
    Default output format [None]:
    
    $ cat ~/.aws/credentials | grep -A2 aira
    [aira]
    aws_access_key_id = AKIAZ44MXOFLNSZ6RO3F
    aws_secret_access_key = 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
    


  • 정책 액세스를 확인합니다.

  • $ aws iam create-user --user-name test --profile aira | grep UserName
            "UserName": "test",
    
    $ aws iam delete-user --user-name test --profile aira
    
    $ aws iam get-user --user-name test --profile aira
    
    An error occurred (NoSuchEntity) when calling the GetUser operation: The user with name test cannot be found.
    


    효과가있다. 보시다시피 사용자를 생성하고 삭제할 수 있습니다.

    파트 2는 여기까지입니다. 이 게시물에 대한 여러분의 사랑에 감사드리며 유용하다고 생각되면 공유해 주세요. 고맙습니다. IAM 사용자 그룹에 대한 3부로 이동하겠습니다.

    참조: https://docs.ansible.com/ansible/latest/collections/community/aws/iam_user_module.html

    좋은 웹페이지 즐겨찾기