Amazon Web Services 한국 블로그

AWS Config Rules, 서울 리전 출시!

AWS Config Rules 를 Asia Pacific(Seoul) 리전에 출시하였습니다. AWS Config는 AWS 리소스 인벤토리, 구성 기록, 구성 변경 알림을 제공하여 보안 및 거버넌스를 실현하는 완벽한 관리형 서비스입니다.

2016-12-22-aws-config-rules-seoul

AWS Config Rules는 원하는 리소스 구성을 나타내며, AWS Config에서 기록한 관련 리소스의 구성 변경과 비교하여 평가됩니다. 각 규칙을 리소스의 구성과 비교하여 평가한 결과는 대시보드에서 확인할 수 있습니다. Config Rules를 사용하면 전반적인 규칙 준수 및 위험 상태를 구성 측면에서 평가하고, 시간에 따른 규칙 준수 추세를 확인하여 리소스의 규칙 미준수를 초래한 구성 변경이 무엇인지 정확히 찾아낼 수 있습니다.

샘플 규칙(Rule) 만들어 보기
여기서는 DBSuperUserPolicy.라는 이름의 IAM 정책을 검사하는 규칙을 만들어 보겠습니다. 우선 이 정책은 DBSuperUser라는 하나의 사용자만 가지고 있으며, 여기에 부합하면 표준 규정에 맞는 것이고 그렇지 않으면 위배되는 것입니다.

먼저 Lambda 콘솔에서 샘플 Lambda 함수를 만듭니다. Create a Lambda function을 누르고 검색창에 ‘config’라고 치면, 몇 가지 샘플 예제가 나옵니다.

IAM 정책이 변경될 때 마다 실행하기 위해서  config-rule-change-triggered를 선택하고, 함수명과 간단한 설명을 추가합니다.

샘플 코드에는 evaluateCompliance라는 함수가 포함되어 있는데, Config Rules의 변화를 감지하여 아래와 같은 값을 반환 해 줍니다.

  • NOT_APPLICABLE – 규칙이 주어진 자원이나 자원 형태에 적용되지 않았을 때
  • COMPLIANT – 표준 규정에 따라 자원이 적절하게 적용되었을 때
  • NON_COMPLIANT – 규칙에 따라 자원 배분은 되었으나, 표준 규정에 따르지는 않았을 때

기본 함수 구현을 아래와 같이 조금 변경합니다.

JavaScript
function evaluateCompliance(configurationItem, ruleParameters, context)
{
  if ((configurationItem.resourceType !== 'AWS::IAM::Policy') || 
      (configurationItem.resourceName !== 'DBSuperUserPolicy'))
    return 'NOT_APPLICABLE';
  if (configurationItem.relationships[0].resourceName === ruleParameters.attachedIAMUser)
  {
    if (configurationItem.relationships[1])
      return 'NON_COMPLIANT';
    else
      return 'COMPLIANT';
  }
  else
    return 'NON_COMPLIANT';
}

위의 함수를 통해 IAM 정책의 적용 여부를 파악 할 수 있습니다.

  • 3-4행에서는 DBSuperUserPolicy라는  IAM 정책을 변경 사항을 받아서, 규칙에 맞지 않으면 5행에서 NOT_APPLICABLE를 반환합니다.
  • 6행에서는 IAM 사용자가 정책에 추가되어있는지 확인하고, 규칙에 맞지 않으면 14행에서 NOT_APPLICABLE를 반환합니다.
  • 8행에서 정책에 추가된 사용자가 한 명 이상인지 확인하고, 규칙에 맞지 않으면 9행에서 NOT_APPLICABLE를 반환합니다.
  • 11행에서 정확히 하나의 IAM 사용자가 추가되어 있고, 규정에 맞으면 COMPLIANT를 반환합니다.

위의 간단한 15줄의 함수로 AWS 자원 전체에 대한 정책이 잘 적용되었는지 여부를 판단할 수 있습니다. 이제 이 함수에서 AWS Config로 결과를 보내기 위해 IAM 역할을 생성합니다.

