Documentation

11. 사용자 정의 인증 정보 유형

슈퍼유저 액세스 권한이 있는 관리자는 YAML/JSON과 같은 정의를 사용하여 표준 형식으로 사용자 정의 인증 정보 유형을 정의하여 작업 및 인벤토리 업데이트에 새 인증 정보 유형을 할당할 수 있습니다. 이를 통해 기존 인증 정보 유형과 유사한 방식으로 작동하는 사용자 정의 인증 정보 유형을 정의할 수 있습니다. 예를 들어, 타사 웹 서비스의 API 토큰을 플레이북 또는 사용자 정의 인벤토리 스크립트에서 사용할 수 있는 환경 변수에 삽입하는 사용자 정의 인증 정보 유형을 생성할 수 있습니다.

사용자 정의 인증 정보는 다음과 같은 인증 정보 삽입 방법을 지원합니다.

  • 환경 변수

  • Ansible 추가 변수

  • 파일 기반 템플릿 작성(예: 인증 정보 값이 포함된 .ini 또는 .conf 파일 생성)

하나의 SSH 및 여러 클라우드 인증 정보를 하나의 작업 템플릿에 연결할 수 있습니다. 각 클라우드 인증 정보는 유형이 서로 달라야 합니다. 즉, AWS 인증 정보 1개, GCE 인증 정보 1개 등만 허용됩니다. Vault 인증 정보 및 머신 인증 정보는 별도의 엔터티입니다.

참고

새 인증 정보 유형을 생성할 때 extra_vars, env, 파일 네임스페이스에서 충돌하지 않도록 해야 합니다. 또한 ANSIBLE_``로 시작하는 환경 변수 또는 추가 변수 이름은 예약되어 있기 때문에 사용하지 않도록 합니다. 인증 정보 유형(``CredentialType)을 생성 및 편집하고 CredentialType.injection 필드를 보려면 슈퍼유저 권한이 있어야 합니다.

11.1. 컬렉션에서 콘텐츠 소싱

``kind=galaxy``의 《관리형》 인증 정보 유형은 프로젝트 업데이트가 실행될 때 ``requirements.yml``에 정의된 컬렉션을 가져오는 데 필요한 콘텐츠 소스를 나타냅니다(예: galaxy.ansible.com, cloud.redhat.com, 온프레미스 Automation Hub). 이 새 유형은 프로젝트 업데이트에서 Ansible 문서, `Configuring the ansible-galaxy client <https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#configuring-the-ansible-galaxy-client>`에 설명된 대로 ``ansible-galaxy collection install``을 실행할 때 환경 변수를 구성하는 데 필요한 URL 및 (선택 사항) 인증 세부 정보를 나타냅니다. 여기에는 Ansible Galaxy CLI에 노출되는 구성 옵션에 직접 매핑되는 필드가 있습니다(예: per-server). API의 끝점에는 다음과 같이 조직 수준에 이러한 인증 정보가 정렬된 목록이 반영됩니다.

/api/v2/organizations/N/galaxy_credentials/

|at|를 설치하면 업그레이드 후 적절한 인증 정보가 생성되고 모든 조직에 연결되는 방식으로 기존 Galaxy 지향 설정값을 마이그레이션합니다. 최신 버전으로 업그레이드하면 업그레이드 전에 존재했던 모든 조직에 (하나 이상의) 《Galaxy》 인증 정보로 구성된 목록이 연결되어 있습니다.

또한 업그레이드 후에는 /api/v2/settings/jobs/ 끝점에서 이러한 설정을 보거나 편집할 수 없습니다.

galaxy.ansible.com이 조직 목록의 첫 번째 인증 정보가 아니더라도 |at|는 계속해서 공개 Galaxy에서 역할을 직접 가져와야 합니다. 글로벌 "Galaxy" 설정은 더 이상 작업 수준이 아닌 사용자 인터페이스의 조직 수준에서 구성됩니다. 조직의 추가 및 편집 창에는 |at| 인증 정보에 대한 선택적 인증 정보 조회 필드가 있습니다.

