Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
aws-key-disabler — 指定された日数よりも古いアクセスキーを無効にする小さなLambdaスクリプト。 | Kitploit
ツール/GitHubGitHub/te-papa/aws-key-disabler
構成監査クラウドセキュリティアイデンティティ&アクセス管理 (IAM)
GitHubte-papa/aws-key-disabler

aws-key-disabler

指定された日数よりも古いアクセスキーを無効にする小さなLambdaスクリプト。

リポジトリを見る
153365年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

AWS Lambda - IAM アクセスキー無効化ツール

キーアイコンの画像

AWS Key Disabler は、設定された期間が経過した後に AWS IAM ユーザーのアクセスキーを無効化することで、古いアクセスキーに関連するリスクを低減する Lambda 関数です。

AWS Lambda アーキテクチャ

アーキテクチャの画像

SysOps エンドユーザー向け出力

iPhoneメールの画像

開発者ツールチェーン

ツールチェーンの画像

現在の制限事項

  • スキャン結果(json)を含むレポートは、単一の定義された sysadmin アカウントに送信されます。詳細は /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 関数を呼び出す

Lambda 関数を名前 AccessKeyRotation で実行し、スキャンの出力を 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 関数のビルド/デプロイを選択したリージョンに対して実行します