액세스 키 보안 강화

액세스 키 보안 강화

당신의 액세스 키를 가진 사람은 AWS 리소스에 대한 접근 수준이 당신과 동일해져요. 따라서 AWS는 액세스 키를 보호하기 위해 상당한 노력을 기울이고, 공동 책임 모델(shared-responsibility model)에 따라 여러분도 그렇게 해야 해요. 액세스 키를 보호하는 데 도움이 되는 지침을 보려면 아래 섹션을 펼쳐 보세요.

출처: 문서

본문

참고 조직마다 이 문서에서 설명하는 것과 다른 보안 요구사항과 정책이 있을 수 있어요. 여기 제공되는 제안은 일반적인 지침으로 간주해 주세요.

계정을 보호하는 가장 좋은 방법 중 하나는 AWS 계정 루트 사용자에게 액세스 키를 두지 않는 것입니다. 루트 사용자 액세스 키가 반드시 필요한 게 아니라면(드문 경우), 생성하지 않는 것이 좋아요. 대신 일상적인 관리 작업을 위해 AWS IAM Identity Center에 관리 사용자를 만들면 돼요. IAM Identity Center에서 관리 사용자를 만드는 방법은 IAM Identity Center 사용자 가이드의 시작하기(Getting started) 문서를 참고하세요.

계정에 이미 루트 사용자 액세스 키가 있다면 다음을 권장해요. 애플리케이션에서 현재 액세스 키를 사용 중인 곳(있다면)을 찾아 루트 사용자 액세스 키를 IAM 사용자 액세스 키로 교체하세요. 그런 다음 루트 사용자 액세스 키를 비활성화하고 제거하세요. 액세스 키를 업데이트하는 방법은 액세스 키 업데이트(Update access keys) 문서를 참고하세요.

여러 시나리오에서 IAM 사용자처럼 만료되지 않는 장기 액세스 키는 필요하지 않을 수 있어요. 대신 IAM 역할을 만들고 임시 보안 자격 증명을 생성할 수 있어요. 임시 보안 자격 증명은 액세스 키 ID와 보안 액세스 키로 구성되지만, 자격 증명이 만료되는 시점을 알려주는 보안 토큰도 포함해요.

IAM 사용자와 루트 사용자와 연결된 장기 액세스 키는 직접 해지하기 전까지 유효해요. 그러나 IAM 역할과 AWS Security Token Service의 다른 기능으로 얻은 임시 보안 자격 증명은 짧은 시간 후 만료돼요. 자격 증명이 우발적으로 노출될 경우를 대비해 위험을 줄이려면 임시 보안 자격 증명을 사용하세요.

다음 시나리오에서는 IAM 역할과 임시 보안 자격 증명을 사용하세요.

  • Amazon EC2 인스턴스에서 실행 중인 애플리케이션 또는 AWS CLI 스크립트가 있는 경우. 애플리케이션에서 액세스 키를 직접 사용하지 마세요. 액세스 키를 애플리케이션에 전달하거나, 애플리케이션에 임베드하거나, 어떤 소스에서든 애플리케이션이 액세스 키를 읽도록 두지 마세요. 대신 애플리케이션에 적절한 권한이 있는 IAM 역할을 정의하고 EC2용 역할과 함께 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작하세요. 이렇게 하면 IAM 역할이 Amazon EC2 인스턴스와 연결돼요. 또한 이 방법을 통해 애플리케이션이 AWS에 프로그래매틱 호출을 하는 데 사용할 수 있는 임시 보안 자격 증명을 얻을 수 있어요. AWS SDK와 AWS Command Line Interface(AWS CLI)는 역할에서 임시 자격 증명을 자동으로 가져올 수 있어요.
  • 교차 계정 액세스를 부여해야 하는 경우. IAM 역할을 사용해 계정 간 신뢰를 설정한 다음, 한 계정의 사용자에게 신뢰하는 계정에 접근할 수 있는 제한된 권한을 부여하세요. 자세한 내용은 IAM 튜토리얼: IAM 역할을 사용해 AWS 계정 간 액세스 위임 문서를 참고하세요.
  • 모바일 앱이 있는 경우. 앱에 암호화된 저장소에도 액세스 키를 임베드하지 마세요. 대신 Amazon Cognito로 앱의 사용자 자격 증명을 관리하세요. 이 서비스를 사용하면 Login with Amazon, Facebook, Google 또는 OpenID Connect(OIDC) 호환 ID 공급자로 사용자를 인증할 수 있어요. 그런 다음 Amazon Cognito 자격 증명 공급자를 사용해 앱이 AWS에 요청할 때 사용하는 자격 증명을 관리할 수 있어요.
  • AWS로 페더레이션하고 조직이 SAML 2.0을 지원하는 경우. SAML 2.0을 지원하는 ID 공급자가 있는 조직에서 일한다면 공급자가 SAML을 사용하도록 구성하세요. SAML을 사용해 AWS와 인증 정보를 교환하고 임시 보안 자격 증명 세트를 받을 수 있어요. 자세한 내용은 SAML 2.0 페더레이션 문서를 참고하세요.
  • AWS로 페더레이션하고 조직에 온프레미스 ID 스토어가 있는 경우. 사용자가 조직 내부에서 인증할 수 있다면, AWS 리소스 접근을 위한 임시 보안 자격 증명을 발급하는 애플리케이션을 작성할 수 있어요. 자세한 내용은 AWS 콘솔에 사용자 지정 ID 브로커 액세스 활성화 문서를 참고하세요.
  • IAM 정책의 조건을 사용해 예상된 네트워크에서만 접근을 허용하는 경우. 공용 IP 주소나 Virtual Private Cloud(VPC) 같은 예상 네트워크만 지정하고 허용하는 조건이 포함된 IAM 정책을 구현해 액세스 키가 사용될 수 있는 위치와 방법을 제한할 수 있어요. 이렇게 하면 액세스 키가 예상되고 허용된 네트워크에서만 사용될 수 있다는 것을 알 수 있어요.

참고 AWS 리소스에 프로그래매틱 액세스가 필요한 애플리케이션과 함께 Amazon EC2 인스턴스를 사용하고 있나요? 그렇다면 EC2용 IAM 역할을 사용하세요.

AWS에 프로그래매틱 액세스를 위해 액세스 키를 만들어야 한다면 IAM 사용자에 대해 만들고, 사용자에게 필요한 권한만 부여하세요.

