AWS CLIでアクセスしたことのあるAWSサービスをリストアップする

Twitterで話題になっていたので、試してみました。 元ツイート(スレッド) 現在のユーザーを確認する まずAWS CLIで使用しているユーザーを確認します。aws sts get-caller-identityが便利 […]

広告ここから
広告ここまで

目次

    Twitterで話題になっていたので、試してみました。

    元ツイート(スレッド)

    現在のユーザーを確認する

    まずAWS CLIで使用しているユーザーを確認します。aws sts get-caller-identityが便利です。

    % aws sts get-caller-identity
    {
        "UserId": "xxxxxxx",
        "Account": "9999999",
        "Arn": "arn:aws:iam::9999999:user/hideokamoto"
    }

    使用状況レポートを作成する

    iam generate-service-last-accessed-detailsで最後にAWSサービスにアクセスした記録のレポートを作成できます。

    % aws iam generate-service-last-accessed-details --arn arn:aws:iam::9999999:user/hideokamoto
    {
        "JobId": "xxxxx-xxxx-xxxx-xxxx"
    }

    先程のコマンドと合体すると便利です。

    % aws iam generate-service-last-accessed-details --arn $(aws sts get-caller-identity | jq .Arn -r) 
    {
        "JobId": "xxxxx-xxxx-xxxx-xxxx"
    }

    作成したレポートを確認する

    あとはiam get-service-last-accessed-detailsを利用してレポートを取得しましょう。

    % aws iam get-service-last-accessed-details --job-id xxxxx-xxxx-xxxx-xxxx
    {
        "JobStatus": "COMPLETED",
        "JobCreationDate": "2020-08-25T04:14:55.875Z",
        "ServicesLastAccessed": [
            {
                "ServiceName": "Alexa for Business",
                "ServiceNamespace": "a4b",
                "TotalAuthenticatedEntities": 0
            },
            {

    一部ですが、Alexa For Businessにはアクセスしていないことが伺えますね。

    あとは元ツイートにあるようにjqでselectや整形してみましょう。

    アクセスしたことのあるサービス名のリストアップ

    % aws iam get-service-last-accessed-details --job-id xxxxx-xxxx-xxxx-xxxx | jq ".ServicesLastAccessed[] | select(.TotalAuthenticatedEntities > 0) | .ServiceName"                     
    "AWS Certificate Manager"
    "Manage - Amazon API Gateway"
    "AWS AppSync"
    "AWS Budget Service"
    "AWS CloudFormation"
    "Amazon CloudFront"
    "Amazon Cognito User Pools"
    "Amazon DynamoDB"
    "Amazon EC2"
    "Amazon Elastic Container Registry"
    "Amazon Elastic Container Service"
    "Amazon Elastic File System"
    "Amazon EventBridge"
    "AWS Identity and Access Management"
    "AWS Key Management Service"
    "AWS Lambda"
    "Amazon CloudWatch Logs"
    "Amazon Route 53"
    "Amazon S3"

    最終アクセス時間も表示する

    % aws iam get-service-last-accessed-details --job-id xxxxx-xxxx-xxxx-xxxx | jq ".ServicesLastAccessed[] | select(.TotalAuthenticatedEntities > 0)  | {ServiceName: .ServiceName , LastAuthenticated:.LastAuthenticated}"  
    {
      "ServiceName": "AWS Certificate Manager",
      "LastAuthenticated": "2020-04-14T02:36:19Z"
    }
    {
      "ServiceName": "Manage - Amazon API Gateway",
      "LastAuthenticated": "2020-08-17T08:51:23Z"
    }
    {
      "ServiceName": "AWS AppSync",
      "LastAuthenticated": "2020-07-01T06:51:29Z"
    }
    {
      "ServiceName": "AWS Budget Service",
      "LastAuthenticated": "2017-04-18T13:00:00Z"
    }
    {

    めんどくさがりのためのワンライナー

    今回出てきた3コマンドをまとめれば、現在のユーザーの状況を1発で引けるようになります。あとはここにjqでselectや整形したものをいれてやればよいでしょう。

    $ aws iam get-service-last-accessed-details --job-id $(aws iam generate-service-last-accessed-details --arn $(aws sts get-caller-identity | jq .Arn -r)  | jq .JobId -r)

    JS SDKなどにも同様のAPIがそれぞれあるはずなので、Lambdaとかでやりたい場合は各SDKのAPIを確認しながら上記のワンライナーを再構築すれば良いと思います。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark