Amazon Web Services 한국 블로그
AWS Config Rules, 서울 리전 출시!
AWS Config Rules 를 Asia Pacific(Seoul) 리전에 출시하였습니다. AWS Config는 AWS 리소스 인벤토리, 구성 기록, 구성 변경 알림을 제공하여 보안 및 거버넌스를 실현하는 완벽한 관리형 서비스입니다.
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
– 규칙에 따라 자원 배분은 되었으나, 표준 규정에 따르지는 않았을 때
기본 함수 구현을 아래와 같이 조금 변경합니다.
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
: 라는 함수를 참조하는 규칙을 만드는 방법입니다.
"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 코리아 마케팅팀;