AWS CLI를 사용하여 자격 증명을 안전하게 관리하기 위한 모범 사례

AWS CLI 자격 증명 보안을 위한 확고한 모범 사례를 알아보세요. 이 가이드에서는 자격 증명 로드 순서, 구성 파일 및 환경 변수의 올바른 사용법을 다루며, 무엇보다 중요한 것은 수명이 긴 정적 액세스 키 저장 위험을 제거하기 위해 IAM 역할과 AWS SSO를 활용하는 방법입니다. 이러한 전략을 구현하여 AWS 자동화 및 관리 워크플로우에서 강력한 보안을 달성하세요.

43 조회수

AWS CLI를 사용하여 자격 증명을 안전하게 관리하기 위한 모범 사례

AWS(Amazon Web Services)와 CLI(Command Line Interface)를 통해 상호 작용할 때 자격 증명을 안전하게 관리하는 것은 가장 중요합니다. 액세스 키(액세스 키 ID 및 보안 액세스 키)는 클라우드 리소스에 프로그래밍 방식의 액세스를 제공하므로, 이것이 유출되면 심각한 보안 위험을 초래합니다. 이 문서는 AWS CLI를 통해 작업을 자동화하거나 리소스를 관리할 때 노출을 최소화하고 강력한 보안 태세를 유지하기 위해 이러한 자격 증명을 저장, 관리 및 활용하는 데 필요한 중요한 모범 사례를 요약합니다.

AWS CLI는 자격 증명을 찾는 특정 방법에 의존합니다. 구성 파일부터 환경 변수 및 IAM 역할에 이르기까지 이러한 방법을 이해하는 것이 환경을 보호하는 첫 단계입니다. 권장되는 우선 순위와 하드 코딩된 암호에 대한 최신적이고 안전한 대안들을 살펴보겠습니다.

AWS CLI 자격 증명 로딩 순서 이해

AWS CLI는 정의된 계층 구조를 사용하여 자격 증명을 확인합니다. 이 순서를 알면 CLI가 자격 증명을 어디서 먼저 찾는지 이해할 수 있으며, 의도한 가장 안전한 구성이 우선하도록 보장합니다.

CLI는 다음 순서(가장 높은 우선 순위부터 가장 낮은 우선 순위까지)로 자격 증명을 확인합니다:

  1. 명령줄 옵션: 플래그(--access-key-id--secret-access-key)를 통해 직접 전달된 자격 증명.
  2. 환경 변수: 현재 셸 세션에 설정된 자격 증명.
  3. 자격 증명 프로세스: 구성된 자격 증명 프로세스(종종 SSO 또는 외부 도구에서 사용됨)의 출력.
  4. AWS 자격 증명 공급자 체인: 이 체인은 다음 순서로 확인합니다:
    a. 실행 중인 EC2 인스턴스 또는 ECS 작업에 할당된 IAM 역할의 자격 증명.
    b. 공유 자격 증명 파일(~/.aws/credentials)에 저장된 자격 증명.
  5. 구성 파일: 자격 증명이 발견되지 않으면 CLI는 검색을 중단합니다.

보안 팁: 명령줄 플래그에 의존하는 것은 명령 기록(bash_history)이 민감한 정보를 노출할 수 있으므로 일반적인 사용에서는 권장되지 않습니다.

1. 구성 파일에서 자격 증명 보안 유지 (~/.aws/credentials)

기본적으로 AWS CLI는 일반적으로 ~/.aws/credentials에 위치한 공유 자격 증명 파일에 자격 증명을 저장합니다. 편리하지만, 이 파일은 반드시 보호되어야 합니다.

파일 보호 및 권한

이 파일에 대한 읽기 액세스를 제한하는 것이 중요합니다. Linux/macOS 시스템에서는 소유자만 파일을 읽거나 쓸 수 있도록 권한을 설정하십시오:

chmod 600 ~/.aws/credentials

분리를 위한 프로필 사용

별도의 프로필을 사용하면 다른 환경(예: 개발, 스테이징, 프로덕션) 또는 다른 계정에 대한 자격 증명을 분리할 수 있습니다. 이는 실수로 인한 환경 간 작업을 방지합니다.

~/.aws/credentials 예시:

[default]
aws_access_key_id = AKIABCDEFGHIJKLMNO
aws_secret_access_key = xYzdEfGhIjKlMnOpQrStUvWxYz1234567890

[production-user]
aws_access_key_id = AKIA9876543210ZYXWVU
aws_secret_access_key = aBcDeFgHiJkLmNoPqRsTuVwXyZ9876543210

명명된 프로필을 사용할 때는 --profile 플래그로 지정해야 합니다:

aws s3 ls --profile production-user

2. 환경 변수 활용

