Category: AWS Config


AWS Config Rules, 서울 리전 출시!

on | in AWS Config, 서울 리전 소식 |

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 코리아 마케팅팀;

 

AWS Config, 서울 리전 출시!

on | in AWS Config, 서울 리전 소식 |

AWS Config를 이제 Asia Pacific (Seoul) 리전에서 사용 가능합니다. AWS Config는 AWS 자원 인벤토리, 구성 기록, 구성 변경 알림을 제공하여 보안 및 거버넌스를 실현하는 관리형 서비스입니다.

아래 글은 2014년 11월 AWS Config 서비스를 처음 소개하는 Track AWS Resource Configurations With AWS Config의 한국어 번역입니다.

인프라의 동적인 변경이 가능하다는 것은 클라우드에서 가장 멋진 기능 중 하나입니다. 클라우드에 있는 자원은 단 몇 분만에 자원 구성·추가·설정·사용·분리 및 삭제할 수 있습니다. 이러한 다양한 변화들은 관리자가 직접 하거나, AWS CloudFormation 혹은 Auto Scaling을 통해 자동으로 일어나기도 합니다. 클라우드 자원 자체의 연결 방법 및 설정 등 기타 속성은 시간이 지나면서 변화하고 있습니다.

이러한 변경이 발생했을 때, 회사의 인프라 관리자는 클라우드에서 자산 관리 · 재고 관리 · 변경 관리 · 관리 구조 등의 영역에서 새로운 도전에 직면하고 있습니다. 인프라 관리자는 언제 어느 구성에서 어떤 리소스가 변경되었으며, 그 변경이 다른 자원에 어떤 영향을 주었는지를 확인할 필요가 있습니다. 이러한 변화는 때때로 예기치 않은 구성 변경이나 시스템 장애 또는 보안 사고에 기인한 것일 수도 있습니다. 변경이 일어난 원인에 관계없이 올바른 데이터에 접근하는 것은 향후 깊이 있는 데이터 기반 분석을 가능하게합니다.

기존 인프라의 구성 관리 도구는 리소스들이 자주 변경되지 않는 예전에 만들어졌습니다. 이 도구들은 비싸고, 복잡하고, 관리자가 원하는 부분을 직접 만들어야 했습니다.

AWS Config 서비스 소개
이러한 고객들의 요구를 해결하기 위해 AWS Config를 제공합니다. 여러분의 AWS 자원들의 초기 상태와 관련성을 확인 및 생성 · 삭제 · 속성 변경 내용 추적하고, 이들 데이터를 분석하고 시각화하는 도구입니다.

AWS Config는 단 두번의 클릭으로 시작할 수 있습니다! 사용을 시작하면 Config는 현재 구성과 모든 변경을 감지합니다. 구성 데이터는 AWS 관리 콘솔에서 타임 라인으로 볼 수 있습니다. AWS Configs는 구성 변경이 일어나면, 선택한 Amazon Simple Notification Service (SNS) 토픽으로 전달 되고, 6시간마다 Amazon Simple Storage Service (S3) 버킷에 스냅샷을 저장합니다. 또한, 직접 만든 도구 및 파트너가 제공하는 도구를 이용하여 수집된 데이터를 분석 할 수 있습니다.

AWS Config는 AWS 자원 간의 관련성을 해석하고 추적합니다. EBS 볼륨은 EC2 인스턴스에 탑재되며, 인스턴스는 보안 그룹 Elastic IP Addresses, VPC, Elastic Network Interfaces 등과 연결되어 있습니다.

AWS Config를 이용하면 모든 AWS 자원을 시각화 할 수 있습니다. 시계열 변경 사항을 모니터링하고, 자원 구성이 일어난 변경 기록을 참고할 수 있습니다. 각 자원 사이의 연결을 확인하거나, 특정 자원의 수정 사항이 관련 자원에 어떤 영향을 미쳤는지를 확인 할 수 있습니다. AWS Config는 정기적으로 구성 및 자원 변경이 일어난 환경에서 유용한 정보를 제공합니다!

모든 AWS 자원에 대해 현재 회사 조직의 규정 및 정책에 맞는 것인지도 확인 할 수 있습니다. 예를 들어, 정식 서비스 환경에서 VPC로 구성되지 않는 자원이 있는지 확인한다던지, 지난 2주 동안 특정 EIP 주소가 연결된 인스턴스를 식별하거나, 특정 날짜와 시간에서 자원 상태를 알 수 있습니다.

AWS Config 사용해 보기
우선 AWS Config는 각 계정 및 리전 마다 활성화 해야 합니다. AWS 관리 콘솔, AWS CLI 및 API를 사용해서 시작할 수 있습니다.

우선 자신의 계정에서 특정 리전을 선택하고 Config를 활성화합니다. 사용할 SNS 토픽과 S3 버킷은 각각 새로 만들거나 기존에 있는 것을 사용하거나 적절한 권한이 설정된 다른 계정을 것을 사용할 수 있습니다.

AWS Config에 자신의 AWS 자원에 접근 할 수 있도록 IAM 역할(Role)을 할당해야합니다.

S3 버킷에 데이터가 저장되기 시작하면, 변경 사항을 SNS 토픽으로 보냅니다. 버킷에는 아래와 같은 방식으로 저장합니다.

Config를 이용하여 직접 자신의 운영 도구를 구축하는 경우를 제외하고 위의 버킷 데이터를 볼 필요는 없습니다.  (데이터 구조의 상세 내용을 알고 싶다면 아래의 Config 데이터 내용을 참조 하십시오). 대신 Config 콘솔이나 타사 도구를  사용하여,  자원을 선택하고 구성 변경의 타임 라인을 확인 할 수 있습니다.