IAM 사용자 액세스 키를 보호하기 위해 다음 주의사항을 지키세요.

  • 코드에 액세스 키를 직접 임베드하지 마세요. AWS SDK와 AWS 명령줄 도구를 사용하면 액세스 키를 알려진 위치에 배치해 코드에 두지 않아도 돼요. 액세스 키는 다음 위치 중 하나에 두세요.
    • AWS 자격 증명 파일(AWS credentials file). AWS SDK와 AWS CLI는 당신이 AWS 자격 증명 파일에 저장한 자격 증명을 자동으로 사용해요. AWS 자격 증명 파일 사용에 대한 정보는 사용 중인 SDK의 문서를 참고하세요. 예를 들어 AWS SDK for Java 개발자 가이드의 AWS 자격 증명 및 리전 설정과 AWS Command Line Interface 사용자 가이드의 구성 및 자격 증명 파일을 참고하세요. AWS SDK for .NET과 AWS Tools for Windows PowerShell에 자격 증명을 저장하려면 SDK Store를 사용하는 것을 권장해요. 자세한 내용은 AWS SDK for .NET 개발자 가이드의 SDK Store 사용을 참고하세요.
    • 환경 변수(Environment variables). 다중 테넌트 시스템에서는 시스템 환경 변수보다 사용자 환경 변수를 선택하세요. 환경 변수로 자격 증명을 저장하는 방법은 AWS Command Line Interface 사용자 가이드의 환경 변수를 참고하세요.
  • 애플리케이션마다 다른 액세스 키를 사용하세요. 이렇게 하면 권한을 격리하고, 액세스 키가 노출되면 개별 애플리케이션의 액세스 키를 해지할 수 있어요. 애플리케이션마다 별도의 액세스 키를 두면 AWS CloudTrail 로그 파일에도 고유한 항목이 생성돼요. 이 구성 덕분에 어떤 애플리케이션이 특정 작업을 수행했는지 더 쉽게 판단할 수 있어요.
  • 필요할 때 액세스 키를 업데이트하세요. 액세스 키가 유출될 위험이 있다면 액세스 키를 업데이트하고 이전 액세스 키를 삭제하세요. 자세한 내용은 액세스 키 업데이트(Update access keys) 문서를 참고하세요.
  • 사용하지 않는 액세스 키를 제거하세요. 사용자가 조직을 떠나면 해당 IAM 사용자를 제거해 더 이상 리소스에 접근하지 못하게 하세요. 액세스 키가 마지막으로 사용된 시점을 확인하려면 GetAccessKeyLastUsed API(AWS CLI 명령: aws iam get-access-key-last-used)를 사용하세요.
  • 가장 민감한 API 작업에는 임시 자격 증명 사용과 다중 인증 구성을 함께 활용하세요. IAM 정책으로 사용자가 호출할 수 있는 API 작업을 지정할 수 있어요. 특히 민감한 작업을 수행하기 전에 사용자가 AWS MFA로 인증하도록 요구하는 추가 보안이 필요할 수 있어요. 예를 들어 사용자가 Amazon EC2 RunInstances, DescribeInstances, StopInstances 작업을 수행하도록 허용하는 정책이 있을 수 있어요. 하지만 TerminateInstances 같은 파괴적인 작업은 제한하고, 사용자가 AWS MFA 기기로 인증한 경우에만 수행할 수 있게 하고 싶을 수 있어요. 자세한 내용은 MFA로 API 액세스 보안 강화 문서를 참고하세요.

AWS 모바일 앱을 사용하면 제한된 AWS 서비스와 기능 세트에 접근할 수 있어요. 모바일 앱은 이동 중에도 사고 대응을 지원해요. 자세한 내용과 앱 다운로드는 AWS Console 모바일 애플리케이션을 참고하세요.

콘솔 비밀번호나 액세스 키로 모바일 앱에 로그인할 수 있어요. 모범 사례로 루트 사용자 액세스 키는 사용하지 마세요. 대신 모바일 기기에 비밀번호나 생체 인식 잠금을 사용하는 것에 더해, 모바일 앱으로 AWS 리소스를 관리하기 위한 전용 IAM 사용자를 만들 것을 강력히 권장해요. 모바일 기기를 분실하면 IAM 사용자의 액세스를 제거할 수 있어요.

액세스 키로 로그인하기 (모바일 앱)

  1. 모바일 기기에서 앱을 엽니다.
  2. 기기에 자격 증명을 처음 추가하는 경우 자격 증명 추가(Add an identity) 를 선택한 다음 액세스 키(Access keys) 를 선택합니다. 다른 자격 증명으로 이미 로그인했다면 메뉴 아이콘을 선택하고 자격 증명 전환(Switch identity) 을 선택합니다. 그런 다음 다른 자격 증명으로 로그인(Sign in as a different identity) 을 선택하고 액세스 키(Access keys) 를 선택합니다.
  3. 액세스 키(Access keys) 페이지에서 정보를 입력합니다.
    • 액세스 키 ID(Access key ID) – 액세스 키 ID를 입력합니다.
    • 보안 액세스 키(Secret access key) – 보안 액세스 키를 입력합니다.
    • 자격 증명 이름(Identity name) – 모바일 앱에 표시될 자격 증명 이름을 입력합니다. IAM 사용자 이름과 일치할 필요는 없어요.
    • 자격 증명 PIN(Identity PIN) – 향후 로그인에 사용할 개인 식별 번호(PIN)를 만듭니다.

    참고 AWS 모바일 앱에서 생체 인식을 활성화하면 PIN 대신 지문이나 얼굴 인식으로 확인하라는 메시지가 표시돼요. 생체 인식이 실패하면 PIN을 사용하라는 메시지가 표시될 수 있어요.

  4. 키 확인 및 추가(Verify and add keys) 를 선택합니다. 이제 모바일 앱을 사용해 선택한 리소스 세트에 접근할 수 있어요.

