Let’s Encrypt에서 발급받은 SSL을 갱신하려면 매번 수동으로 DNS 변경을 해야 했다. 이것을 자동화할 수 있는 Shell Script를 만들어 테스트 하고 있는 중이다.

사전 작업으로 Shell에서 Domain Control을 하기 위해 일단 AWS CLI v2를 설치했다. apt를 이용하거나 python을 이용한 여러 설치 방식이 있는데, 모두 v1 버전의 설치 방법이었다. 그래서 AWS에서 제공하는 가이드대로 설치를 했다.

참조 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html

1. Linux를 위한 사전 조건 확인

가이드에 가장 먼저 나오는 것이 설치할 수 있는 조건이 되는 지를 확인하는 것이다. AWS Instance가 AWS CLI 조건을 만족하지 못하면 웃긴 일이겠지만, 당연하게도 Plesk는 아래 조건을 모두 만족하는 것을 확인 했다. Lightsail의 웹 터미널에 접속해서 모든 작업을 진행했다.

  • 다운로드한 패키지를 추출 또는 “압축 해제”할 수 있어야 합니다. 운영 체제에 기본 제공 unzip 명령이 없는 경우 이와 동등한 명령을 사용하십시오.
  • AWS CLI 버전 2에서는 glibc, groff 및 less를 사용합니다. 이들은 Linux의 대부분의 주요 배포판에 기본적으로 포함되어 있습니다.
  • CentOS, Fedora, Ubuntu, Amazon Linux 1 및 Amazon Linux 2의 최근 배포의 64비트 버전에서 AWS CLI 버전 2를 지원합니다.
  • Linux ARM에서 AWS CLI 버전 2를 지원합니다.
  • AWS에서는 타사 리포지토리를 유지 관리하지 않으므로 최신 버전의 AWS CLI가 포함되었다고 보장할 수 없습니다.

ubuntu@ip-172-26-0-112:~$ aws

Command 'aws' not found, but can be installed with:

sudo snap install aws-cli # version 1.15.58, or
sudo apt install awscli

See 'snap info aws-cli' for additional versions.

ubuntu@ip-172-26-0-112:~$ dpkg -l | grep unzip
ii unzip                               6.0-21ubuntu1                                a
md64        De-archiver for .zip files
ubuntu@ip-172-26-0-112:~$ dpkg -l | grep groff
ii groff-base                          1.22.3-10                                    a
md64        GNU troff text-formatting system (base system components)
ubuntu@ip-172-26-0-112:~$ dpkg -l | grep less
ii less                                487-0.1                                      a
md64        pager program similar to more
ii libzstd1:amd64                      1.3.3+dfsg-2ubuntu1.1                        a
md64        fast lossless compression algorithm
ubuntu@ip-172-26-0-112:~$ getconf -a | grep glibc
GNU_LIBC_VERSION                   glibc 2.27

2. AWS CLI 설치

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

순서대로 넣어주면 기다릴 시간도 없이 순식간에 설치는 끝난다. aws -version을 입력해서 응답이 오면 설치는 일단 끝났다.

ubuntu@ip-172-26-0-112:~$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version
ubuntu@ip-172-26-0-112:~$
ubuntu@ip-172-26-0-112:~$ aws --version
aws-cli/2.0.31 Python/3.7.3 Linux/4.15.0-1056-aws botocore/2.0.0dev35
ubuntu@ip-172-26-0-112:~$ rm -rf aws*

3. 액세스 키 생성

설치는 끝났지만, 권한이 없어서 대부분의 AWS 명령어가 동작하지 않는다. 그래서 현재 Shell 계정(ubuntu)에 권한을 추가할 수 있는 액세스 키 발급이 필요하다. 아래 링크의 설명서를 따라 진행을 하면 된다.

https://lightsail.aws.amazon.com/ls/docs/ko_kr/articles/lightsail-how-to-set-up-access-keys-to-use-sdk-api-cli

(1) 아래 사각형으로 표시된 ‘IAM 콘솔’을 클릭해서 콘솔 창을 띄운다.

(2) 우측 상단의 계정명에 마우스를 올리고, ‘내 보안 자격 증명’을 선택한다.

(3) 보안 자격 증명에서 ‘액세스 키’ 항목을 선택한 후 ‘새 액세스 키 만들기’를 클릭한다.

(4) 키는 바로 생성이 되며, 키 파일 다운로드를 하면 rootkey.csv라는 파일로 저장된다. 유출되지 않도록 주의할 것.

(5) rootkey.csv는 단순 텍스트 파일이므로, 메모장에서 열어서 해당 키를 복사해 쓰면 된다.

4. 액세스 키 등록 및 환경 설정

터미널에 다시 접속한 후 aws configure를 입력한다. Access Key와 Secret Access Key는 위에서 발급 받은 키를 그대로 넣고, region name은 인스턴스의 region을 입력하면 된다. 서울은 ap-northeast-2이다. output format은 json이나 text로 해주면 된다. region과 output format은 CLI 옵션에서 강제로 변경 가능하다.

실제로 domain 관련 커맨드를 사용하려면 인스턴스의 region과 상관 없이 무조건 us-east-1 region을 사용해야 하고, Shell에서는 json 쓰기가 어려워서 항상 출력을 text로 하고 있다. 디폴트는 뭐가 되든 상관 없다는 얘기다.

ubuntu@ip-172-26-0-112:~$ aws configure
AWS Access Key ID [None]: AK~~~~~~~~~~~~~~OA
AWS Secret Access Key [None]: czIh~~~~~~~~~~~~~~~~~~~~~1cG
Default region name [None]: ap-northeast-2
Default output format [None]: json
ubuntu@ip-172-26-0-112:~$

이 설정값들은 .aws 폴더에 저장된다. config에는 default 설정 값, credentials에는 key가 기록되어 있다. 혹시 액세스 키를 변경해야 할 경우에는 해당 폴더를 지우고 aws configure를 다시 해주면 된다.