Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDKのコード記述は、全部は自分で書かなくていいんです!〜BLEA(Baseline Envi...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

CDKのコード記述は、全部は自分で書かなくていいんです!〜BLEA(Baseline Environment on AWS)のWAFとCloudFrontを見てみよう〜

CDK
BLEA
WAF
CloudFront

More Decks by キャリアチェンジAWSエンジニア

Other Decks in Technology

Transcript

  1. 6 frontend.ts (WAF, CloudFrontに関する記述) コード詳細① import * as cdk from

    'aws-cdk-lib'; import { aws_cloudfront as cloudfront, aws_cloudfront_origins as origins, aws_s3 as s3, aws_wafv2 as wafv2, // -- Sample to use custom domain on CloudFront // aws_certificatemanager as acm, // aws_route53 as r53, // aws_route53_targets as r53targets, } from 'aws-cdk-lib'; import { ILoadBalancerV2 } from 'aws-cdk-lib/aws-elasticloadbalancingv2'; import { Construct } from 'constructs'; export interface FrontendProps { alb: ILoadBalancerV2; // -- Sample to use custom domain on CloudFront // hostedZoneId: string; // domainName: string; // cloudFrontHostName: string; }
  2. 7 frontend.ts (WAF, CloudFrontに関する記述) コード詳細② export class Frontend extends Construct

    { public readonly distributionId: string; public readonly distributionDomainName: string; constructor(scope: Construct, id: string, props: FrontendProps) { super(scope, id); // ------------------------------------------------------------------------ // WAFv2 // Note: // For ALB, scope='REGIONAL' and you can deploy on the region you like. // For CloudFront, scope='CLOUDFRONT' and you must specify props.env.region = 'us-east-1' // // Caution: // // 注意! WAF, Cloudfrontは、 “バージニア北部”にしか作成できないリソース!
  3. 8 frontend.ts (WAF, CloudFrontに関する記述) コード詳細③ const webAcl = new wafv2.CfnWebACL(this,

    'WebAcl', { defaultAction: { allow: {} }, name: cdk.Names.uniqueResourceName(this, {}), scope: 'CLOUDFRONT', visibilityConfig: { cloudWatchMetricsEnabled: true, metricName: cdk.Names.uniqueResourceName(this, {}), sampledRequestsEnabled: true, }, rules: [ { priority: 1, overrideAction: { count: {} }, visibilityConfig: { sampledRequestsEnabled: true, cloudWatchMetricsEnabled: true, metricName: 'AWS-AWSManagedRulesCommonRuleSet', }, name: 'AWSManagedRulesCommonRuleSet', statement: { managedRuleGroupStatement: { vendorName: 'AWS', name: 'AWSManagedRulesCommonRuleSet', }, }, }, WAF AWS マネージドルールのルールグループの、 ベースラインルールグループの1つ コアルールセット (CRS) マネージドルール グループ OWASP(Open Web Application Security Project) (読み方:オワスプ)Top 10 など の OWASP の発行物に記載されているリス クが高く頻繁に発生する脆弱性等、様々な 脆弱性の悪用に対する保護を提供
  4. 9 frontend.ts (WAF, CloudFrontに関する記述) コード詳細④ { priority: 2, overrideAction: {

    count: {} }, visibilityConfig: { sampledRequestsEnabled: true, cloudWatchMetricsEnabled: true, metricName: 'AWS-AWSManagedRulesKnownBadInputsRuleSet', }, name: 'AWSManagedRulesKnownBadInputsRuleSet', statement: { managedRuleGroupStatement: { vendorName: 'AWS', name: 'AWSManagedRulesKnownBadInputsRuleSet', }, }, }, { priority: 3, overrideAction: { count: {} }, visibilityConfig: { sampledRequestsEnabled: true, cloudWatchMetricsEnabled: true, metricName: 'AWS-AWSManagedRulesAmazonIpReputationList', }, name: 'AWSManagedRulesAmazonIpReputationList', statement: { managedRuleGroupStatement: { vendorName: 'AWS', name: 'AWSManagedRulesAmazonIpReputationList', }, }, }, WAF AWS マネージドルールのルールグループの、 ベースラインルールグループの1つ 既知の不正な入力ルールグループ 無効であることが既知で、脆弱性の悪用または脆弱性 の発見に関係するリクエストパターンをブロックする ルールを含む。 これにより、悪意のあるアクターが脆弱なアプリケー ションを発見するリスクを低減できる。 AWS マネージドルールのルールグループの、 IP 評価ルールグループの1つ Amazon IP 評価リストマネージドルールグループ Amazonが保有する脅威インテリジェンスに基づく ルールを含む。通常ボットやその他の脅威に関連付 けられているIPアドレスをブロックする場合に役立 つ。 これらのIPアドレスをブロックすることで、ボット を緩和し、悪意のあるアクターが脆弱なアプリケー ションを発見するリスクを緩和できる。
  5. 10 frontend.ts (WAF, CloudFrontに関する記述) コード詳細⑤ { priority: 4, overrideAction: {

    count: {} }, visibilityConfig: { sampledRequestsEnabled: true, cloudWatchMetricsEnabled: true, metricName: 'AWS-AWSManagedRulesLinuxRuleSet', }, name: 'AWSManagedRulesLinuxRuleSet', statement: { managedRuleGroupStatement: { vendorName: 'AWS', name: 'AWSManagedRulesLinuxRuleSet', }, }, }, { priority: 5, overrideAction: { count: {} }, visibilityConfig: { sampledRequestsEnabled: true, cloudWatchMetricsEnabled: true, metricName: 'AWS-AWSManagedRulesSQLiRuleSet', }, name: 'AWSManagedRulesSQLiRuleSet', statement: { managedRuleGroupStatement: { vendorName: 'AWS', name: 'AWSManagedRulesSQLiRuleSet', }, }, }, ], }); WAF AWS マネージドルールのルールグループの、ユースケー ス固有のルールグループの1つ Linux オペレーティングシステムマネージドルールグ ループ Linux 固有のローカルファイルインクルージョン (LFI) 攻撃など、Linux 固有の脆弱性の悪用に関連するリクエ ストパターンをブロックするルールを含む。 これにより、攻撃者がアクセスしてはならないファイル の内容を公開したり、コードを実行したりする攻撃を防 ぐことができる。 AWS マネージドルールのルールグループの、ユースケー ス固有のルールグループの1つ SQLデータベースマネージドルールグループ SQLインジェクション攻撃などの SQLデータベースの悪 用に関連するリクエストパターンをブロックするルールを 含む。これにより、不正なクエリのリモートインジェク ションを防ぐことができる。
  6. 11 frontend.ts (WAF, CloudFrontに関する記述) コード詳細⑥ // --------- CloudFront Distrubution const

    distribution = new cloudfront.Distribution(this, 'Distribution', { defaultBehavior: { origin: new origins.LoadBalancerV2Origin(props.alb, { protocolPolicy: cloudfront.OriginProtocolPolicy.HTTP_ONLY, }), viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.HTTPS_ONLY, allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL, cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED, originRequestPolicy: cloudfront.OriginRequestPolicy.ALL_VIEWER, }, additionalBehaviors: { '/static/*': { origin: new origins.S3Origin(webContentBucket), viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED, }, }, errorResponses: [ { httpStatus: 403, responseHttpStatus: 403, responsePagePath: '/static/sorry.html', ttl: cdk.Duration.seconds(20), }, ], defaultRootObject: '/', // Need for SecurityHub Findings CloudFront.1 compliant // WAF defined on us-east-1 webAclId: webAcl.attrArn, }); CloudFront オリジン :何に対して ビヘイビア:何を行うか ディストリビューション: 設定のまとまり