メインコンテンツまでスキップ

最後の仕上げ

注記

作成日:2022/05/04

独自ドメインからのアクセスのみに限定する

これまでの設定で、WordPressへアクセスする宛先が複数出てきました。 最終的にはCloudFrontに設定した独自ドメイン以外からのアクセスを以下のルールで防ぎます。

No.AWSサービス宛先アクセス可否ルール
1EC2パブリックIPアドレスブロック
2EC2AWS生成ドメインブロック
3ELBAWS生成ドメインCloudFrontの独自ドメインにリダイレクト
4ELB独自ドメインCloudFrontの独自ドメインにリダイレクト
5CloudFrontAWS生成ドメインCloudFrontの独自ドメインにリダイレクト
6CloudFront独自ドメインアクセス許可
  1. EC2への直接アクセスをブロック(No.1,2)

    EC2のセキュリティグループで許可しない(=禁止する)

    wordpress-cdk/lib/wordpress-cdk-stack.ts
    // ec2_sg.addIngressRule(aws_ec2.Peer.anyIpv4(), aws_ec2.Port.tcp(80))
  2. CloudFront独自ドメインにリダイレクト(No.3,4,5)

    ELBのリスナールールを設定
    HOSTヘッダーが一致したらリダイレクト

    wordpress-cdk/lib/wordpress-cdk-stack.ts
    const listener_http = elb.addListener('Listener_http', {
    port: 80,
    open: true,
    defaultTargetGroups: [elb_targetgroup],
    })

    const listener_https = elb.addListener('Listener_https', {
    port: 443,
    open: true,
    certificates: [elb_cert],
    defaultTargetGroups: [elb_targetgroup],
    })

    new aws_elasticloadbalancingv2.ApplicationListenerRule(this, 'listener_http_rule', {
    listener: listener_http,
    priority: 10,
    conditions: [
    aws_elasticloadbalancingv2.ListenerCondition.hostHeaders(
    [elb.loadBalancerDnsName, 'elb.wordpress-cdk.tk', cloudfront.domainName])
    ],
    action: aws_elasticloadbalancingv2.ListenerAction.redirect({
    host: 'www.wordpress-cdk.tk',
    permanent: true,
    })
    })

    new aws_elasticloadbalancingv2.ApplicationListenerRule(this, 'listener_https_rule', {
    listener: listener_https,
    priority: 10,
    conditions: [
    aws_elasticloadbalancingv2.ListenerCondition.hostHeaders(
    [elb.loadBalancerDnsName, 'elb.wordpress-cdk.tk', cloudfront.domainName])
    ],
    action: aws_elasticloadbalancingv2.ListenerAction.redirect({
    host: 'www.wordpress-cdk.tk',
    permanent: true,
    })
    })

確認

curl -v http://Wordp-elb83-1TT135MDVLZ3N-1130701054.ap-northeast-1.elb.amazonaws.com
*   Trying 35.75.128.36:80...
* TCP_NODELAY set
* Connected to Wordp-elb83-1TT135MDVLZ3N-1130701054.ap-northeast-1.elb.amazonaws.com (35.75.128.36) port 80 (#0)
> GET / HTTP/1.1
> Host: Wordp-elb83-1TT135MDVLZ3N-1130701054.ap-northeast-1.elb.amazonaws.com
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< Server: awselb/2.0
< Date: Wed, 04 May 2022 05:21:44 GMT
< Content-Type: text/html
< Content-Length: 134
< Connection: keep-alive
< Location: http://www.wordpress-cdk.tk:80/
<
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
</body>
</html>
* Connection #0 to host Wordp-elb83-1TT135MDVLZ3N-1130701054.ap-northeast-1.elb.amazonaws.com left intact

HTTPS接続のみに限定する

せっかくSSL対応したので、HTTPでアクセスが来た場合にHTTPSにリダイレクトするように設定しましょう

危険

WordPressのSSL化設定が完了してからHTTPSのみに限定しましょう。

wordpress-cdk/lib/wordpress-cdk-stack.ts
    const cloudfront = new aws_cloudfront.Distribution(this, 'cloudfront', {
defaultBehavior: {
origin: new aws_cloudfront_origins.HttpOrigin("elb.wordpress-cdk.tk"),
allowedMethods: aws_cloudfront.AllowedMethods.ALLOW_ALL,
cachedMethods: aws_cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS,
viewerProtocolPolicy: aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS
cachePolicy: aws_cloudfront.CachePolicy.CACHING_OPTIMIZED,
originRequestPolicy: aws_cloudfront.OriginRequestPolicy.ALL_VIEWER,
},
domainNames: ['www.wordpress-cdk.tk'],
certificate: cloudfront_cert
})

ViewerProtocolPolicyをALLOW_ALLからREDIRECT_TO_HTTPSに変更するだけです。

curl -v http://www.wordpress-cdk.tk
*   Trying 13.35.49.75:80...
* TCP_NODELAY set
* Connected to www.wordpress-cdk.tk (13.35.49.75) port 80 (#0)
> GET / HTTP/1.1
> Host: www.wordpress-cdk.tk
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< Server: CloudFront
< Date: Wed, 04 May 2022 05:35:34 GMT
< Content-Type: text/html
< Content-Length: 183
< Connection: keep-alive
< Location: https://www.wordpress-cdk.tk/
< X-Cache: Redirect from cloudfront
< Via: 1.1 4da2bc835e000996f0b384c9db0412cc.cloudfront.net (CloudFront)
< X-Amz-Cf-Pop: NRT20-C1
< X-Amz-Cf-Id: fYs-ClGPQl6YUaZrkAe8h30z83xkw7yf1skElwdShSSqcb6hb14luA==
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>
* Connection #0 to host www.wordpress-cdk.tk left intact