사전 서명된 요청 식별 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사전 서명된 요청 식별

미리 서명된 URL을 사용한 요청 식별

Amazon S3는 요청 수준에서 사용을 모니터링하기 위한 두 가지 기본 제공 메커니즘, 즉 Amazon S3 서버 액세스 로그와 AWS CloudTrail 데이터 이벤트를 제공합니다. 두 메커니즘 모두 미리 서명된 URL 사용을 식별할 수 있습니다. 

사전 서명된 URL 사용에 대한 로그를 필터링하려면 인증 유형을 사용할 수 있습니다. 서버 액세스 로그의 경우 인증 유형 필드를 살펴보십시오. 인증 유형 필드는 Amazon Athena 테이블에 정의될 때 일반적으로 authtype으로 지정됩니다. 예를 들어 CloudTrail, 현장에서 AuthenticationMethod확인해 보십시오. additionalEventData 두 경우 모두 미리 서명된 URL을 사용하는 요청의 필드 값은 이고 다른 대부분의 요청의 필드 값은 AuthHeader 입니다. QueryString

QueryString사용량이 항상 미리 서명된 URL과 연관되는 것은 아닙니다. 검색을 미리 서명된 URL 사용으로만 제한하려면 쿼리 문자열 파라미터가 포함된 요청을 찾아보세요. X-Amz-Expires 서버 액세스 로그의 경우 Request-URI를 검사하여 쿼리 문자열에 X-Amz-Expires 매개 변수가 있는 요청을 찾아보십시오. 의 경우 CloudTrail, requestParameters 요소에 요소가 있는지 검사하십시오. X-Amz-Expires

{"Records": [{…, "requestParameters": {…, "X-Amz-Expires": "300"}}, …]}

다음 Athena 쿼리는 이 필터를 적용합니다.

SELECT * FROM {athena-table} WHERE authtype = 'QueryString' AND request_uri LIKE '%X-Amz-Expires=%';

AWS CloudTrail Lake의 경우 다음 쿼리는 이 필터를 적용합니다.

SELECT * FROM {data-store-event-id} WHERE additionalEventData['AuthenticationMethod'] = 'QueryString' AND requestParameters['X-Amz-Expires'] IS NOT NULL

다른 유형의 사전 서명된 요청 식별

POST 요청에는 Amazon S3 서버 액세스 로그와 HtmlForm 같은 고유한 인증 유형도 CloudTrail 있습니다. 이 인증 유형은 덜 일반적이므로 사용자 환경에서 이러한 요청을 찾지 못할 수도 있습니다.

다음 Athena 쿼리는 다음에 대한 필터를 적용합니다. HtmlForm

SELECT * FROM {athena-table} WHERE authtype = 'HtmlForm';

CloudTrail Lake의 경우 다음 쿼리가 필터를 적용합니다.

SELECT * FROM {data-store-event-id} WHERE additionalEventData['AuthenticationMethod'] = 'HtmlForm'

요청 패턴 식별

이전 섹션에서 설명한 기술을 사용하여 미리 서명된 요청을 찾을 수 있습니다. 하지만 이 데이터를 유용하게 활용하려면 패턴을 찾아야 합니다. 간단한 쿼리 TOP 10 결과를 통해 통찰력을 얻을 수 있지만, 충분하지 않은 경우 다음 표의 그룹화 옵션을 사용하세요.

그룹화 옵션

서버 액세스 로그

CloudTrail호수

설명

사용자 에이전트

GROUP BY useragent

GROUP BY userAgent

이 그룹화 옵션은 요청의 출처와 목적을 찾는 데 도움이 됩니다. 사용자 에이전트는 사용자가 제공하며 인증 또는 권한 부여 메커니즘으로서 신뢰할 수 없습니다. 하지만 패턴을 찾아보면 많은 것을 알 수 있습니다. 왜냐하면 대부분의 클라이언트는 적어도 부분적으로는 사람이 읽을 수 있는 고유한 문자열을 사용하기 때문입니다.

요청자

GROUP BY requester

GROUP BY userIdentity['arn']

이 그룹화 옵션은 요청에 서명한 IAM 보안 주체를 찾는 데 도움이 됩니다. 이러한 요청을 차단하거나 기존 요청에 대한 예외를 생성하는 것이 목적이라면 이러한 쿼리는 해당 목적에 필요한 충분한 정보를 제공합니다. IAM 모범 사례에 따라 역할을 사용하면 역할의 소유자가 명확하게 식별되므로 해당 정보를 사용하여 자세한 내용을 알아볼 수 있습니다.

소스 IP 주소

GROUP BY remoteip

GROUP BY sourceIPAddress

이 옵션은 Amazon S3에 도달하기 전 마지막 네트워크 변환 홉을 기준으로 그룹화합니다.

  • 트래픽이 NAT 게이트웨이를 통과하는 경우 이 주소가 NAT 게이트웨이 주소가 됩니다.

  • 트래픽이 인터넷 게이트웨이를 통과하는 경우 이 주소가 인터넷 게이트웨이로 트래픽을 보낸 퍼블릭 IP 주소가 됩니다.

  • 트래픽이 외부에서 발생하는 AWS경우 이 주소는 오리진과 연결된 공용 인터넷 주소가 됩니다.

  • 게이트웨이 가상 사설 클라우드 (VPC) 엔드포인트를 통과하는 경우 이 주소는 VPC에 있는 인스턴스의 IP 주소가 됩니다.

  • 퍼블릭 가상 인터페이스 (VIF) 를 통과하는 경우 이는 요청자의 온프레미스 IP 또는 IP 주소만 노출하는 프록시 서버 또는 방화벽과 같은 중개자의 IP가 됩니다.

  • 인터페이스 VPC 엔드포인트를 통과하는 경우 이는 VPC에 있는 인스턴스의 IP 주소일 수 있습니다. 다른 VPC 또는 온프레미스 네트워크의 IP 주소일 수도 있습니다. 퍼블릭 VIF와 마찬가지로 이 주소는 모든 중개자의 IP 주소일 수 있습니다.

이 데이터는 네트워크 제어를 적용하는 것이 목표인 경우 유용합니다. 네트워크마다 사설 IP 주소가 중복될 수 있으므로 이 옵션을 endpoint (서버 액세스 로그의 경우) 또는 vpcEndpointId ( CloudTrail Lake용) 등의 데이터와 결합하여 출처를 명확히 해야 할 수도 있습니다.

S3 버킷 이름

GROUP BY bucket_name

GROUP BY requestParameters['bucketName']

이 그룹화 옵션은 요청을 받은 버킷을 찾는 데 도움이 됩니다. 이를 통해 예외의 필요성을 파악할 수 있습니다.