リージョン拒否コントロールを適用した環境の料金について確認してみた

2024.03.13

こんにちは。たかやまです。

Control Towerではリージョン拒否コントロール、OrganizationsではSCPを利用することで特定のリージョンのみに利用を制限することができます。

リージョン拒否コントロールを適用するリージョンでは、以後アクセスができなくなるため適用前にリージョンにはリソースが存在しないことを確認することが推奨されています。

注記
リージョン拒否コントロールを有効にする前に、適用するリージョンに既存のリソースがないことを確認してください。コントロールを適用すると、以後そのリージョン内のリソースにアクセスできなくなるためです。このコントロールが有効になっている間は、拒否したリージョンにリソースをデプロイできません。

https://docs.aws.amazon.com/ja_jp/controltower/latest/userguide/region-deny.html

上記内容からリソースにアクセスできなくなることは想定できます。

一方で利用できないリソースへの料金はどうなるのでしょうか?

今回はリージョン拒否コントロールを適用しているリソースの料金について気になり確認してみたので、その内容をお伝えします。

さきにまとめ

  • リージョン拒否コントロールを適用しているリージョンにリソースが存在する場合、そのリソースに対して料金が発生する
  • 不要な料金発生を抑えるためにも、リージョン拒否コントロールを適用している環境に入れる前にリソース削除を実施する
    • AWSのリソースの削除にはaws-nukeの利用が便利
    • Organizations連携で展開されているリソースは、管理アカウントでの関連付け設定を解除してからメンバーアカウントでの削除を実施する

確認してみる

リージョン拒否コントロールの準備

環境はControl Towerを利用していないOrganizationsの環境でSCPでリージョン拒否コントロールを適用してみます。

SCPは以下の内容を設定し、ap-northeast-1以外は利用できないようします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "NotAction": [
        "a4b:*",
        "access-analyzer:*",
        "account:*",
        "acm:*",
        "activate:*",
        "artifact:*",
        "aws-marketplace-management:*",
        "aws-marketplace:*",
        "aws-portal:*",
        "billing:*",
        "billingconductor:*",
        "budgets:*",
        "ce:*",
        "chatbot:*",
        "chime:*",
        "cloudfront:*",
        "cloudtrail:LookupEvents",
        "compute-optimizer:*",
        "config:*",
        "consoleapp:*",
        "consolidatedbilling:*",
        "cur:*",
        "datapipeline:GetAccountLimits",
        "devicefarm:*",
        "directconnect:*",
        "ec2:DescribeRegions",
        "ec2:DescribeTransitGateways",
        "ec2:DescribeVpnGateways",
        "ecr-public:*",
        "fms:*",
        "freetier:*",
        "globalaccelerator:*",
        "health:*",
        "iam:*",
        "importexport:*",
        "invoicing:*",
        "iq:*",
        "kms:*",
        "license-manager:ListReceivedLicenses",
        "lightsail:Get*",
        "mobileanalytics:*",
        "networkmanager:*",
        "notifications-contacts:*",
        "notifications:*",
        "organizations:*",
        "payments:*",
        "pricing:*",
        "quicksight:DescribeAccountSubscription",
        "resource-explorer-2:*",
        "route53-recovery-cluster:*",
        "route53-recovery-control-config:*",
        "route53-recovery-readiness:*",
        "route53:*",
        "route53domains:*",
        "s3:CreateMultiRegionAccessPoint",
        "s3:DeleteMultiRegionAccessPoint",
        "s3:DescribeMultiRegionAccessPointOperation",
        "s3:GetAccountPublicAccessBlock",
        "s3:GetBucketLocation",
        "s3:GetBucketPolicyStatus",
        "s3:GetBucketPublicAccessBlock",
        "s3:GetMultiRegionAccessPoint",
        "s3:GetMultiRegionAccessPointPolicy",
        "s3:GetMultiRegionAccessPointPolicyStatus",
        "s3:GetStorageLensConfiguration",
        "s3:GetStorageLensDashboard",
        "s3:ListAllMyBuckets",
        "s3:ListMultiRegionAccessPoints",
        "s3:ListStorageLensConfigurations",
        "s3:PutAccountPublicAccessBlock",
        "s3:PutMultiRegionAccessPointPolicy",
        "savingsplans:*",
        "shield:*",
        "sso:*",
        "sts:*",
        "support:*",
        "supportapp:*",
        "supportplans:*",
        "sustainability:*",
        "tag:GetResources",
        "tax:*",
        "trustedadvisor:*",
        "vendor-insights:ListEntitledSecurityProfiles",
        "waf-regional:*",
        "waf:*",
        "wafv2:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": [
            "ap-northeast-1"
          ]
        }
      }
    }
  ]
}

SCPはSandboxOUに適用していきます。

リソースを作成する

リソースはaws-cdk-examplesからapplication-load-balancerを利用してus-east-1にリソースを作成します。

問題なくリソースが展開されていることが確認できます。

もちろんリージョン制限をかけない状態であれば、us-east-1のリソースは通常通り確認することができます。

リージョン制限を適用する

管理アカウントでOU移動を実施、リージョン制限を適用していきます。
今回リソースをデプロイしたSandboxアカウントSandboxOUに移動していきます。

移動後はリソースをデプロイしたSandboxアカウントのus-east-1のリソースを確認することはできません。

この状態でしばし環境を放置します...

料金を確認する

1日後料金を確認してみます。

ご覧の通り、リージョン制限をかけていたus-east-1において料金が発生していることが確認できます。
今回展開したEC2のリソース以外にOrganizations連携で展開されていたSecurity Hub/GuardDuty/Detectiveの料金も発生していそうです。

リージョン制限で事実上、サービスは利用できない状態になっていますがサービスが存在する場合は料金が発生するのでリージョン制限をかける前にリソースの削除を実施することが重要です。

リソースを削除する方法

特定リージョンのリソースを削除したい場合にはaws-nukeを利用いただくのが便利です。

aws-nukeは設定しだいで本番環境のリソースを削除する可能性があるため、使用時には十分注意が必要です。リソース削除による損害は使用者の責任となりますので、自己責任において利用してください。

aws-nukeの詳細についてはこちらのブログをご参照ください。

削除保護がかかっているリソースについてはFeature Flagsを利用することで削除することができます。

一方で以下のようなOrganizations連携で展開されているリソースはaws-nukeを使っても削除することはできません。

  • Security Hub
  • GuardDuty
  • Detective
  • etc...

AWS Organizations で使用できる AWS のサービス - AWS Organizations

Organizations連携で展開されているリソースについては、管理アカウントでの関連付け設定を解除してからメンバーアカウントでの削除を実施してください。

GuardDutyの例

最後に

なんとなく想像はついていましたが、リージョン制限をかけている場合でもリソースが存在する場合は料金が発生することがわかりました。

リージョン制限をかける前に利用しないリージョンのリソースは削除し、不要な料金が発生しないようにしましょう!

※誤って本番リソースを削除しないように注意してください!!

以上、たかやま(@nyan_kotaroo)でした。