Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
aws-key-disabler — 오래된 액세스 키를 지정된 일수보다 오래된 경우 비활성화하는 작은 람다 스크립트입니다. | Kitploit
도구/GitHubGitHub/te-papa/aws-key-disabler
Configuration AuditingCloud SecurityIdentity & Access Management (IAM)
GitHubte-papa/aws-key-disabler

aws-key-disabler

오래된 액세스 키를 지정된 일수보다 오래된 경우 비활성화하는 작은 람다 스크립트입니다.

저장소 보기
153365년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

AWS Lambda - IAM 액세스 키 비활성화기

키 아이콘 이미지

AWS 키 비활성화기는 설정된 시간 이후에 AWS IAM 사용자 액세스 키를 비활성화하는 Lambda 함수로, 오래된 액세스 키와 관련된 위험을 줄이기 위한 것입니다.

AWS Lambda 아키텍처

아키텍처 이미지

최종 사용자를 위한 SysOps 출력

iPhone 이메일 이미지

개발자 툴체인

툴체인 이미지

현재 제한 사항

  • 스캔 결과(JSON)가 포함된 보고서는 단일 정의된 시스템 관리자 계정으로 전송됩니다. 빌드 구성 파일 /grunt/package.json의 report_to 속성을 참조하세요.
  • 키는 비활성화만 되며, 삭제되거나 교체되지 않습니다.

전제 조건

