여러 개 도메인에 대해 ACM 인증서를 일괄적으로 생성 요청하고,
인증 레코드를 추가하는 명령어를 생성하는 파이썬 스크립트이다.
AWS 이전 중인 서버 중 호스팅 서버가 포함되어있어 작성했고,
도메인도 자체 DNS 서버에서 관리 중이어서 인증 레코드를 추가하는 명령어도 작성했다.
ACM 생성 시, 일반 도메인과 멀티 도메인을 구분하여 생성하도록 작성하였다.
(acm_domain_list는 일반, acm_domain_list_multi는 멀티 도메인)
ACM은 S3의 boto3와 같은 라이브러리가 없어서 aws cli를 이용한다.
! 실행하기 전에 acm 생성 권한이 있는지 확인한다.
import os
import subprocess
# 작업 경로.
work_dir="D:\\Python\\acm\\"
# DNS 서버 IP.
dns_server="127.0.0.1"
# 도메인 목록 파일 지정.
domain_list_1=work_dir+"acm_domain_list"
domain_list_2=work_dir+"acm_domain_list_multi"
# 도메인 입력.
domain_file = open("%s" % (domain_list_1), "r")
domain_list = domain_file.read().splitlines()
domain_file.close()
# 멀티 도메인 입력.
domain_file2 = open("%s" % (domain_list_2), "r")
domain_list2 = domain_file2.read().splitlines()
domain_file2.close()
# ACM 생성.
arn_path=work_dir+'arn_list.txt'
# ACM이 이미 생성된 경우, 바로 DNS 인증 레코드 생성.
if os.path.isfile(arn_path):
pass
else:
arn_list_tmp = ''
for domain in domain_list:
arn_tmp = os.popen('aws acm request-certificate --domain-name %s --validation-method DNS --tag Key=Name,Value=%s | findstr CertificateArn' % (domain,domain)).read()
arn_tmp = arn_tmp.replace('"','').replace(" ","").replace("CertificateArn:","")
arn_list_tmp+=arn_tmp
for domain in domain_list2:
arn_tmp = os.popen('aws acm request-certificate --domain-name %s --validation-method DNS --tag Key=Name,Value=%s --subject-alternative-names *.%s | findstr CertificateArn' % (domain,domain,domain)).read()
arn_tmp = arn_tmp.replace('"','').replace(" ","").replace("CertificateArn:","")
arn_list_tmp+=arn_tmp
arn_file = open(arn_path,'w')
arn_file.write(arn_list_tmp)
arn_file.close()
# DNS 인증 레코드 생성(for IIS).
add_record=''
arn_file = open(arn_path, "r")
arn_list = arn_file.read().splitlines()
for arn_tmp in arn_list:
auth_domain_tmp = os.popen('aws acm describe-certificate --certificate-arn %s --output text | findstr DNS' % (arn_tmp)).read().split()
auth_domain = auth_domain_tmp[1]
auth_record_tmp = os.popen('aws acm describe-certificate --certificate-arn %s --output text | findstr RESOURCERECORD' % (arn_tmp)).read().split('\n')
auth_record = auth_record_tmp[0]
domain_tmp = '.'+auth_domain+'.'
auth_record = auth_record.replace('RESOURCERECORD','').replace(domain_tmp,'').replace("\n","").replace("\t"," ")
add_record+='dnscmd %s /recordadd %s %s\n' % (dns_server,auth_domain,auth_record)
add_record_file = open(work_dir+'add_record.txt','w')
add_record_file.write(add_record)
add_record_file.close()
ACM 삭제 및 DNS 삭제 레코드
더보기
# # ACM 삭제.
# arn_file = open(arn_path, 'r')
# arn_list = arn_file.read().splitlines()
# arn_file.close()
# for arn in arn_list:
# os.system('aws acm delete-certificate --certificate-arn %s' % (arn))
# # DNS 인증 레코드 삭제
# arn_file = open(work_dir+"add_record.txt", 'r')
# arn_list = arn_file.read().replace("recordadd","recorddelete")
# arn_file.close()
# arn_file = open(work_dir+"delete_record.txt", 'w')
# arn_file.write(arn_list)
# arn_file.close()
'IT > System' 카테고리의 다른 글
[Windows] 하나 이상의 사전 배포 작업이 실패했습니다. Windows Server 역할 및 기능 추가 오류. (0) | 2020.12.15 |
---|---|
[AWS] S3 파일 동기화, S3 파일 증가분 복사. (0) | 2020.12.15 |
[MSSQL] 네트워크 드라이브 연결 (0) | 2020.12.04 |
[Tomcat] tomcat 및 실행 java 버전 확인하기. (0) | 2020.11.14 |
[httpd] tomcat-connector 구성 간 오류. No JkShmFile defined in httpd.conf. Using default /etc/httpd/logs/jk-runtime-status (0) | 2020.11.14 |