람다 함수가 다른 AWS 자원이나 API에 접근을 원한다면, 정책 문서를 자세히 읽어보고 관련 권한을 추가하면 됩니다.

이 기능을 사용하면, 필요에 따라 구성 규칙을 호출 해야합니다. 구성 규칙 콘솔을 방문하여 Add Rule를 선택하세요.

이 시점에서 7 가지 AWS 관리 규칙 중 하나를 선택하거나 Add custom rule를 클릭 할 수 있습니다.

이제는 규칙 이름을 지정하고 람다 함수 (ARN을 통해)가 가리키는 IAM 정책 구성이 변경 될 때 실행되도록 지정합니다.

각 규칙은 몇 분 내에 평가됩니다. Lambda 콘솔의 함수 Monitoring 탭을 들여다 보면 함수가 호출되었는지 확인할 수 있습니다.

이러한 통계치를 살펴보면 함수가 7 번 (각 고객 관리 IAM 정책 수를 가짐), 각 호출이 1 초 미만 지속되며 호출이 오류를 발생시키지 않았다는 것을 알 수 있습니다.

샘플 규칙 실행 해 보기
이제 람다 함수가 실행 중이고 Config Rule에 연결되어 있으면, 다음 단계는 예상대로 수행되는지 확인하는 것입니다. DBSuperUserUsagePolicy라는 IAM 정책을 만들고 사용자 jeff를 첨부합니다. ( 규칙을 준수하지 않고 다음과 같이 표시해야 합니다).

규칙 실행을 잠시 허용 한 후, 구성 규칙 콘솔로 돌아가서 문제점이 있음을 알 수 있습니다.

더 자세한 정보를 얻을 수 있습니다.

만약 변경을 기억하지 못했거나 누가 그 일을했는지 모르는 경우, Config 타임 라인을 클릭하여 자세히 알아볼 수 있습니다.

아래와 같이 조사를 한 후 DBSuperUser를 사용하고 이에 따라 정책을 업데이트해야 한다는 것을 알 수 있습니다.

몇 분 정도 기다렸다가 규칙 세부 정보를 다시 확인합니다.

이제 변경 사항이 타임 라인에 반영되었습니다 (실제 약간의 시간이 소요됩니다.)

마지막으로, IAM 정책을 업데이트 한 후 Lambda 함수가 호출되었음을 알 수 있습니다.

CloudFormation 지원
이제 CloudFormation 템플릿을 사용하여 구성 규칙과 람다 함수를 만들 수 있습니다.  아래는 VolumeAutoEnableIOComplianceCheck: 라는 함수를 참조하는 규칙을 만드는 방법입니다.

JavaScript
"ConfigRuleForVolumeAutoEnableIO": {
      "Type": "AWS::Config::ConfigRule",
      "Properties": {
        "ConfigRuleName": "ConfigRuleForVolumeAutoEnableIO",
        "Scope": {
          "ComplianceResourceId": {"Ref": "Ec2Volume"},
          "ComplianceResourceTypes": ["AWS::EC2::Volume"]
        },
        "Source": {
          "Owner": "CUSTOM_LAMBDA",
          "SourceDetails": [{
              "EventSource": "aws.config",
              "MessageType": "ConfigurationItemChangeNotification"
          }],
          "SourceIdentifier": {"Fn::GetAtt": ["VolumeAutoEnableIOComplianceCheck", "Arn"]}
        }
      },
      "DependsOn": "ConfigPermissionToCallLambda"
    },

정식 출시 및 가격
Config Rules은 서울 리전에서 사용 가능하며, 더 자세한 요금은 Config Rules 요금 페이지 페이지를 참고하시기 바랍니다. AWS 보안 서비스에 대한 더 자세한 사항은 아래의 세미나 자료를 확인하세요!

– AWS 코리아 마케팅팀;