![InseobKim_0-1664297210046.png InseobKim_0-1664297210046.png](https://community.cisco.com/t5/image/serverpage/image-id/163553i2156BEDD4F9EE31B/image-size/medium?v=v2&px=400)
개요
REST API나 Ansible, Terraform을 이용하여 ACI 자동화를 고려하는 경우, 보다 효율적이고 보안적인 인증 방식을 소개합니다.
ACI가 클라이언트에 제공하는 인증 처리하는 방식은 아래 2가지가 제공됩니다.
-
username/password 기반의 인증
-
Signature 기반의 인증
username/password 기반 인증 방식은 APIC GUI에 로그인하는 것과 동일한 방식입니다. 클라이언트(Ansible, Terraform 또는 python 코드 등)에서 http(s)://{APIC}/api/login.json 으로 로그인 유저명과 패스워드를 전달하면, APIC에서 로그인을 위한 토큰을 클라이언트로 반환합니다. 이후 클라이언트는 해당 토큰을 HTTP 헤더에 포함하여 API를 호출하면, APIC이 요청을 인증하고, API 요청을 처리합니다.
Signature 기반 인증 방식은 먼저 사용자의 인증서를 APIC에 등록하고난 후, 클라이언트가 인증서를 발급한 개인키로 signature를 생성하여 API 요청과 함께 APIC으로 전달하면, APIC은 등록된 인증서를 통해 signature를 검증하고, API 요청을 처리합니다. 클라이언트가 생성하는 signature는 매번 API를 호출할 때 마다, 새로 생성합니다.
Signature 기반 인증 방식은 API 호출 시마다 새로운 signature를 사용하므로, username/password 기반 인증 방식에 비해 보안적으로 안전합니다. 특히 HTTPS 연결을 지원하지 않는 APIC 환경에서는 Signature 기반 인증 방식이 더 권장됩니다.
Signature 기반 인증을 처리하기 위해서는 다음과 같은 순서로 작업을 진행합니다.
-
x.501 인증서 생성
-
APIC에 인증서 등록
-
APIC REST API 호출 시, 개인키를 이용하여 Signature 생성 및 HTTP header에 추가
-
APIC에서 Signature를 확인하고, Access 허용
X.509 인증서 및 개인키 생성
X.509 인증서와 개인키는 리눅스의 openssl 커맨드를 이용하여 생성 할 수 있습니다. 아래는 openssl을 이용하여 인증서와 개인키를 만드는 예시입니다. 인증서, 개인키 생성 및 테스트를 위한 환경이 구성되지 않은 경우, [데이터센터와 클라우드 자동화를 위한 개발 PC 환경 만들기]게시물을 참고하여 환경 구성이 가능합니다.
openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout userabc.key -out userabc.crt -subj '/CN=User ABC/O=Cisco Systems/C=US'
위 예제에서 개인키 파일 usbabc.key과 인증서 userabc.crt 파일이 만들어지며, 생성된 인증서의 만료기간은 생성한 일자로부터 1년(365일)입니다.
APIC에 인증서 등록
1. APIC GUI 로그인하고, Admin > AAA > Users 메뉴에 접속합니다. 그리고, 등록된 사용자 중, Signature 기반 인증을 적용할 사용자를 더블클릭합니다.![InseobKim_0-1664295492856.png InseobKim_0-1664295492856.png](https://community.cisco.com/t5/image/serverpage/image-id/163541i467DCCAA3A773AC5/image-size/large?v=v2&px=999)
2. User Certificates 항목에서 (+)를 클릭합니다.
![InseobKim_2-1664295751564.png InseobKim_2-1664295751564.png](https://community.cisco.com/t5/image/serverpage/image-id/163546iDE7924141B8395D0/image-size/large?v=v2&px=999)
3. "Create X509 Certificate" 메뉴에서 인증서 관련 내용을 입력합니다.
- Name: 인증서 이름을 입력합니다. 예) myCert
- Data: 인증서 파일(예: userabc.crt) 내용을 복사하여 붙여 넣습니다.
![InseobKim_3-1664295803526.png InseobKim_3-1664295803526.png](https://community.cisco.com/t5/image/serverpage/image-id/163547i3C282A6673779ADC/image-size/large?v=v2&px=999)
Signature 기반 인증 테스트
Ansible이나 Terraform과 같은 자동화 도구로 Signature 인증을 처리하고자 하는 경우, 사용자가 직접 Signature 생성을 위한 스크립트를 작성하실 필요가 없습니다. Ansible의 경우, ACI 모듈의 파라미터에 인증서 이름(certificate_name)과 개인키 파일이름(private_key)만 추가하면 됩니다. 아래 Ansible Playbook 예제를 참고하시기 바랍니다.
- hosts: apic
connection: local
gather_facts: no
vars:
aci_auth: &aci_auth
host: 198.18.133.200
user: admin
validate_certs: no
use_ssl: yes
private_key: userabc.key # 개인키 파일이름
certificate_name: myCert # APIC에 등록한 인증서 이름
tasks:
- name: Query Tenants
cisco.aci.aci_tenant:
<<: *aci_auth
state: query
- name: Query Bridge Domains
cisco.aci.aci_bd:
<<: *aci_auth
state: query