이 스크립트를 실행하려면 다음 구성 요소가 필요합니다.

  • Node.js 및 NPM 설치 (https://nodejs.org/en/)
  • Gruntjs 설치 (http://gruntjs.com/)
  • AWSCLI 명령줄 도구 설치 (https://aws.amazon.com/cli/)

또한 SES가 활성화된 AWS 계정(도메인 인증 및 샌드박스 모드 해제)이 있다고 가정합니다.

설치 지침

이 지침은 OSX용입니다. Windows 및 다른 *nix에서는 결과가 다를 수 있습니다.

  1. 이 스크립트의 복사본을 가져옵니다.
  2. /grunt 폴더로 이동합니다.
  3. Grunt 태스크 러너를 설정합니다. 예: 종속성 설치: npm install
  4. /grunt/package.json에 다음 정보를 입력합니다.
    1. aws_account_number 값을 https://portal.aws.amazon.com/gp/aws/manageYourAccount에서 찾은 AWS 계정 ID로 설정합니다.
    2. first_warning과 last_warning을 경고를 트리거할 키 사용 기간(일)으로 설정합니다. 이 제한은 report_to로 이메일 전송을 트리거합니다.
    3. expiry를 키가 만료되는 사용 기간(일)으로 설정합니다. 이 기간이 되면 키가 비활성화되고 이 변경 사항을 알리는 이메일이 report_to로 전송됩니다.
    4. serviceaccount를 스크립트가 무시하려는 계정 사용자 이름으로 설정합니다.
    5. exclusiongroup을 스크립트가 무시하려는 사용자에게 할당된 그룹의 이름으로 설정합니다.
    6. send_completion_report 값을 로 설정하여 SES를 통한 이메일 전송을 활성화합니다.

AWSCLI를 사용하여 명령줄에서 Lambda 함수 수동 호출

이름이 AccessKeyRotation인 Lambda 함수를 실행하고 스캔 출력을 scan.report.log 파일에 기록합니다:

aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1

root@kitploit:~
{
    "StatusCode": 200
}

jq를 사용하여 scan.report.log의 내용을 콘솔에 표시합니다:

jq '.' scan.report.log

root@kitploit:~
{
  "reportdate": "2016-06-26 10:37:24.071091",
  "users": [
    {
      "username": "TestS3User",
      "userid": "1",
      "keys": [
        {
          "age": 72,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************Q3GA1"
        },
        {
          "age": 12,
          "changed": false,
          "state": "key is still young",
          "accesskeyid": "**************F3AA2"
        }
      ]
    },
    {
      "username": "BlahUser22",
      "userid": "2",
      "keys": []
    },
    {
      "username": "LambdaFake1",
      "userid": "3",
       "keys": [
        {
          "age": 23,
          "changed": false,
          "state": "key is due to expire in 1 week (7 days)",
          "accesskeyid": "**************DFG12"
        },
        {
          "age": 296,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************4ZASD"
        }
      ]
    },
    {
      "username": "apiuser49",
      "userid": "4",
       "keys": [
        {
          "age": 30,
          "changed": true,
          "state": "key is now EXPIRED! Changing key to INACTIVE state",
          "accesskeyid": "**************ER2E2"
        },
        {
          "age": 107,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************AWQ4K"
        }
      ]
    },
    {
      "username": "UserEMRKinesis",
      "userid": "5",
       "keys": [
        {
          "age": 30,
          "changed": false,
          "state": "key is now EXPIRED! Changing key to INACTIVE state",
          "accesskeyid": "**************MGB41A"
        }
      ]
    },
    {
      "username": "CDN-Drupal",
      "userid": "6",
       "keys": [
        {
          "age": 10,
          "changed": false,
          "state": "key is still young",
          "accesskeyid": "**************ZDSQ5A"
        },
        {
          "age": 5,
          "changed": false,
          "state": "key is still young",
          "accesskeyid": "**************E3ODA"
        }
      ]
    },
    {
      "username": "ChocDonutUser1",
      "userid": "7",
       "keys": [
        {
          "age": 59,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************CSA123"
        }
      ]
    },
    {
      "username": "ChocDonut2",
      "userid": "8",
       "keys": [
        {
          "age": 60,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************FDGD2"
        }
      ]
    },
    {
      "username": "[email protected]",
      "userid": "9",
       "keys": [
        {
          "age": 45,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************BLQ5GJ"
        },
        {
          "age": 71,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************GJFF53"
        }
      ]
    }
  ]
}

추가 구성 옵션

  • key_disabler.keystates.<state>.message 아래의 값을 변경하여 각 경고 및 최종 비활성화에 사용되는 메시지를 설정할 수 있습니다.
  • key_disabler.mask_accesskey_length 아래에서 마스킹 길이를 변경할 수 있습니다. 액세스 키는 20자입니다.

문제 해결

이 스크립트는 있는 그대로 제공됩니다. 시간이 허락하는 한 질문에 답변해 드리지만 어떤 약속도 할 수 없습니다.

작동하지 않는 경우 다음을 확인하세요:

  • AWSCLI 명령줄 도구를 사용하여 AWS에 성공적으로 인증할 수 있는지 확인
  • SES가 샌드박스 모드가 아니고 발신자 도메인이 인증되었는지 확인
  • 선택한 리전이 Lambda와 SES를 모두 지원하는지 확인 (https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)

보너스 포인트

Lambda 함수가 성공적으로 배포되면 다음 명령을 수행할 수 있습니다:

  1. aws lambda list-functions
  2. openssl dgst -binary -sha256 ..\Releases\AccessKeyRotationPackage.1.0.18.zip | openssl base64
  3. aws lambda invoke --function-name AccessKeyRotation report.log --region us-east-1
  4. jq '.' report.log
  5. jq '.users[] | select(.username=="johndoe")' report.log
  6. jq '.' report.log | grep age | cut -d':' -f2 | sort -n

보너스 보너스 포인트

  1. jq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.log
  2. jq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.log
도구 다운로드
True
  • report_to 값을 삭제 보고서를 수신할 이메일 주소로 설정합니다.
  • report_from 값을 삭제 보고서의 발신자 주소로 사용할 이메일 주소로 설정합니다. 이 도메인은 AWS SES에서 인증되어야 합니다.
  • deployment_region을 Lambda를 지원하는 리전으로 설정합니다.
  • email_region을 SES를 지원하는 리전으로 설정합니다. 또한 해당 리전에서 SES 샌드박스 모드가 비활성화되어 있는지 확인하세요.
    • 지원되는 AWS 리전 테이블 참조: https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/
  • CLI에서 AWS에 성공적으로 연결할 수 있는지 확인합니다. 예: aws iam get-user를 실행하여 연결 확인
  • /grunt 디렉터리에서 grunt bumpup && grunt deployLambda를 실행하여 버전 번호를 올리고 Lambda 함수를 선택한 리전에 빌드/배포합니다.