_images/organizations-galaxy-credentials.png

이러한 인증 정보의 순서를 지정하는 일은 콘텐츠의 동기화 및 조회에 대한 우선 순위를 설정하는 것이므로 중요합니다. 자세한 내용은 :ref:`ug_organizations_create`을 참조하십시오. 컬렉션을 사용하여 프로젝트를 설정하는 방법에 대한 자세한 내용은 :ref:`ug_collections_usage`을 참조하십시오.

11.2. 이전 버전과 호환되는 API 고려 사항

API 버전 2(api/v2/) 지원은 작업 템플릿과 인증 정보의 일대다 관계를 의미합니다(멀티 클라우드 지원 포함). 인증 정보는 v2 API를 사용하여 필터링할 수 있습니다.

$ curl "https://controller.example.org/api/v2/credentials/?credential_type__namespace=aws"

V2 CredentialType 모델에서 관계는 다음과 같이 정의됩니다.

머신

SSH

Vault

Vault

네트워크

환경 변수 설정(예: ANSIBLE_NET_AUTHORIZE)

SCM

소스 제어

클라우드

EC2, AWS

기타 다수

Insights

Insights

Galaxy

galaxy.ansible.com, cloud.redhat.com

온프레미스 자동화 허브

11.3. 인증 정보 유형 시작하기

왼쪽 탐색 모음에서 **인증 정보 유형**을 클릭하여 인증 정보에 액세스합니다. 사용자 정의 인증 정보 유형이 생성되지 않은 경우 인증 정보 유형 보기에 아무것도 표시되지 않고 인증 정보 유형을 추가하라는 메시지가 표시됩니다.

Credential Types - home empty

인증 정보 유형을 생성한 경우 이 페이지에 모든 기존 인증 정보 유형과 사용 가능한 인증 정보 유형 목록이 표시됩니다.

Credential Types - home with example credential types

인증 정보 유형에 대한 자세한 내용을 보려면 작업 열에서 이름 또는 편집(edit) 버튼을 클릭합니다.

각 인증 정보 유형에는 해당하는 경우 입력 구성 필드 및 인젝터 구성 필드에 고유한 구성이 표시됩니다. YAML 및 JSON 형식 모두 구성 필드에서 지원됩니다.

11.4. 새 인증 정보 유형 생성

새 인증 정보 유형을 생성하려면 다음을 수행합니다.

  1. 인증 정보 유형 화면에서 추가 버튼을 클릭합니다.

Create new credential type

  1. 이름설명 필드에 적절한 세부 정보를 입력합니다.

참고

새 인증 정보 유형을 생성할 때는 INPUTINJECTOR 이름 및 ID에 ``ANSIBLE_``로 시작하는 스케줄링된 변수 이름을 사용하지 마십시오. 사용자 정의 인증 정보 유형으로 유효하지 않습니다.

  1. 입력 구성 필드에서 해당 유형에 대해 정렬된 필드 세트를 정의하는 입력 스키마를 지정합니다. 형식은 다음과 같이 YAML 또는 JSON일 수 있습니다.

YAML

fields:
  - type: string
    id: username
    label: Username
  - type: string
    id: password
    label: Password
    secret: true
required:
  - username
  - password

더 많은 YAML 예제는 `<http://www.yaml.org/start.html>`_에서 확인할 수 있습니다.

JSON

{
"fields": [
  {
  "type": "string",
  "id": "username",
  "label": "Username"
  },
  {
  "secret": true,
  "type": "string",
  "id": "password",
  "label": "Password"
   }
  ],
 "required": ["username", "password"]
}

더 많은 JSON 예제는 `<www.json.org>`_에서 확인할 수 있습니다.

아래 JSON 형식의 구성에서는 각 필드와 사용 방법을 보여줍니다.

{
  "fields": [{
    "id": "api_token",               # required - a unique name used to
                                     # reference the field value

    "label": "API Token",            # required - a unique label for the
                                     # field

    "help_text": "User-facing short text describing the field.",

    "type": ("string" | "boolean")   # defaults to 'string'

    "choices": ["A", "B", "C"]       # (only applicable to `type=string`)

    "format": "ssh_private_key"      # optional, can be used to enforce data
                                     # format validity for SSH private key
                                     # data (only applicable to `type=string`)

    "secret": true,                  # if true, the field value will be encrypted

    "multiline": false               # if true, the field should be rendered
                                     # as multi-line for input entry
                                     # (only applicable to `type=string`)
},{
    # field 2...
},{
    # field 3...
}],

"required": ["api_token"]            # optional; one or more fields can be marked as required
},

``type=string``인 경우 필드는 선택적으로 객관식 옵션을 지정할 수 있습니다.

{
  "fields": [{
      "id": "api_token",          # required - a unique name used to reference the field value
      "label": "API Token",       # required - a unique label for the field
      "type": "string",
      "choices": ["A", "B", "C"]
  }]
},
  1. 인젝터 구성 필드에 특정 인증 정보 유형에서 삽입할 수 있는 값을 지정하는 환경 변수 또는 추가 변수를 입력합니다. 형식은 YAML 또는 JSON일 수 있습니다(이전 단계의 예제 참조). 아래 JSON 형식의 구성에서는 각 필드와 사용 방법을 보여줍니다.

{
  "file": {
      "template": "[mycloud]\ntoken={{ api_token }}"
  },
  "env": {
      "THIRD_PARTY_CLOUD_API_TOKEN": "{{ api_token }}"
  },
  "extra_vars": {
      "some_extra_var": "{{ username }}:{{ password }}"
  }
}

인증 정보 유형에서도 임시 파일을 생성하여 .ini 파일 또는 인증 정보/키 데이터를 지원할 수 있습니다.

{
  "file": {
      "template": "[mycloud]\ntoken={{ api_token }}"
  },
  "env": {
      "MY_CLOUD_INI_FILE": "{{ tower.filename }}"
  }
}

이 예에서 |at|는 다음을 포함하는 임시 파일을 작성합니다.

[mycloud]\ntoken=SOME_TOKEN_VALUE

생성된 파일의 절대 파일 경로는 ``MY_CLOUD_INI_FILE``이라는 환경 변수에 저장됩니다.

다음은 사용자 정의 인증 정보 템플릿에서 여러 개의 파일을 참조하는 예입니다.

입력

{
  "fields": [{
    "id": "cert",
    "label": "Certificate",
    "type": "string"
  },{
    "id": "key",
    "label": "Key",
    "type": "string"
  }]
}

인젝터

  {
    "file": {
      "template.cert_file": "[mycert]\n{{ cert }}",
      "template.key_file": "[mykey]\n{{ key }}"
  },
  "env": {
      "MY_CERT_INI_FILE": "{{ tower.filename.cert_file }}",
      "MY_KEY_INI_FILE": "{{ tower.filename.key_file }}"
  }
}
  1. 완료되면 **저장**을 클릭합니다.

  2. 화면 하단까지 아래로 스크롤하면 새로 생성된 인증 정보 유형이 인증 정보 유형 목록에 표시됩니다.

New credential type

작업 열에서 인증 정보 유형 옵션을 수정하려면 |edit|을 클릭합니다.

참고

편집 화면에서 세부 정보를 수정하거나 인증 정보를 삭제할 수 있습니다. 삭제 버튼이 회색으로 표시되면 인증 정보에서 해당 인증 정보 유형을 사용 중임을 나타냅니다. 인증 정보 유형을 삭제하려면 이를 사용하는 모든 인증 정보에서 해당 인증 정보 유형을 삭제해야 합니다. 다음은 이러한 메시지의 예입니다.

_images/credential-types-delete-confirmation.png
  1. 새 인증 정보를 생성할 때 인증 정보 유형 선택 창에서 새로 생성한 인증 정보 유형을 선택할 수 있는지 확인합니다.

Verify new credential type

새 인증 정보를 생성하는 방법에 대한 자세한 내용은 :ref:`ug_credentials`를 참조하십시오.