파트너 지원
AWS Partner Network (APN)의 다양한 파트너들이   AWS Config 를 통해 다양한 분석 도구를 제공 합니다. 아래에 주요 파트너 목록입니다.

  1. 2nd Watch
  2. CloudCheckr
  3. CloudNexa
  4. Evident.IO
  5. Red Hat Cloud Forms
  6. RedSeal Networks
  7. Splunk

(역자 주: 자세한 파트너 목록이나 소개는 Track AWS Resource Configurations With AWS Config를 참고하십시오.)

AWS Config Data 내부 구조 (개발자용)
이제 Config에 의해 생성되는 데이터의 내용은 살펴 보겠습니다. 아래는 하나의 EC2 인스턴스 구성 스냅 샷 데이터입니다. 이 데이터는 인스턴스 ID, 할당 된 태그 목록 및  보안 그룹과 EBS 볼륨이 포함되어 있습니다.

JavaScript
{
  "configurationItemVersion" : "1.0",
  "configurationItemCaptureTime":"2014-10-28T02:30:36.989Z",
  "configurationStateId":2,
  "relatedEvents":["f8cdf490-3ddc-41ac-9cfd-9e1268dfba93"],

  "awsAccountId":"448164394201",
  "configurationItemStatus":"OK",
  "resourceId":"i-7053641e",
  "ARN":"arn:aws:ec2:us-east-1:348414629041:instance/i-7053641e",
  "awsRegion":"us-east-1",
  "availabilityZone":"us-east-1b",
  "configurationStateMd5Hash":"6ae267fafa03d87827137290c8b303e2",
  "resourceType":"AWS::EC2::Instance",
  "resourceCreationTime":"2013-04-26T19:36:06.000Z",

  "tags":{
   "UserTagDemo":"TemporaryTag",
   "Name":"RoadTripBlogServer"
  },

  "relationships":[
  {
    "resourceId":"sg-6e371c06",
    "resourceType":"AWS::EC2::SecurityGroup",
    "name":"Is associated with SecurityGroup"
  },

  {
    "resourceId":"vol-357a5f6c",
    "resourceType":"AWS::EC2::Volume",
    "name":"Is attached to Volume"
  }
  ]
}

Config 변경을 감지 할 때마다 SNS 토픽에 알림을 보냅니다. 알림 내용은 아래 정보를 포함합니다.

JavaScript
{
  "configurationItemDiff":{
    "changedProperties":{
    },
    "changeType":"CREATE"
  },

  "configurationItem":{
    "configurationItemVersion":"1.0",
    "configurationItemCaptureTime":"2014-11-04T02:28:33.146Z",
    "configurationStateId":1,
    "relatedEvents":[
       "f8cdf490-3ddc-41ac-9cfd-9e1268dfba93"
    ],

    "awsAccountId":"448164394201",
    "configurationItemStatus":"ResourceDiscovered",
    "resourceId":"vol-02fecb4d",
    "ARN":"arn:aws:ec2:us-east-1:348414629041:volume/vol-02fecb4d",
    "awsRegion":"us-east-1",
    "availabilityZone":"us-east-1a",
    "configurationStateMd5Hash":"16772ac8f8ccc7ed493a878f3bd88f8c",
    "resourceType":"AWS::EC2::Volume",
    "resourceCreationTime":"2014-11-04T02:25:10.281Z",
    "tags":{ },
    "relationships":[ ],

   "configuration":{
      "volumeId":"vol-02fecb4d",
      "size":2,
      "snapshotId":"",
      "availabilityZone":"us-east-1a",
      "state":"available",
      "createTime":"2014-11-04T02:25:10.281Z",
      "attachments":[ ],
      "tags":[ ],
      "volumeType":"gp2",
      "iops":6,
      "encrypted":false
    }
  },
  "notificationCreationTime":"2014-11-04T02:28:33.345Z",
  "messageType":"ConfigurationItemChangeNotification",
  "recordVersion":"1.2"
}

AWS Config가 현재 구성의 스냅샷을 구성 했을 때도 알림을 보냅니다. .

AWS Config APIs
Config는 자원 구성 정보를 수집하기 위한 2 개의 API를 제공합니다:

  • GetResourceConfigHistory – 시간 범위와 자원을 사용하여 구성 정보 검색하기
  • DeliverConfigSnapshot – 자원 스냅 샷을 만들고 S3에 보관하기

가격 및 사용 가능 리전
AWS Config는 2014년 11월 미리보기로 출시하여, 2015년 4월 9개 리전에 출시하였으며, 2016년 3월 부터 서울 리전에서 사용 가능합니다.

Config는 AWS 계정에서 지원되는 자원의 수량 및 구성 변경 횟수 (구성 항목)에 따라 과금됩니다. 초기 비용이 필요하지 않으며 언제든지 이용을 정지 할 수 있습니다.

1000 개의 구성 항목에 대해 매월 3 달러가 부과됩니다. 구성 내역 및 구성 스냅 샷의 스토리지 비용은 S3의 표준 요금이 적용됩니다. 또한 SNS를 알림을 이용할 경우, SNS 표준 요금이 부과됩니다.

만약 10000 개의 구성 항목이 매월 만들어지는 경우, 아마도 S3의 요금은 매월 기준 0.13 달러 이하가 될 것입니다. 매월 기준 100 만회의 SNS 알림을 AWS 무료 이용 범위 에서 사용할 수 있습니다.

Jeff;