환경 변수는 자격 증명을 디스크에 기록하지 않고 CLI 세션에 제공하는 동적인 방법을 제공합니다. 이는 디스크 쓰기가 제한되거나 바람직하지 않은 임시 액세스 또는 스크립팅 환경에서 자주 선호됩니다.

셸 세션에서 다음 변수를 설정하십시오:

export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"

우선 순위에 대한 중요 참고 사항: 환경 변수를 통해 설정된 자격 증명은 자격 증명 로딩 체인에서 더 높은 순위에 있기 때문에 ~/.aws/credentials 파일에서 발견된 자격 증명보다 항상 우선합니다.

보안 경고: 환경 변수를 내보낼 때, 특히 공유 터미널이나 로깅될 수 있는 스크립트에서는 주의하십시오. 사용 직후에는 항상 설정을 해제하십시오:
bash unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY

3. 가장 안전한 방법: IAM 역할 (인스턴스 프로파일/웹 자격 증명)

EC2 인스턴스, Lambda 함수 또는 ECS 작업과 같이 AWS 인프라 상에서 실행되는 워크로드의 경우, 가장 안전한 관행은 절대로 정적 자격 증명을 사용하지 않는 것입니다. 대신 IAM 역할을 사용하십시오.

IAM 역할은 인스턴스 메타데이터 서비스를 통해 리소스에 임시로 자동 순환되는 보안 자격 증명을 할당할 수 있도록 합니다. AWS CLI는 디스크나 환경 변수에 저장되지 않은 채로 이러한 자격 증명을 자동으로 감지하고 사용합니다.

작동 방식:

  1. EC2 인스턴스가 연결된 IAM 역할과 함께 시작됩니다.
  2. 해당 인스턴스에서 실행되는 CLI는 임시 자격 증명을 얻기 위해 인스턴스 메타데이터 서비스(IMDS)에 쿼리합니다.
  3. CLI는 이후의 모든 API 호출에 이러한 임시 자격 증명을 사용합니다.

이는 장기간 지속되는 액세스 키와 관련된 위험을 완전히 제거합니다.

4. 자격 증명 프로세스 및 SSO 활용

현대의 자격 증명 관리는 점점 더 외부 인증 공급자에 의존하고 있으며, 이는 종종 credential_process 구성을 통해 통합됩니다.

AWS SSO (싱글 사인온)

AWS SSO는 기존 ID 공급자(IdP)를 사용하여 여러 계정 및 역할 전반의 액세스를 관리하는 통합된 방법을 제공합니다. AWS CLI는 SSO와 원활하게 통합되어 임시 세션 토큰 관리를 추상화합니다.

SSO 사용을 시작하려면 먼저 로그인 명령을 실행해야 합니다:

aws sso login --profile <profile-name>

그러면 인증을 위한 브라우저 창이 열립니다. 성공하면 CLI는 필요한 세션 토큰을 저장하며, 종종 내부적으로 credential_process 메커니즘을 사용하여 토큰을 자동으로 새로 고침합니다. 이는 사용자가 원시 보안 키를 직접 처리할 필요가 없음을 의미합니다.

credential_process 구성

CLI가 자격 증명을 동적으로 가져오기 위해 외부 도구(예: 볼트 에이전트 또는 SSO 헬퍼)를 호출하도록 구성할 수 있습니다. 이는 구성 파일에 지정됩니다:

~/.aws/config 예시:

[profile my-vault-profile]
region = us-west-2
credential_process = /usr/local/bin/my-vault-cli get-aws-creds --profile my-vault-profile

이 방법은 HashiCorp Vault와 같은 보안 비밀 관리 도구와 통합할 때 중요합니다.

모범 사례 요약 및 체크리스트

AWS CLI 작업의 보안을 극대화하려면 다음 핵심 원칙을 준수하십시오:

  • 최소 권한의 원칙: 모든 IAM 사용자 및 역할이 작업을 수행하는 데 엄격하게 필요한 권한만 가지도록 보장하십시오.
  • 키보다 역할 선호: AWS 인프라 내에서 운영할 때는 항상 IAM 역할(인스턴스 프로파일)을 사용하십시오.
  • SSO 사용: 사람이 대화형으로 사용할 때는 AWS SSO를 활용하여 여러 계정에 대한 액세스를 관리하십시오.
  • 절대 키를 하드 코딩하지 마십시오: 액세스 키를 스크립트, 소스 코드 또는 명령 기록에 직접 넣는 것을 피하십시오.
  • 자격 증명 파일 보호: ~/.aws/credentials에 파일 시스템 권한(chmod 600)을 제한하십시오.
  • 키를 정기적으로 순환: 정적 키를 사용해야 하는 경우, 엄격한 순환 일정을 시행하십시오.

디스크에 저장된 정적 액세스 키보다 IAM 역할 및 SSO와 같은 동적 자격 증명 획득 방법을 우선시함으로써 AWS CLI 사용과 관련된 공격 표면을 크게 줄일 수 있습니다.