지원되지 않는 리소스 유형에 대한 AWS Config 규칙을 생성하려면 어떻게 해야 하나요?

5분 분량
0

AWS Config에서 지원하지 않는 리소스 유형에 대한 규칙을 생성하려고 합니다.

간략한 설명

AWS Config를 통해 AWS 리소스의 지정된 구성 준수 여부를 확인하는 규칙을 생성할 수 있습니다. 기본적으로 AWS Config는 제한된 수의 AWS 리소스 유형을 지원합니다. 하지만 지원되지 않는 리소스 유형에 대한 사용자 지정 AWS Config 규칙을 생성할 수 있습니다.

사용자 지정 규칙을 배포하면 AWS Lambda가 리소스를 평가하는 함수를 생성합니다. 이 함수를 통해 지원되지 않는 리소스 유형을 평가하고 규정 준수 결과를 사용자 지정 규칙으로 반환할 수 있습니다.

**참고:**기본적으로 AWS Config는 지원되지 않는 리소스 유형의 이전 구성 또는 규정 준수 변경 사항을 캡처하지 않습니다. 그렇게 하려면 제삼자 리소스 구성 기록 단계를 완료하고 해당 사용자 지정 리소스 유형을 평가하는 규칙을 생성하세요. 사용자 지정 리소스를 기록하고 평가하는 방법에 대한 자세한 내용은 AWS Config 사용자 지정 리소스를 통해 AWS 리소스 추적하기를 참조하세요.

해결 방법

참고: 다음 단계 및 코드 예제는 Amazon Cognito 평가를 위한 사용자 지정 AWS Config 역할을 생성합니다. 지원되지 않는 리소스입니다.

사전 요구 사항

