AWS CLI 사용하기

AWS 서비스를 이용하는 방법은 크게 두 가지 입니다. 웹 서비스로 제공되는 콘솔을 이용하는 방법과 API 기반으로 제공되는 CLI (Command Line Interface)를 이용하는 것입니다.

콘솔과 CLI는 대부분의 기능이 동일하지만, 서로 제공되지 않는 기능들이 종종 존재합니다. 예를 들어서, 결제 정보와 관련된 CLI는 제공되지 않지만, 반면에 특정 설정을 위해서는 CLI로만 가능한 경우도 존재합니다. 이번 글에서는 CLI 설정과 사용 방법에 대해서 알아보도록 하겠습니다.


AWS CLI 설치하기

저는 현재 m1 맥북 프로를 사용하므로 이를 기준으로 작성하도록 하겠습니다. 사전에 brew를 설치해놨기 때문에 다음 명령을 통해서 간단하게 AWS CLI를 설치할 수 있습니다.

> brew install awscliCode language: Bash (bash)

이 외에 패키지 방식으로도 설치가 가능한데, 이러한 경우와 아예 다른 OS를 사용중이신 경우에는 AWS에서 제공하는 문서를 통해서 프로그램을 다운로드 및 설치하실 수 있습니다.

액세스 키 생성 및 설정하기

CLI를 사용하기 위해서는 AWS에 접근하기 위해서 액세스 키를 필요로 합니다. 기존에 발급한 사용자 계정에 액세스 키를 발급하거나, 별도의 액세스 키 계정을 생성하고 발급된 크레덴셜 정보를 저장해둡니다.

이제 CLI에서 크레덴셜을 사용할 수 있도록 설정을 진행해야 합니다. 다음 절차에 따라서 액세스 키와 비밀 액세스 키 정보를 입력하도록 합니다.

> aws configure
AWS Access Key ID [None]: AKIAXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [ap-northeast-2]: ap-northeast-2
Default output format [None]: jsonCode language: Bash (bash)

AWS CLI는 멀티 프로파일 환경을 지원하기 때문에, 기본값이 아닌 특정한 프로파일 사용을 원하신다면 --profile temp와 같이 명시적으로 프로파일을 지정하여 추가할 수 있습니다. 기본 리전은 가장 자주 사용할 리전을 지정하는 것이 편리하고, output은 생략해도 됩니다.

이렇게 저장된 크레덴셜 정보는 로컬의 특정 경로에 저장되기 때문에, AWS CLI 뿐만 아니라 IntelliJ, VSCode와 같은 개발 프로그램에서도 AWS 플러그인을 통해서 연동하여 사용할 수 있습니다.

AWS CLI 사용하기

이제 적절한 권한이 액세스 키에 할당되어 있다면 CLI를 사용하여 많은 명령을 수행할 수 있습니다. 사용 가능한 명령어와 옵션은 다음 문서에서 상세하게 확인할 수 있습니다.

> aws account list-regions --max-results 50
{
    "Regions": [
        {
            "RegionName": "af-south-1",
            "RegionOptStatus": "DISABLED"
        },
        {
            "RegionName": "ap-east-1",
            "RegionOptStatus": "DISABLED"
        },
        {
            "RegionName": "ap-northeast-1",
            "RegionOptStatus": "ENABLED_BY_DEFAULT"
        },
        {
            "RegionName": "ap-northeast-2",
            "RegionOptStatus": "ENABLED_BY_DEFAULT"
        },
        ...
}Code language: Bash (bash)
> aws ec2 describe-instances | jq '.Reservations[].Instances[] | {InstanceId: .InstanceId, StateName: .State.Name}'
{
  "InstanceId": "i-08bexxxxxxxxxxxxx",
  "StateName": "running"
}
{
  "InstanceId": "i-0175xxxxxxxxxxxxx",
  "StateName": "stopped"
}
...Code language: Bash (bash)

그리고 앞서 언급했던 것처럼 특별한 작업은 오직 CLI에서만 가능합니다.

> aws route53 create-vpc-association-authorization --hosted-zone-id <hosted-zone-id> --vpc VPCRegion=<region>,VPCId=<vpc-id> --region us-east-1Code language: Bash (bash)

주의할 점

위와 같이 액세스 키를 사용함에 있어서 주의해야 할 점은, configure를 통해서 저장한 크레덴셜이 별도의 암호화 과정 없이 일반 텍스트로 손쉽게 접근 가능한 파일에 쓰인다는 점입니다.

> cat ~/.aws/credentials
[temp]
aws_access_key_id = AKIAXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXCode language: Bash (bash)

그렇기 때문에 액세스 키를 사용하는 컴퓨터에 타인이 접근할 수 없도록 보안 조치를 해야만 합니다. 물론, 액세스 키 말고도 더 안전한 SSO를 사용하는 방법이나 서드파티 툴을 이용해서 암호화 과정을 거칠 수 있습니다. 이에 대해서는 추후에 하나씩 차근차근 살펴보도록 하겠습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *