CSPM은 Cloud Security Posture Management의 약자로 클라우드에서 존재하는 설정 값, 구성요소와 같은 상태에서 발생할 수 있는 보안적 위험사항들을 자동으로 찾아내고 관리해주는 시스템을 말합니다.
이러한 시스템은 아래와 같은 기업에서 이용할 수 있습니다.
- 온프레미스 환경에서 운영중인 서비스를 클라우드 환경으로 마이그레이션하려고 하는 기업.
- 기존에 클라우드 환경에서 운영중인 서비스의 인프라에 대해 보안성 점검 및 관리를 하고자 하는 기업.
기본적인 시스템의 구조는 아래 이미지와 같습니다.
이 프로젝트는 위 구조도에서 Engine Server에 해당합니다.
Engine Server는 다음과 같은 API 항목을 제공합니다. (Swagger)
위 사진은 서버를 올린 http://[Engine-Server-IP]/swagger-ui/index.html 에서 확인 가능합니다.
History Id, Resource Id, Result(Y, N, ?) 를 통해 점검 결과를 읽어옵니다.
(모든 파라미터는 생략할 수 있고, 추가된 파라미터를 조합해 필터링한 결과를 )
Request : [GET] http://127.0.0.1:10831/assessment-results/?historyId=ch4njun&result=Y
Response :
[
{
"accessKey": "string",
"id": 0,
"resourceId": "string",
"resourceName": "string",
"resourceType": "string",
"service": "string",
"tag": "string"
}
]
Id(Primary Key) 를 통해 하나의 점검 결과를 읽어옵니다.
Request : [GET] http://127.0.0.1:10831/assessment-results/12
Response :
{
"accessKey": "string",
"id": 0,
"resourceId": "string",
"resourceName": "string",
"resourceType": "string",
"service": "string",
"tag": "string"
}
Request Body를 통해 History Id, Access Key, Secret Key, Region, Services 를 전달해 해당 계정에 대한 클라우드 점검 스크립트를 동작시킵니다.
엔진 서버의 파일 시스템에 포함되어 있는 점검 스크립트를 동작시키며 점검 결과는 연결되어있는 Database에 저장합니다.
Request : [POST] http://127.0.0.1:10831/assessment-results
Request Body :
{
"accessKey": "string",
"regionName": "string",
"secretKey": "string"
}
Response :
{
"accessKey": "string",
"id": 0,
"resourceId": "string",
"resourceName": "string",
"resourceType": "string",
"service": "string",
"tag": "string"
}
이미 점검이 완료된 결과를 수정합니다. 인터뷰 항목에 대해서 사용자가 코멘트와 함께 수정할 때 해당 API를 이용해 Database에 있는 값을 수정할 수 있습니다.
Request : [POST] http://127.0.0.1:10831/assessment-results
Request Body :
{
"interview": true,
"interviewContent": "string",
"result": "string"
}
Response :
{
"accessKey": "string",
"id": 0,
"resourceId": "string",
"resourceName": "string",
"resourceType": "string",
"service": "string",
"tag": "string"
}
History Id를 통해 하나의 History 정보를 읽어옵니다.
Request : [GET] http://127.0.0.1:10831/histories/ch4njun
Response :
{
"historyId": "string",
"status": "string"
}
Request Body에 전달되는 History Id들을 삭제합니다. History Id를 삭제할 경우 해당 Id에 대한 점검결과(AssessmentResult)도 함께 삭제됩니다.
Request : [DELETE] http://127.0.0.1:10831/histories
Request Body :
{
"accessKeys": [
"string"
]
}
Response : 200 OK
파라미터로 전달되는 AccessKey, Service(IAM, EC2, ...) 를 통해 리소스 목록을 읽어옵니다.
(파라미터 Service는 생략할 수 있습니다.)
Request : [GET] http://127.0.0.1:10831/resources?accessKey=ABCDEFG
Response :
[
{
"accessKey": "string",
"id": 0,
"resourceId": "string",
"resourceName": "string",
"resourceType": "string",
"service": "string",
"tag": "string"
}
]
Id(Primary Key)를 통해 하나의 Resource 목록을 읽어옵니다.
Request : [GET] http://127.0.0.1:10831/resources/12
Response :
{
"accessKey": "string",
"id": 0,
"resourceId": "string",
"resourceName": "string",
"resourceType": "string",
"service": "string",
"tag": "string"
}
Request Body를 통해 Access Key, Secret Key, Region 를 전달해 해당 계정에 대한 리소스 목록을 수집합니다.
엔진 서버의 파일 시스템에 포함되어 있는 리소스 스크립트를 동작시키며 수집한 리소스 목록은 연결되어있는 Database에 저장합니다.
Request : [POST] http://127.0.0.1:10831/resources
Request Body :
{
"accessKey": "string",
"regionName": "string",
"secretKey": "string"
}
Response :
{
"message": "string",
"output": "string"
}
Request Body에 전달되는 AccessKey들의 리소스 목록을 삭제합니다.
Request : [DELETE] http://127.0.0.1:10831/resources
Request Body :
{
"accessKeys": [
"string"
]
}
Response : 200 OK