Lambda가 필요한 API를 호출할 수 있도록 Lambda 함수용 AWS Identity and Access Management(IAM) 역할을 생성합니다.

  1. IAM 콘솔을 연 다음, 탐색 창에서 역할을 선택합니다.

  2. 역할 생성을 선택하세요.

  3. 사용 사례 선택에서 일반 사용 사례Lambda를 선택합니다.

  4. 다음: 권한을 선택합니다.

  5. 정책 생성을 선택합니다.
    참고: 새 탭에서 정책 생성 페이지가 열립니다. 이 프로세스가 끝나면 원래 탭으로 돌아갑니다.

  6. JSON 탭을 선택한 후 다음 정책을 입력합니다.

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
            "config:PutEvaluations",
            "cognito-idp:ListUserPools"
            "`cognito-idp:DescribeUserPool"`
          ],
          "Resource": "*"
        }
      ]
    }
  7. 다음: 태그을 선택한 후 다음: 검토를 선택합니다.

  8. 이름에서 정책 이름을 입력합니다.

  9. 정책 생성을 선택합니다.

  10. 5단계 역할 생성 탭으로 돌아가서 정책 목록 오른쪽에 위치한 새로 고침 아이콘을 선택합니다.

  11. 새 정책 이름을 찾아 선택한 후 다음: 태그를 선택합니다.

  12. 다음: 검토를 선택합니다.

  13. 역할 이름에서 lambda-role을 입력합니다.

  14. 역할 생성을 선택하세요.

사용자 지정 AWS Config 규칙을 위한 Lambda 함수를 생성합니다.

  1. Lambda 콘솔을 엽니다.
  2. 함수 생성을 선택합니다.
  3. 새로 작성을 선택합니다.
    함수 이름에서 이름을 입력합니다.
    런타임에서 Python 3.8을 선택합니다.
  4. 권한에서 기본 실행 역할 변경을 확장합니다.
    실행 역할에서 기존 역할 사용을 선택합니다.
    기존 역할에서 Lambda가 필요한 API 호출을 수행할 수 있도록 하기 위해 이 문서의 사전 요구 사항 섹션에서 생성한 역할을 선택합니다.
  5. 함수 생성을 선택합니다.
  6. 코드 소스에서 Lambda 콘솔의 lambda_function.py 파일을 열고 기본 코드를 다음과 같이 바꾼 다음 배포를 선택합니다.
    참고: 다음 코드 예제는 모든 Amazon Cognito UserPools에서 MFA: OFF로 설정된 것을 찾아 결과를 NON_COMPLIANT로 표시합니다. 지원되지 않는 기타 서비스 및 목적에 맞게 이 지침을 사용자 지정하기 위한 정보와 리소스는 PutEvaluations API 및 AWS 평가::::계정 리소스 유형 값 섹션을 참조하세요.
    ## Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.// SPDX-License-Identifier: MIT-0
    
    import json
    import boto3
    
    def lambda_handler(event,context):
      cognito = boto3.client('cognito-idp')
      userpools = cognito.list_user_pools(
        MaxResults=5
        )
      userpool_list = userpools['UserPools']
      userpool_ids = []
    
      for i in userpool_list:
        userpool_ids.append(i['Id'])
    
      evaluations = []
      orderingtime = json.loads(event['invokingEvent'])['notificationCreationTime']
    
      for j in userpool_ids:
         userpool_describe = cognito.describe_user_pool(
            UserPoolId = j
          )
         userpool_MFA = userpool_describe['UserPool']['MfaConfiguration']
         if userpool_MFA == 'OFF':
           evaluations.append(
              {
              'ComplianceResourceType': 'AWS::::Account',
              'ComplianceResourceId': j,
              'ComplianceType': 'NON_COMPLIANT',
              'Annotation': 'Test',
              'OrderingTimestamp': orderingtime
              }
            )
         else:
           evaluations.append(
              {
              'ComplianceResourceType': 'AWS::::Account',
              'ComplianceResourceId': j,
              'ComplianceType': 'COMPLIANT',
              'Annotation': 'Test',
              'OrderingTimestamp': orderingtime
              }
            )
    
      result_token = event['resultToken']
      config = boto3.client('config')
      response = config.put_evaluations(
                  Evaluations = evaluations,
                  ResultToken = result_token,
                  TestMode = False
                )

이 코드는 세 가지 주요 단계를 수행합니다.

  • 인벤토리를 생성하는 데 필요한 모든 리소스를 나열합니다.
  • 지정된 구성과 인벤토리의 각 리소스를 비교하여 평가합니다.
  • AWS Config에 대한 PutEvaluations API 호출을 사용하여 규정 준수 상태를 반환합니다.

사용자 지정 정기적 AWS Config 규칙 생성

AWS Config에서 사용자 지정 정기적 규칙을 생성합니다. 그런 다음 사용자 지정 규칙을 이전 섹션에서 생성한 Lambda 함수에 연결합니다. 지침은 Amazon EC2 인스턴스 평가용 사용자 지정 Lambda 규칙 생성을 참조하세요.

중요: 이후 단계에서 사용할 수 있도록 새 사용자 지정 규칙의 Amazon 리소스 이름(ARN)을 기록해 둡니다.

AWS Config 서비스가 Lambda 함수를 호출하도록 승인합니다.

  1. Lambda 콘솔을 연 다음, 탐색 창에서 함수를 선택합니다.
  2. Lambda 함수에 하이퍼링크된 함수 이름을 선택하여 함수 세부 정보를 엽니다.
  3. 구성 탭에서 권한을 선택합니다.
  4. 리소스 기반 정책에서 권한 추가를 선택합니다.
    정책 설명서에서 AWS 서비스를 선택합니다.
    서비스에서 기타를 선택합니다.
    주요config.amazonaws.com을 입력합니다.
    소스 ARN에서 이전 섹션에서 생성한 사용자 지정 규칙의 ARN을 입력합니다.
    참고: 사용자 지정 규칙 ARN을 찾으려면 AWS Config 콘솔을 연 다음 탐색 창의 규칙을 선택합니다. 하이퍼링크된 규칙 이름을 선택한 다음 구성 규칙 ARN을 복사합니다.
    작업에서 lambda:InvokeFunction을 선택하세요
    명령문 ID에서 고유 ID를 입력합니다.
  5. 저장을 선택합니다.

PutEvaluations API 및 AWS::::계정 리소스 유형 값

이 해결 방법의 단계와 예에서는 모든 Amazon Cognito UserPools에서 MFA OFF이 설정된 항목을 찾은 다음, 결과를 NON_COMPLIANT로 표시합니다. 지원되지 않는 리소스 유형의 경우 특정 요구 사항에 맞게 프로세스를 수정해야 합니다. AWS::::계정 리소스 유형을 사용하는 추가 코드 예제는 aws-config-rules GitHub 페이지를 참조하세요.

PutEvaluations API 호출에는 다음과 같은 매개변수가 포함됩니다.

{   "Evaluations": [
    {
     "Annotation": "string",
     "ComplianceResourceId": "string",
     "ComplianceResourceType": "string",
     "ComplianceType": "string",
     "OrderingTimestamp": number
    }
   ],
   "ResultToken": "string",
   "TestMode": boolean
}

지원되지 않는 리소스 유형의 경우 ComplianceResourceType의 값으로 AWS::::계정을 입력합니다. AWS::::계정 리소스 유형은 특정 리소스가 아닌 전체 계정을 보고합니다.

{  'ComplianceResourceType': 'AWS::::Account',
  'ComplianceResourceId': 'Resource Id',
  'ComplianceType': 'COMPLIANT'|'NON_COMPLIANT',
  'Annotation': 'string',
  'OrderingTimestamp': number
}

지원되지 않는 리소스에 AWS::::계정 대신 ComplianceResourceType값을 입력하면 다음과 같은 오류가 발생합니다.

  • AWS Config 콘솔에서: "No results available"
  • Lambda CloudWatch 로그: ""오류: ClientError: An error occurred (InternalFailure) when calling the PutEvaluations operation (reached max retries: 4)"
  • Cloudtrail (PutEvaluations API): “Error: ClientError: An error occurred (InternalFailure) when calling the PutEvaluations operation (reached max retries: 4)

AWS::::계정 리소스 유형 값을 사용할 때는 다음 사항을 고려하세요.

  • 이 리소스 유형은 구성 항목을 기록하지 않습니다.
  • AWS::Config::ResourceCompliance의 규정 준수 구성 항목은 이 리소스 유형을 기록하지 않습니다.
  • 이 리소스 유형은 리소스 타임라인을 사용할 수 없습니다.
  • AWS Management Console에서는 이 리소스 유형의 리소스 관리 버튼을 사용할 수 없습니다.

관련 정보

사용자 지정 AWS Config 규칙을 위한 AWS Lambda 함수 생성

AWS 공식
AWS 공식업데이트됨 9달 전