IAMパスワードポリシーの自動修復
CIS AWS Foundations Benchmark というセキュリティガイドラインが公開されており、このガイドラインは、AWSアカウントをセキュアに保つために必要なAWSのセキュリティ設定を集めたベストプラクティス集として活用できる。
この CIS AWS Foundations Benchmark
では、IAMユーザ用のパスワードポリシーについて、以下の設定とすることが奨励されている。
- 1.5 IAM パスワードポリシーには少なくとも 1 つの大文字が必要です
- 1.6 IAM パスワードポリシーには少なくとも 1 つの小文字が必要です
- 1.7 IAM パスワードポリシーには少なくとも 1 つの記号が必要です
- 1.8 IAM パスワードポリシーには少なくとも 1 つの数字が必要です
- 1.9 IAM パスワードポリシーは 14 文字以上の長さが必要です
- 1.10 IAM パスワードポリシーはパスワードの再使用を禁止しています
この CIS AWS Foundations Benchmark
に 準拠していないIAMパスワードポリシー を SSM Automation
を用いて 自動修復 するために以下の設定を行う。
- 上記のポリシーに準拠しているか
AWS Config
を用いて定期的にチェックを行う - 非準拠であった場合には、
AWS Config
がSSM Automation
を自動起動する SSM Automation
が正しいIAMパスワードポリシーとなるように設定を自動修復する
1. AWS Configの有効化
AWS Config
を有効化する手順については、こちら。
2. AWS Configを用いた定期チェック
IAM パスワードポリシー設定のチェックには、あらかじめAWS Config
に用意されている iam-password-policy
マネージドルールを使用する。CIS AWS Foundations Benchmark
で奨励されているパスワードポリシーの値は、マネージドルール内の InputParameters で設定する。IAM パスワードポリシーがこの条件を満たしていなかった場合、このリソースはルールに 非準拠(NON_COMPLIANT) であると判定される。
なお、この Config Rule
を設定する前に ConfigurationRecorder
を生成しておく必要がある。そこで、DependsOn
属性に ConfigurationRecorder
リソースを設定している。
Resources: ConfigIamPasswordPolicy: DependsOn: - ConfigConfigurationRecorder Type: AWS::Config::ConfigRule Properties: ConfigRuleName: iam-password-policy Description: IAM ユーザーのアカウントパスワードポリシーが、指定した要件を満たしているかどうかを確認します。 InputParameters: RequireUppercaseCharacters: true RequireLowercaseCharacters: true RequireSymbols: true RequireNumbers: true MinimumPasswordLength: 14 PasswordReusePrevention: 24 Source: Owner: AWS SourceIdentifier: IAM_PASSWORD_POLICY
3. SSM Automation を用いた自動修復
Systems Manager Automation
は、AWS Config
で 直接指定できる、現時点で唯一の自動修復手段 となっている。そこで、IAM パスワードポリシー を修復する Systems Manager Automation
ドキュメント を作成し、AWS Config
との紐付けを行う。
下のSystems Manager Automation
ドキュメントは、IAM
の UpdateAccountPasswordPolicy
を実行して、IAM パスワードポリシーの設定を自動修復する。
Resources: SSMAutomationUpdateAccountPasswordPolicy: Type: AWS::SSM::Document Properties: Content: schemaVersion: "0.3" assumeRole: "{{ AutomationAssumeRole }}" description: Update account password policy. mainSteps: - name: UpdateAccountPasswordPolicy action: aws:executeAwsApi inputs: Service: iam Api: UpdateAccountPasswordPolicy AllowUsersToChangePassword: true HardExpiry: false MinimumPasswordLength: 14 PasswordReusePrevention: 24 RequireLowercaseCharacters: true RequireNumbers: true RequireSymbols: true RequireUppercaseCharacters: true parameters: AutomationAssumeRole: type: String description: Automation Assume Role Arn DocumentType: Automation
4. AWS Config と SSM Automation の紐付け
Systems Manager Automation
ドキュメントは、上述の通り IAM
の UpdateAccountPasswordPolicy
を実行する必要があるため、このAWS API アクションを Systems Manager Automation
から呼び出すことを可能とする IAM Role を作成する。
Resources: IAMRoleForSSM: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: ssm.amazonaws.com Action: 'sts:AssumeRole' Description: A role required for SSM to access IAM. Policies: - PolicyName: !Sub 'DefaultSecuritySettings-AWSSystemManagerIAMRole-${AWS::Region}' PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'iam:UpdateAccountPasswordPolicy' Resource: - '*' RoleName: !Sub 'DefaultSecuritySettings-SSM-${AWS::Region}'
このIAM RoleのARNは、AWS Config
から Systems Manager Automation
へ渡されるパラメータの1つとして規定される。AWS::Config::RemediationConfiguration
は、非準拠(NON_COMPLIANT)と判定された場合の自動修復方法を規定し、Config Rule
と Systems Manager Automation
との紐付けや、受け渡されるパラメータの規定を行う。自動修復を行う場合は、AutomationAssumeRole, MaximumAutomaticAttempts, RetryAttemptSeconds の各パラメータの入力が必須である。
Resources: ConfigIamPasswordPolicyRemediationConfiguration: Type: AWS::Config::RemediationConfiguration Properties: Automatic: true ConfigRuleName: !Ref ConfigIamPasswordPolicy MaximumAutomaticAttempts: 1 Parameters: AutomationAssumeRole: StaticValue: Values: - !GetAtt IAMRoleForSSM.Arn RetryAttemptSeconds: 60 TargetId: !Ref SSMAutomationUpdateAccountPasswordPolicy TargetType: SSM_DOCUMENT
以上で、CIS AWS Foundations Benchmark
に準拠したIAM パスワードポリシーへと、自動で修復することができた。