AWS CLI를 사용하여 자격 증명을 안전하게 관리하기 위한 모범 사례
AWS CLI 자격 증명 보안을 위한 확고한 모범 사례를 알아보세요. 이 가이드에서는 자격 증명 로드 순서, 구성 파일 및 환경 변수의 올바른 사용법을 다루며, 무엇보다 중요한 것은 수명이 긴 정적 액세스 키 저장 위험을 제거하기 위해 IAM 역할과 AWS SSO를 활용하는 방법입니다. 이러한 전략을 구현하여 AWS 자동화 및 관리 워크플로우에서 강력한 보안을 달성하세요.
AWS CLI 자격 증명을 안전하게 관리하기 위한 모범 사례
AWS CLI 자격 증명은 실제 클라우드 리소스를 생성, 삭제 및 노출할 수 있으므로 액세스 키 유출은 작은 실수가 아닙니다. 가장 안전한 설정은 사람에게 IAM Identity Center를 통해 단기 자격 증명을 제공하고 워크로드에는 역할을 통해 임시 자격 증명을 제공하는 것입니다.
AWS CLI로 자격 증명을 안전하게 관리하기 위한 이러한 모범 사례는 CLI가 자격 증명을 찾는 위치, 프로필을 사용해야 하는 시기, 스크립트에서 장기 고정 키를 피하는 방법을 설명합니다.
AWS CLI 자격 증명 로딩 순서 이해
AWS CLI는 공급자 체인을 통해 자격 증명을 확인합니다. 정확한 체인은 CLI 버전 및 구성에 따라 다를 수 있지만, 가장 자주 문제를 해결하게 될 실질적인 순서는 다음과 같습니다.
- 환경 변수:
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY, 선택적으로AWS_SESSION_TOKEN. - 역할 가정 및 웹 ID 구성: 임시 자격 증명을 위해 AWS STS를 호출하도록 CLI에 지시하는 프로필.
- IAM Identity Center 자격 증명:
aws configure sso또는aws configure sso-session으로 생성된 프로필. - 공유 자격 증명 파일: 일반적으로
~/.aws/credentials. - 공유 구성 파일: 일반적으로
~/.aws/config,credential_process항목 포함. - 컨테이너 자격 증명: ECS 작업 역할 및 호환되는 컨테이너 자격 증명 엔드포인트.
- EC2 인스턴스 프로필 자격 증명: 인스턴스 메타데이터 서비스(IMDS)의 임시 자격 증명.
AWS CLI는 일반 명령에 --access-key-id 또는 --secret-access-key 명령줄 플래그를 사용하지 않습니다. 스크립트에서 이러한 플래그를 보는 경우 다른 도구나 SDK의 AWS CLI 동작과 혼동하고 있을 가능성이 높습니다.
1. 구성 파일에서 자격 증명 보호 (~/.aws/credentials)
공유 자격 증명 파일(일반적으로 ~/.aws/credentials)은 편리하지만 IAM Identity Center나 역할을 사용할 수 없는 경우의 대비책이어야 합니다. 거기에 정적 키를 저장해야 하는 경우 파일을 보호하고 권한을 좁게 유지하세요.
파일 보호 및 권한
이 파일에 대한 읽기 액세스를 제한하는 것이 중요합니다. Linux/macOS 시스템에서는 소유자만 파일을 읽거나 쓸 수 있도록 권한을 설정하세요.
chmod 600 ~/.aws/credentials
분리를 위한 프로필 사용
고유한 프로필을 사용하면 다양한 환경(예: 개발, 스테이징, 프로덕션) 또는 다양한 계정에 대한 자격 증명을 분리할 수 있습니다. 이는 실수로 인한 교차 환경 작업을 방지합니다.
~/.aws/credentials 예시:
[default]
aws_access_key_id = AKIAEXAMPLE000000000
aws_secret_access_key = exampleSecretAccessKeyDoNotUse
[production-user]
aws_access_key_id = AKIAEXAMPLE111111111
aws_secret_access_key = anotherExampleSecretDoNotUse
명명된 프로필을 사용하는 경우 --profile 플래그로 지정해야 합니다.
aws s3 ls --profile production-user
2. 환경 변수 활용
환경 변수는 AWS 구성 파일을 편집하지 않고 현재 프로세스 및 해당 하위 프로세스에 자격 증명을 제공합니다. 임시 세션 및 CI 작업에 유용하지만 프로세스 환경, 디버그 로그 또는 부주의한 셸 기록을 통해 여전히 유출될 수 있습니다.
셸 세션에서 다음 변수를 설정하세요.
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_SESSION_TOKEN="temporary-session-token-if-using-sts"
export AWS_DEFAULT_REGION="us-east-1"
우선 순위에 관한 중요 참고 사항: 환경 변수를 통해 설정된 자격 증명은 자격 증명 로딩 체인에서 더 높은 위치에 있으므로 ~/.aws/credentials 파일에 있는 자격 증명을 항상 재정의합니다.
보안 경고: 특히 공유 터미널이나 로깅될 수 있는 스크립트에서 환경 변수를 내보낼 때는 주의하세요. 사용 후 즉시 설정을 해제하세요.
unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY unset AWS_SESSION_TOKEN
3. AWS 워크로드에는 IAM 역할 선호
EC2, Lambda, ECS, EKS와 같은 AWS 인프라에서 실행되는 워크로드의 경우 정적 자격 증명을 사용하지 마세요. IAM 역할을 사용하면 AWS가 자동으로 임시 자격 증명을 발급합니다.
EC2에서 인스턴스 프로필은 IMDS를 통해 임시 자격 증명을 노출합니다. ECS에서 작업 역할은 컨테이너 자격 증명 엔드포인트를 통해 자격 증명을 노출합니다. EKS에서 서비스 계정용 IAM 역할은 웹 ID 토큰을 사용합니다. AWS CLI 및 SDK는 장기 키를 디스크에 저장하지 않고 이러한 공급자를 사용하는 방법을 알고 있습니다.
작동 방식:
- EC2 인스턴스가 인스턴스 프로필을 통해 연결된 IAM 역할과 함께 시작됩니다.
- 해당 인스턴스에서 실행되는 CLI는 임시 자격 증명을 위해 인스턴스 메타데이터 서비스(IMDS)를 쿼리합니다.
- CLI는 이후 모든 API 호출에 대해 이러한 임시 자격 증명을 사용합니다.
이렇게 하면 장기 액세스 키와 관련된 위험이 완전히 제거됩니다.
4. 사람 액세스에는 IAM Identity Center 사용
랩톱에서 AWS CLI를 사용하는 엔지니어의 경우 IAM Identity Center가 일반적으로 IAM 사용자 액세스 키보다 안전합니다. 브라우저를 통해 로그인하고 계정과 역할을 선택하면 CLI가 캐시된 단기 자격 증명을 사용합니다.
다음과 같이 구성하세요.
aws configure sso
그런 다음 세션이 만료되면 로그인하세요.
aws sso login --profile <profile-name>
IAM Identity Center는 이전에 AWS SSO라고 불렸으므로 CLI 명령 및 구성 키에 여전히 sso가 표시될 수 있습니다.
5. 외부 브로커에는 credential_process 사용
CLI가 외부 도구(예: 볼트 에이전트 또는 엔터프라이즈 자격 증명 브로커)를 호출하여 자격 증명을 동적으로 가져오도록 구성할 수 있습니다. 이는 ~/.aws/config에 지정됩니다.
~/.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 역할(인스턴스 프로필)을 사용하세요.
- IAM Identity Center 사용: 사람의 대화형 사용의 경우 IAM Identity Center를 사용하여 여러 계정에 대한 액세스를 관리하세요.
- 키를 하드코딩하지 마세요: 스크립트, 소스 코드 또는 명령 기록에 액세스 키를 직접 넣지 마세요.
- 자격 증명 파일 보호:
~/.aws/credentials에 대한 파일 시스템 권한(chmod 600)을 제한하세요. - 키를 정기적으로 교체: 정적 키를 사용해야 하는 경우 엄격한 교체 일정을 적용하세요.
기본값은 임시 자격 증명이어야 합니다. 사람에게는 IAM Identity Center, 워크로드에는 IAM 역할, 브로커된 엔터프라이즈 액세스에는 credential_process를 사용하세요. 더 나은 옵션이 없을 때만 정적 액세스 키를 사용하고, 그런 경우에는 키를 엄격하게 범위를 지정하고, 교체하고, 종속성이 사라지는 즉시 제거하세요.