【すぐできる】未使用のIAMユーザーの自動検知と無効化でセキュリティ強化!

記事タイトルとURLをコピーする

はじめに

こんにちは! 今日は、AWSにおけるAWS Identity and Access Management(以下、IAM)ユーザについて便利な管理方法を書いていきます!

企業のAWS環境では、IAMユーザーの適切な管理はセキュリティを維持する上で欠かせません。使用されていないIAMユーザーは、潜在的なセキュリティリスクの温床となる可能性があります。
例えば、不正アクセスや情報漏洩のリスクを高める要因となりかねません。これらのリスクを未然に防ぐためには、不要なアクセス権を速やかに無効化することが非常に重要です。

自動でIAMユーザーを検知・無効化する方法

AWS ConfigとSystems Manager Automationで自動化する

AWSでは、ユーザーのアクティビティを監視するための強力なツールであるAWS Configが提供されています。 これを活用することで、長期間使用されていないIAMユーザーを効率的に検出できます。 さらに、AWS Systems Manager Automationと組み合わせることで、検出された未使用ユーザーを自動的に無効化する仕組みを構築できます。

この記事では、AWS ConfigルールとAWS Systems Manager Automationを連携させ、特定のポリシーに基づいて未使用ユーザーを自動無効化する具体的な方法をご紹介します。

CloudFormationテンプレートで簡単デプロイ!

今回、この自動化設定を簡単に行えるよう、AWS CloudFormationのテンプレートをご用意しました。
このテンプレートを使えば、AWS CloudFormation StackSetsでマルチアカウント展開も可能です。
以下のテンプレートをCloudFormationでデプロイするだけで、設定は完了です!

  • 特定期間を過ぎたIAMユーザーは即時無効化されます。 デプロイ前に、対象となるアカウントの利用ユーザーへ必ず周知してください。
  • すでに同じConfigルールを設定している場合、このCloudFormationテンプレートはデプロイできません。 既存のルールを事前に削除しておく必要があります。
  • 各種パラメータは、説明文(英語)を確認し、ご自身の環境に合わせて設定してください。
AWSTemplateFormatVersion: '2010-09-09'
Description: |
  Checks whether your AWS Identity and Access Management (IAM) users have
  passwords or active access keys that have not been used within the specified
  number of days you provided. It also includes an auto-remediation to address
  non-compliant IAM user credentials.

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: Required
        Parameters:
          - maxCredentialUsageAge
      - Label:
          default: Optional
        Parameters: []

Parameters:
  ConfigRuleName:
    Type: String
    Default: iam-user-unused-credentials-check
    Description: The name that you assign to the AWS Config rule.
    MinLength: '1'
    ConstraintDescription: This parameter is required.
  MaximumExecutionFrequency:
    Type: String
    Default: TwentyFour_Hours
    Description: The frequency that you want AWS Config to run evaluations for the rule.
    MinLength: '1'
    ConstraintDescription: This parameter is required.
    AllowedValues:
      - One_Hour
      - Three_Hours
      - Six_Hours
      - Twelve_Hours
      - TwentyFour_Hours
  maxCredentialUsageAge:
    Type: String
    Default: '90'
    Description: Maximum number of days a credential cannot be used. The default value is 90 days.
    MinLength: '1'
    ConstraintDescription: This parameter is required.
  IAMRoleName:
    Type: String
    Default: ssm-config-remediation-role
    Description: The name that you assign to the IAM Role Name.
    MinLength: '1'
    ConstraintDescription: This parameter is required.

Conditions:
  maxCredentialUsageAgeCondition: # 条件名がParameters内の変数名と重複しないように変更
    Fn::Not:
      - Fn::Equals:
          - ''
          - Ref: maxCredentialUsageAge

