こんにちは。たかやまです。
Control Towerではリージョン拒否コントロール、OrganizationsではSCPを利用することで特定のリージョンのみに利用を制限することができます。
リージョン拒否コントロールを適用するリージョンでは、以後アクセスができなくなるため適用前にリージョンにはリソースが存在しないことを確認することが推奨されています。
注記
リージョン拒否コントロールを有効にする前に、適用するリージョンに既存のリソースがないことを確認してください。コントロールを適用すると、以後そのリージョン内のリソースにアクセスできなくなるためです。このコントロールが有効になっている間は、拒否したリージョンにリソースをデプロイできません。https://docs.aws.amazon.com/ja_jp/controltower/latest/userguide/region-deny.html
上記内容からリソースにアクセスできなくなることは想定できます。
一方で利用できないリソースへの料金はどうなるのでしょうか?
今回はリージョン拒否コントロールを適用しているリソースの料金について気になり確認してみたので、その内容をお伝えします。
さきにまとめ
- リージョン拒否コントロールを適用しているリージョンにリソースが存在する場合、そのリソースに対して料金が発生する
- 不要な料金発生を抑えるためにも、リージョン拒否コントロールを適用している環境に入れる前にリソース削除を実施する
- AWSのリソースの削除には
aws-nuke
の利用が便利 - Organizations連携で展開されているリソースは、管理アカウントでの関連付け設定を解除してからメンバーアカウントでの削除を実施する
- AWSのリソースの削除には
確認してみる
リージョン拒否コントロールの準備
環境は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)でした。