SecurityHub의 API에서 보안 정보를 검색해 봅니다.

4663 단어 C#SecurityHubAWS
SecurityHub의 API를 사용하여 AWS 화면에 나오는 정보를 수집하려고했습니다.

하고 싶은 일



AWS Security Hub 보안 표준에서 확인할 수 있는 다음 정보를 얻고 싶습니다.
(1) 각 벤치 마크의 각 항목의 상태 (성공 또는 실패)
이하의 「스테이터스」라든가 「타이틀」이라든가.

(2) 각 벤치 마크의 각 항목의 자원 별 상태
각 항목의 상세 화면에서는, 이하와 같이 항목과 관련된 자원 및 자원 별 상태가 표시되므로, 그것을 취득하고 싶다.


우선은 아무것도 생각하지 않고 정보 취득



언어는 C#으로 AWS SDK의 SecurityHub를 사용한다.

GetFindings 메서드로 정보를 가져옵니다. nextToken이 있으면 모든 정보를 얻을 때까지 반복하는 것도 잊지 마세요.
※ API의 호출에는 SecurityHub의 Client를 적절히 생성할 필요가 있다.
string nextToken = null;

do
  {
    var request = new GetFindingsRequest();
    request.MaxResults = 100;
    request.NextToken = nextToken;

    var response = securityHubClient.GetFindingsAsync(request).Result;

    var data = response.Findings;
    SecurityFindings.AddRange(data);

    nextToken = response.NextToken;
    request.NextToken = nextToken;

    response = securityHubClient.GetFindingsAsync(request).Result;

  } while (nextToken != null);

취득한 결과가 이하.

조금 많지 않나요····?
모범 사례가 113개, CIS가 43개이므로 모두 156개라고 생각했지만.

도대체 무엇이 많은가



데이터의 내용을 쫓아 보았는데, 이하 2개가 원인같다.
※ 제대로 SecurityHub의 문서를 사전에 읽으면 바로 알았을지도 모른다.

(1) 레코드 상태가 "ARCHIVE"인 것이 섞여 있습니다.
아무래도 과거의 스테이터스를 내부적으로 유지하고 있는 모습. 확실히 잘 살펴보면, 각 항목에 「갱신 일시」같은 것이 있다.
그러나 ARCHIVE의 것을 제외한 결과, 화면에 표시되고 있는 것이 없어지는, 같은 것은 피하고 싶다.

(2) 한 항목에 여러 리소스의 결과가있는 경우 GetFindings의 결과 (인스턴스)가 다릅니다.
응답 내용을 읽으면 1항목 1리소스로 1객체의 모습. 그래서 이들을 해석하면 요구하는 것을 얻을 수 있을 것이다.
다만, 응답내의 Resources는, 이름대로 복수형이므로, 장래 같은 결과는 여기에 정리한다니 구상이 있을지도・・・.

조건을 결정하고 필터링



우선 조사 결과로부터, 레코드의 상태가 ACTIVE와 동일한 것만 취득해 본다.
그러자 245였던 결과가 215가 되었다. 조금만 줄었지만, 이제 여기에서 생각하는 것도 귀찮아서 일단 표시해 본다.

콘솔로 출력



출력용으로 적당한 모델을 작성해, 취득한 정보를 콘솔에 출력시켜 보았다.



분명히, 잡힌 모습. 좋았어요.

항목의 설명이나 대처 방법도 취득할 수 있기 때문에, 나가려고 하면 낼 수 있다.

다른 서비스(Inspector)와 제휴하고 있으면, 거기의 정보도 취득할 수 있을 것 같아···

이상.

좋은 웹페이지 즐겨찾기