AWS Identity and Access Management(IAM)는 보안 팀이 AWS Organizations의 멤버 계정에 대한 루트 액세스를 중앙에서 관리할 수 있는 새로운 기능을 출시합니다. 이제 루트 자격 증명을 손쉽게 관리하고 높은 권한이 요구되는 작업을 수행할 수 있습니다.
대규모로 루트 사용자 자격 증명 관리
오랫동안 Amazon Web Services(AWS) 계정은 계정에 무제한 액세스할 수 있는 높은 권한을 가진 루트 사용자 자격 증명이 부여된 상태로 프로비저닝되었습니다. 이 루트 액세스는 강력하지만 심각한 보안 위험을 초래하기도 했습니다. 다중 인증(MFA)과 같은 보호 계층을 추가하여 각 AWS 계정의 루트 사용자를 보호해야 했습니다. 보안 팀은 이러한 루트 자격 증명을 수동으로 관리하고 보호해야 했습니다. 이 프로세스에는 자격 증명을 주기적으로 교체하고, 안전하게 저장하고, 자격 증명이 보안 정책에 부합하는지 확인하는 작업이 포함되었습니다.
고객이 AWS 환경을 확장함에 따라 이러한 수작업 방식은 번거로워지고 오류가 발생하기 쉬워졌습니다. 일례로, 수백 또는 수천 개의 멤버 계정을 운영하는 대기업들은 모든 계정에서 루트 액세스를 일관되게 보호하는 데 어려움을 겪었습니다. 수작업은 운영 오버헤드를 가중시킬 뿐만 아니라 계정 프로비저닝에 지연을 초래하여 완전 자동화를 저해하고 보안 위험을 가중시켰습니다. 루트 액세스는 제대로 보호되지 않을 경우 계정 탈취 및 민감한 리소스에 대한 무단 액세스로 이어질 수 있습니다.
게다가 Amazon Simple Storage Service (Amazon S3) 버킷 정책 또는 Amazon Simple Queue Service (Amazon SQS) 리소스 정책의 잠금을 해제하는 등의 특정 루트 작업을 수행해야 할 때마다 보안 팀이 루트 자격 증명을 검색하고 사용해야 했는데, 이로 인해 공격 표면이 늘어났습니다. 엄격한 모니터링과 강력한 보안 정책이 있더라도 장기간 루트 자격 증명을 유지하면 잘못된 관리, 규정 준수 위험, 수작업에 따른 오류가 발생할 수 있습니다.
이에 보안 팀들은 보다 자동화되고 확장 가능한 솔루션을 찾기 시작했습니다. 보안 팀에게는 루트 자격 증명의 관리를 중앙 집중화하는 한편, 애초에 장기간 자격 증명이 없이 프로그래밍 방식으로 루트 액세스를 관리할 수 있는 방법이 필요했습니다.
루트 액세스를 중앙에서 관리
루트 액세스를 중앙에서 관리할 수 있는 새로운 기능을 활용하여, 여러 계정의 루트 자격 증명을 관리해야 하는 오랜 문제를 해결합니다. 이 새로운 기능을 지원하기 위해 루트 자격 증명의 중앙 관리와 루트 세션이라는 두 가지 필수 기능이 도입되었습니다. 이 두 기능은 AWS Origanizations 멤버 계정 전반의 루트 액세스를 관리할 수 있는 안전하고 확장 가능하며 규정에 부합하는 방법을 보안 팀에 제공합니다.
먼저 루트 자격 증명의 중앙 관리에 대해 살펴보겠습니다. 이제 이 기능을 통해 AWS Origanizations에 있는 모든 계정의 권한 있는 루트 자격 증명을 중앙에서 관리하고 보호할 수 있습니다. 루트 자격 증명 관리는 다음을 지원합니다.
장기간 루트 자격 증명 제거 – 이제 보안 팀이 멤버 계정에서 루트 사용자 자격 증명을 프로그래밍 방식으로 제거하여 장기간 권한을 가진 자격 증명이 도용될 위험이 없도록 할 수 있습니다.
자격 증명 복구 방지 – 자격 증명을 제거할 뿐만 아니라 복구를 방지하여 향후 의도치 않은 루트 액세스나 무단 루트 액세스를 방지합니다.
기본 보안 계정 프로비저닝 – 이제 처음부터 루트 자격 증명 없이 멤버 계정을 생성할 수 있으므로, 더 이상 계정 프로비저닝 후 MFA와 같은 추가 보안 조치를 적용할 필요가 없습니다. 기본적으로 계정에 보안이 적용되므로 장기간 루트 액세스와 관련한 보안 위험을 크게 줄이고 전체 프로비저닝 프로세스를 간소화할 수 있습니다.
규정 준수 지원 – 보안 팀은 루트 자격 증명 관리를 통해 모든 멤버 계정의 루트 자격 증명 상태를 중앙에서 검색하고 모니터링하여 규정 준수 상태를 입증할 수 있습니다. 이러한 자동 가시성을 통해 장기간 루트 자격 증명이 존재하지 않음을 확인할 수 있으므로, 보안 정책 및 규제 요건을 충족하기가 용이합니다.
하지만 계정에서 일부 루트 작업을 계속 수행할 수 있도록 하려면 어떻게 해야 할까요? 오늘 출시한 두 번째 기능인 루트 세션이 이를 지원합니다. 이 기능은 장기간 루트 액세스를 유지하지 않아도 되도록 안전한 대안을 제공합니다. 보안 팀은 권한 있는 작업이 필요할 때마다 루트 자격 증명에 수동으로 액세스하는 대신, 이제 멤버 계정에 대한 단기적 작업 범위의 루트 액세스 권한을 부여받을 수 있습니다. 이 기능을 사용하면 장기간 루트 자격 증명 없이도 S3 버킷 정책 또는 SQS 대기열 정책 잠금 해제와 같은 작업을 안전하게 수행할 수 있습니다.
루트 세션의 주요 이점은 다음과 같습니다.
작업 범위가 한정된 루트 액세스 – AWS는 최소 권한 모범 사례에 따라 특정 작업에 대한 단기 루트 액세스를 지원합니다. 따라서 수행할 수 있는 작업의 범위가 제한되고 액세스 기간이 최소화되어 잠재적 위험이 줄어듭니다.
중앙 집중식 관리 – 이제 각 멤버 계정에 개별적으로 로그인할 필요 없이 중앙 계정에서 권한 있는 루트 작업을 수행할 수 있습니다. 이를 통해 프로세스가 간소화되고 보안 팀의 운영 부담을 줄어, 보안 팀이 더 높은 수준의 작업에 집중할 수 있게 됩니다.
AWS 모범 사례 준수 – 조직은 단기 자격 증명을 사용함으로써 최소 권한 원칙과 되도록 단기 임시 액세스를 사용하도록 하는 AWS 보안 모범 사례를 준수하게 됩니다.
이 새로운 기능은 모든 권한이 있는 루트 액세스를 허용하지 않습니다. 다음의 다섯 가지 특정 작업 중 하나를 수행하기 위한 임시 자격 증명을 제공합니다. 루트 계정의 중앙 관리를 통해 처음 세 가지 작업을 수행할 수 있습니다. 마지막 두 가지는 루트 세션을 활성화하면 수행할 수 있습니다.
루트 사용자 자격 증명 감사 – 루트 사용자 정보를 검토하기 위한 읽기 전용 액세스
계정 복구 재활성화 – 루트 자격 증명 없이 계정 복구 재활성화
루트 사용자 자격 증명 삭제 – 콘솔 암호, 액세스 키, 서명 인증서 및 MFA 디바이스 제거
S3 버킷 정책 잠금 해제 – 모든 위탁자를 거부하는 S3 버킷 정책 편집 또는 삭제
SQS 대기열 정책 잠금 해제 – 모든 위탁자를 거부하는 Amazon SQS 리소스 정책 편집 또는 삭제
멤버 계정의 루트 자격 증명을 획득하는 방법
이 데모에서는 관리 계정을 준비하고, 루트 자격 증명 없이 멤버 계정을 만들고, 멤버 계정에서 5개의 승인된 API 직접 호출 중 하나를 수행하기 위한 임시 루트 자격 증명을 획득하는 방법을 보여줍니다. 이미 생성된 조직이 있다고 가정해 보겠습니다.
먼저 멤버 계정을 만듭니다.
aws organizations create-account
–email stormacq+rootaccountdemo@amazon.com
–account-name ‘Root Accounts Demo account’
{
“CreateAccountStatus”: {
“Id”: “car-695abd4ee1ca4b85a34e5dcdcd1b944f”,
“AccountName”: “Root Accounts Demo account”,
“State”: “IN_PROGRESS”,
“RequestedTimestamp”: “2024-09-04T20:04:09.960000+00:00”
}
}
그런 다음 관리 계정에서 두 가지 새로운 기능을 활성화합니다. 이 명령은 새 기능을 사용하도록 설정하는 것 외에는 계정의 동작을 변경하지 않으므로 걱정하지 않아도 됩니다.
➜ aws organizations enable-aws-service-access
–service-principal iam.amazonaws.com
➜ aws iam enable-organizations-root-credentials-management
{
“OrganizationId”: “o-rlrup7z3ao”,
“EnabledFeatures”: [
“RootCredentialsManagement”
]
}
➜ aws iam enable-organizations-root-sessions
{
“OrganizationId”: “o-rlrup7z3ao”,
“EnabledFeatures”: [
“RootSessions”,
“RootCredentialsManagement”
]
}
또는 관리 계정에서 콘솔을 사용할 수도 있습니다. 액세스 관리에서 계정 설정을 선택합니다.
이제 임시 루트 자격 증명을 요청할 준비가 되었습니다. 자격 증명의 범위를 특정 작업으로 한정하려면 다섯 가지 관리형 IAM 정책 중 하나를 전달해야 합니다.
➜ aws sts assume-root
–target-principal <my member account id>
–task-policy-arn arn=arn:aws:iam::aws:policy/root-task/S3UnlockBucketPolicy
{
“Credentials”: {
“AccessKeyId”: “AS….XIG”,
“SecretAccessKey”: “ao…QxG”,
“SessionToken”: “IQ…SS”,
“Expiration”: “2024-09-23T17:44:50+00:00”
}
}
액세스 키 ID, 시크릿 액세스 키 및 세션 토큰을 획득하고 나면 평소처럼 AWS Command Line Interface(AWS CLI) 또는 AWS SDK와 함께 사용합니다.
예를 들어 다음 세 가지 값을 환경 변수로 전달할 수 있습니다.
$ export AWS_ACCESS_KEY_ID=ASIA356SJWJITG32xxx
$ export AWS_SECRET_ACCESS_KEY=JFZzOAWWLocoq2of5Exxx
$ export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEMb//////////wEaCXVxxxx
이제 임시 자격 증명을 받았으니 멤버 계정에서 루트로 제한된 API 직접 호출을 할 수 있습니다. 먼저 루트 자격 증명이 있는지 확인합니다. Arn 필드를 통해 루트 계정으로 작업하고 있음을 확인할 수 있습니다.
# 직접 호출에서 호출자 신원을 확인하고 호출자가 멤버 계정에서 루트인지 확인합니다.
$ aws sts get-caller-identity
{
“UserId”: “012345678901”,
“Account”: “012345678901”,
“Arn”: “arn:aws:iam::012345678901:root”
}
그런 다음 S3에서 delete-bucket-policy를 사용하여 버킷에 적용된 잘못된 정책을 제거합니다. 잘못된 정책으로 인해 모든 사용자의 모든 버킷 액세스가 제거되었습니다. 이 정책을 제거하려면 루트 자격 증명이 필요합니다.
aws s3api delete-bucket-policy –bucket my_bucket_with_incorrect_policy
출력이 없으면 작업이 성공했음을 의미합니다. 이제 이 버킷에 올바른 액세스 정책을 적용할 수 있습니다.
자격 증명은 15분 동안만 유효합니다. 자격 증명을 JSON으로 가져오고, 올바른 환경 변수를 내보내고, 루트로 실행할 명령을 실행하는 프로세스를 자동화하는 짧은 쉘 스크립트를 작성했습니다.
가용성
루트 액세스의 중앙 관리는 루트 계정이 없는 AWS GovCloud(미국) 및 AWS 중국 리전을 제외한 모든 AWS 리전에서 추가 비용 없이 사용할 수 있습니다. 루트 세션은 어디서나 사용할 수 있습니다.
IAM 콘솔, AWS CLI 또는 AWS SDK를 통해 사용을 시작할 수 있습니다. 자세한 내용은 설명서에서 AWS 계정 루트 사용자를 참조하고 AWS 계정 보안 모범 사례를 따르세요.