다음 문서는 AWS SDK와 AWS CLI를 액세스 키와 함께 사용하도록 설정하는 방법을 안내해요.

콘솔 접근에 액세스 키와 비밀 키 자격 증명 사용

액세스 키와 비밀 키 자격 증명을 AWS CLI뿐 아니라 AWS Management Console 직접 접근에도 사용할 수 있어요. AWS STS GetFederationToken API 호출로 이 작업을 할 수 있어요. GetFederationToken이 제공한 임시 자격 증명과 토큰으로 콘솔 URL을 구성하면 IAM 주체가 콘솔에 접근할 수 있어요. 자세한 내용은 AWS 콘솔에 사용자 지정 ID 브로커 액세스 활성화 문서를 참고하세요.

명확히 하자면, IAM 또는 루트 사용자 자격 증명으로 콘솔에 직접 로그인할 때 MFA가 활성화되어 있으면 MFA가 필요해요. 하지만 위에서 설명한 방법(GetFederationToken으로 임시 자격 증명 사용)을 사용하면 MFA가 필요하지 않아요.

액세스 키 감사

코드의 AWS 액세스 키를 검토해 키가 당신이 소유한 계정에서 온 것인지 판단할 수 있어요. 액세스 키 ID를 aws sts get-access-key-info AWS CLI 명령이나 GetAccessKeyInfo AWS API 작업으로 전달하면 됩니다.

AWS CLI와 AWS API 작업은 액세스 키가 속한 AWS 계정의 ID를 반환해요. AKIA로 시작하는 액세스 키 ID는 IAM 사용자 또는 AWS 계정 루트 사용자의 장기 자격 증명이에요. ASIA로 시작하는 액세스 키 ID는 AWS STS 작업으로 생성된 임시 자격 증명이에요. 응답의 계정이 당신의 것이라면 루트 사용자로 로그인해 루트 사용자 액세스 키를 검토할 수 있어요. 그런 다음 자격 증명 보고서를 받아 어떤 IAM 사용자가 키를 소유했는지 확인할 수 있어요. ASIA 액세스 키의 임시 자격 증명을 누가 요청했는지 확인하려면 CloudTrail 로그에서 AWS STS 이벤트를 확인하세요.

보안 목적으로 AWS CloudTrail 로그 검토를 통해 AWS에서 누가 작업을 수행했는지 확인할 수 있어요. 역할 신뢰 정책에서 sts:SourceIdentity 조건 키를 사용해 사용자가 역할을 수임할 때 자격 증명을 지정하도록 요구할 수 있어요. 예를 들어 IAM 사용자가 자신의 사용자 이름을 소스 자격 증명으로 지정하도록 요구할 수 있어요. 이렇게 하면 AWS에서 특정 작업을 누가 수행했는지 판단하는 데 도움이 돼요. 자세한 내용은 sts:SourceIdentity 문서를 참고하세요.

이 작업은 액세스 키의 상태를 나타내지 않아요. 키는 활성, 비활성 또는 삭제 상태일 수 있어요. 활성 키도 작업을 수행할 권한이 없을 수 있어요. 삭제된 액세스 키를 제공하면 키가 존재하지 않는다는 오류가 반환될 수 있어요.

더 알아보기 (Learn more)