はじめに
こんにちは! 今日は、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ユーザーの無効化と復元の方法 管理コンソールを使用して簡単にユーザの無効化と再有効化が可能です。必要に応じて設定を見直し、安全性を確保しましょう。