Resources:
  # AWS Config Ruleの作成: IAM_USER_UNUSED_CREDENTIALS_CHECK
  AWSConfigRule:
    Type: AWS::Config::ConfigRule
    Properties:
      ConfigRuleName:
        Ref: ConfigRuleName
      Description: Checks whether your AWS Identity and Access Management (IAM) users have passwords
        or active access keys that have not been used within the specified number of days you provided.
      InputParameters:
        Fn::If:
          - maxCredentialUsageAgeCondition # 修正した条件名を使用
          - maxCredentialUsageAge:
              Ref: maxCredentialUsageAge
          - Fn::NoValue
      Scope:
        ComplianceResourceTypes:
          - AWS::IAM::User
      Source:
        Owner: AWS # AWS管理ルールなのでOwnerはAWS
        SourceIdentifier: IAM_USER_UNUSED_CREDENTIALS_CHECK
      MaximumExecutionFrequency:
        Ref: MaximumExecutionFrequency


  # IAM_USER_UNUSED_CREDENTIALS_CHECK の修復を設定します。
  IAMUserUnusedCredentialsRemediation:
    Type: AWS::Config::RemediationConfiguration
    Properties:
      ConfigRuleName: !Ref ConfigRuleName
      TargetType: SSM_DOCUMENT
      TargetId: AWSConfigRemediation-RevokeUnusedIAMUserCredentials
      TargetVersion: '1' # 最新版のSSMオートメーション・ドキュメントを指定
      Automatic: true 
      Parameters:
        IAMResourceId:
          ResourceValue:
            Value: RESOURCE_ID
        AutomationAssumeRole:
          StaticValue:
            Values:      
              - !GetAtt SSMAutomationRemediationRole.Arn # IAMロールのARNを正しく参照
        MaxCredentialUsageAge:
          StaticValue:
            Values:      
              - Ref: maxCredentialUsageAge 
      MaximumAutomaticAttempts: 5 # 修復を試みる回数
      RetryAttemptSeconds: 60 # 修復を再試行するまでの待ち時間(秒単位


  # SSMオートメーションが修復アクションを実行するIAMロールを作成する
  SSMAutomationRemediationRole: 
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Ref IAMRoleName ### ロール名については、任意の値に変更ください ### 
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ssm.amazonaws.com
            Action:
              - sts:AssumeRole
      Policies:
        - PolicyName: SSMRemediationPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - config:ListDiscoveredResources
                  - ssm:GetAutomationExecution
                  - ssm:StartAutomationExecution
                  # IAMユーザーの認証情報管理に必要な最小限の権限
                  - iam:DeleteAccessKey
                  - iam:GetAccessKeyLastUsed
                  - iam:UpdateAccessKey
                  - iam:GetUser
                  - iam:GetLoginProfile
                  - iam:DeleteLoginProfile
                  - iam:ListAccessKeys
                  # CloudWatch Logsへの出力権限 (SSM Automationログのため)
                  - logs:CreateLogGroup
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                Resource: '*' 

Outputs:
  ConfigRuleArn:
    Description: The ARN of the IAM_USER_UNUSED_CREDENTIALS_CHECK Config Rule.
    Value: !GetAtt AWSConfigRule.Arn
  RemediationConfigurationId:
    Description: The ID of the Remediation Configuration for IAM_USER_UNUSED_CREDENTIALS_CHECK.
    Value: !Ref IAMUserUnusedCredentialsRemediation
  SSMAutomationRemediationRoleArn:
    Description: The ARN of the IAM role for SSM Automation remediation actions.
    Value: !GetAtt SSMAutomationRemediationRole.Arn

まとめ

IAMユーザーの適切な管理は、組織のセキュリティを大幅に向上させます。
今回ご紹介した自動化の仕組みを導入することで、継続的かつ効率的なIAMユーザー管理が可能となり、安全で信頼できるAWS環境の構築の一助になれば幸いです。

想定するFAQ

質問(FAQ)

  • IAMユーザーを無効化するとどうなる? 無効化されたユーザは、AWSリソースへのアクセスが制限されますが、必要に応じて再度有効化することが可能です。

  • IAMユーザーの無効化と復元の方法 管理コンソールを使用して簡単にユーザの無効化と再有効化が可能です。必要に応じて設定を見直し、安全性を確保しましょう。

服部 朝海(執筆記事の一覧)

エンタープライズクラウド部 クラウドリライアビリティ課

何かとセキュリティ関するサービスを触りがち