Понимание правил AWS-Config и изменений конфигурации

#typescript #aws-cdk #aws-config

#typescript #aws-cdk #aws-config

Вопрос:

В настоящее время я использую aws-cdk, и моя задача — создать правила конфигурации для примерно 15 правил, которые мы хотим просматривать и получать уведомления. Вот мой код для справки:

  const vpcFlowLoggingBucket = new s3.Bucket(this,'vpcFlowLoggingBucket', {
              accessControl:s3.BucketAccessControl.LOG_DELIVERY_WRITE
      
            });
            const generalConfigRole = new iam.Role(this,  'generalConfigRole',{
              assumedBy: new iam.ServicePrincipal('config.amazonaws.com')
            });

            const cloudTrailEnabledRule = new ManagedRule(this, 'cloudTrailEnabledRule', {
              identifier: 'CLOUD_TRAIL_ENABLED'
            });
            const  iamPasswordPolicyRule = new ManagedRule(this, 'iamPasswordPolicyRule',{
              identifier: 'IAM_PASSWORD_POLICY'
            });
            const userGroupMembershipRule = new ManagedRule(this, 'userGroupMembershipRule',{
              identifier: 'IAM_USER_GROUP_MEMBERSHIP_CHECK'
            });

            const userPolicyRule = new ManagedRule(this,'userPolicyRule',{
              identifier: 'IAM_USER_NO_POLICIES_CHECK'
            });
            const rootAccountMfaEnabledRule = new ManagedRule(this, 'rootAccountMfaEnabledRule',{
              identifier: 'ROOT_ACCOUNT_MFA_ENABLED'
            });
            const accessKeysRotatedRule = new ManagedRule(this, 'accessKeysRotatedRule',{
              identifier:'ACCESS_KEYS_ROTATED',
              inputParameters: {
                maxAccessKeyAge: 100, //rule triggers off of config change and keys must be rotated within 100 days
                configurationChanges: true
              }

              //TODO reference your custom lambda for this
              //Parameters need to be specified here for the amount of days to rotate
            });
            const cloudTrailEncryptionRule = new ManagedRule(this, 'cloudTrailEncryptionRule' ,{
              identifier:'CLOUD_TRAIL_ENCRYPTION_ENABLED'
            });
            const defaultSecurityGroupEniRule = new ManagedRule(this, 'defaultSecurityGroupEniRule',{
              identifier:'EC2_SECURITY_GROUP_ATTACHED_TO_ENI'
            });

            const ebsVolumeEncryption = new ManagedRule(this, 'ebsVolumeEncryption',{
              identifier:'EC2_EBS_ENCRYPTION_BY_DEFAULT'
            });
            const rdsStorageEncryptionRule = new ManagedRule(this, 'rdsStorageEncryptionRule',{
              identifier: 'RDS_STORAGE_ENCRYPTED'
              //This may need the arn of the kms key used for encryption
            });

            const s3BucketLoggingEnabledRule = new ManagedRule(this, 's3BucketLoggingEnabledRule',{
              identifier: 'S3_BUCKET_LOGGING_ENABLED'
              //@aroesec may be able to use a custom rule here for this one and my lambda
            // TODO add custom lambda to this for future purposes
            });
            const s3BucketServerSideEncryptionRule = new ManagedRule(this, 's3BucketServerSideEncryptionRule',{
              identifier:'S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED'
              //@aroesec may be able to use a custom rule here for my lambda
            // TODO add custom lambda to this for future purposes
            });

            const vpcFlowLogsEnabledRule = new ManagedRule(this, 'vpcFlowLogsEnabledRule',{
              identifier:'VPC_FLOW_LOGS_ENABLED',
              inputParameters: {
                trafficType:'ALL', //vpcs must track all traffic (ALLOW and DENY) with this rule
                configurationChanges: true
              }
            });

            const vpcDefaultSecurityGroupRule = new ManagedRule(this, 'vpcDefaultSecurityGroupRule',{
              identifier:'VPC_DEFAULT_SECURITY_GROUP_CLOSED'
            });

            const mfaEnabledForConsoleAccessRule = new ManagedRule(this, 'mfaEnabledForConsoleAccessRule',{
              identifier: 'MFA_ENABLED_FOR_IAM_CONSOLE_ACCESS'
            });

            const rdsMultiAvailZoneRule = new ManagedRule(this, 'rdsMultiAvailZoneRule',{
              identifier:'RDS_MULTI_AZ_SUPPORT'
            });
          }

        }
  

Моя проблема заключается в следующем, когда я пытаюсь использовать параметр configurationChanges и устанавливаю для него значение True. Я ищу это правило конфигурации для сканирования этой группы ресурсов, когда оно замечает там изменения. Причина, по которой я хочу сделать это и не использовать параметр «частота», заключается в том, что наш клиент не хочет, чтобы проверки выполнялись так часто, как 24 часа. Они хотят, чтобы они проверяли около 2 недель для каждого правила. Мой вопрос: 1. могу ли я сделать проверку правил конфигурации реже, чем за 24 часа? например, может быть, еженедельно? 2. Могу ли я заставить лямбду запускать правило конфигурации для сканирования? Например, попросите lambda проверить журналы потока vpc, и если их там нет, запустите правило конфигурации, чтобы вернуть «несоответствующий». ИЛИ 3. Могу ли я просто установить для ConfigurationChange значение true для каждого правила конфигурации и позволить aws обрабатывать его оттуда? Я задаю этот конкретный вопрос, потому что я кое-что читал о config recorder, но не уверен, как его использовать или если это вообще необходимо. Заранее благодарю всех вас!

Ответ №1:

  1. Наименьшая частота проверки правил конфигурации составляет 24 часа, не медленнее, чем при проверке API boto3.

  2. Вы бы хотели, чтобы правило конфигурации запускалось периодически или при изменении конфигурации.

  3. AWS не знает, с чем обращаться. Если вы вносите изменения в конфигурацию, ваш API или ваш код (через lambda) должны знать, что проверять (т. Е. корзина открыта для общественности), затем при обнаружении общедоступной корзины lambda перехватит ее и сообщит (PutEvaluationAP