AWS Route 53을 사용하고 있다면 와일드카드 인증서를 자동 갱신하려면 DNS 인증(DNS-01 Challenge)을 자동화해야 합니다. Certbot이 Route 53을 통해 자동으로 DNS TXT 레코드를 추가하도록 설정하면 수동 입력 없이 인증서 갱신이 가능합니다.
1. AWS IAM 역할 및 권한 설정
Certbot이 Route 53에서 DNS 레코드를 추가할 수 있도록 AWS IAM에서 적절한 권한을 부여해야 합니다.
1. IAM 사용자 생성 또는 기존 사용자를 사용
2. 해당 사용자에 Route 53 권한을 부여 (JSON 정책 추가):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets",
"route53:GetChange",
"route53:ListHostedZones",
"route53:ListResourceRecordSets"
],
"Resource": "*"
}
]
}
3. AWS 액세스 키 및 시크릿 키 설정
• ~/.aws/credentials 파일을 생성하고 아래와 같이 입력:
[default]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
2. Certbot Route 53 플러그인 설치
Certbot이 Route 53을 사용하도록 플러그인을 설치해야 합니다.
sudo apt install python3-certbot-dns-route53 -y
3. Certbot을 사용하여 자동화된 인증서 갱신 설정
기존에 수동으로 발급했던 인증서를 갱신할 때는 다음과 같이 Route 53을 활용하여 자동화할 수 있습니다.
sudo certbot certonly --dns-route53 \
-d openhealthcare.com -d *.openhealthcare.com
이제 Certbot이 자동으로 Route 53에 TXT 레코드를 추가하고 인증을 진행할 것입니다.
4. 자동 갱신 스케줄링 (crontab)
Certbot이 자동으로 인증서를 갱신하도록 cron 작업을 추가합니다.
sudo crontab -e
다음 줄을 추가하여 매일 새벽 3시에 Certbot이 실행되도록 설정합니다.
0 3 * * * certbot renew --dns-route53 --quiet
이제 Route 53을 통한 DNS 인증을 자동화하여 와일드카드 인증서 갱신을 자동으로 수행할 수 있습니다! 🚀
1. crontab이 잘 작성되었는지 확인하는 방법
crontab이 정상적으로 등록되었는지 확인하려면 다음 명령어를 실행하세요.
crontab -l
위 명령을 실행하면 현재 등록된 crontab 작업들이 출력됩니다. 예를 들어, 다음과 같이 나오면 정상적으로 등록된 것입니다.
0 3 * * * certbot renew --dns-route53 --quiet
2. crontab 실행 로그 확인 방법
crontab이 실행되었는지 확인하려면 syslog 또는 journalctl을 확인할 수 있습니다.
1) /var/log/syslog에서 실행 내역 확인 (Ubuntu)
grep CRON /var/log/syslog | grep certbot
위 명령어를 실행하면 certbot과 관련된 crontab 실행 로그가 출력됩니다.
2) journalctl로 확인 (systemd 기반 OS)
journalctl -u cron --since "1 hour ago"
위 명령어는 최근 1시간 동안의 cron 실행 기록을 확인하는 방법입니다.
3. crontab이 정상적으로 실행되고 certbot이 실행되었는지 확인
certbot의 로그 파일을 직접 확인할 수도 있습니다.
sudo cat /var/log/letsencrypt/letsencrypt.log | grep "renew"
만약 갱신이 실행되었다면 로그에 관련 정보가 남아 있을 것입니다.
4. crontab이 실행되지 않는 경우 해결 방법
✅ 권한 문제 해결
일반 사용자 계정이 아닌 root 권한으로 실행해야 하는 경우가 있습니다. sudo crontab -e를 사용하여 root 권한으로 crontab을 수정하면 해결될 수 있습니다.
✅ 절대 경로 사용
crontab은 환경 변수를 로드하지 않기 때문에 certbot의 절대 경로를 사용해야 합니다. which certbot 명령을 실행하여 certbot의 경로를 찾고, 이를 crontab에 반영하세요.
0 3 * * * /usr/bin/certbot renew --dns-route53 --quiet
✅ cron 서비스가 실행 중인지 확인
cron이 제대로 실행 중인지 확인하려면 다음 명령을 실행하세요.
sudo systemctl status cron
만약 inactive (dead) 상태라면 다음 명령어로 다시 시작하세요.
sudo systemctl start cron
sudo systemctl enable cron
5. 테스트 실행
crontab이 정상적으로 실행되는지 확인하기 위해 다음과 같은 테스트를 해볼 수 있습니다.
1) 바로 실행되는 테스트 cronjob 추가
테스트를 위해 1분마다 실행되도록 설정한 후 결과를 확인해 보세요.
* * * * * echo "Crontab is working" >> /tmp/crontab_test.log
1~2분 후 다음 명령어를 실행하여 로그가 생성되었는지 확인합니다.
cat /tmp/crontab_test.log
2) certbot 갱신을 수동 실행하여 확인
sudo certbot renew --dry-run
위 명령어를 실행하여 인증서 갱신이 정상적으로 작동하는지 확인할 수 있습니다.
✅ 결론
1. crontab -l로 등록 여부 확인
2. grep CRON /var/log/syslog | grep certbot로 실행 로그 확인
3. sudo certbot renew –dry-run으로 certbot이 정상적으로 작동하는지 확인
4. sudo systemctl status cron으로 cron 서비스 실행 상태 확인
5. 절대 경로를 사용하여 crontab을 설정하면 오류 방지 가능
이제 자동 갱신이 잘 동작하는지 확인할 수 있습니다! 🚀