[アップデート]AWS Control Towerのランディングゾーンバージョン 3.1 がリリースされたのでアップデートしてみた

2023.02.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、芦沢(@ashi_ssan)です。

Control Towerのアップデートにより、ランディングゾーンのバージョン3.1がリリースされました。

本ブログでは更新内容の紹介と検証環境でバージョン3.1にアップデートしてみてわかった内容についてレポートします。

更新内容まとめ

  • ログアーカイブアカウントのアクセスログ用 S3バケットのサーバーアクセスログ記録が無効化される
    • アクセスログ用バケットのアクセスログを取得しなくなり、不要なアクセスログが発生しない
  • リージョン拒否コントロールへ例外となるグローバルサービスが追加される
    • 追加されたそうだが、バージョン3.0と3.1の更新差分は確認できなかった

バージョン3.1の更新内容

アクセスログ用S3バケットのサーバーアクセスログ記録の無効化

Control Towerでは、Control Tower配下(ランディングゾーン内)のすべてのアカウントが出力するCloudTrailログやConfigログを、ログアーカイブアカウントのS3バケットへ集約して保存しています。

ログを集約するS3バケットのアクセスログ(aws-controltower-logs-から始まるバケット)は別のS3バケット(aws-controltower-s3-access-logs-から始まるバケット)に保存されています。 ※下図の「①のアクセスログ」

バージョン3.0ではアクセスログを保存するバケットのアクセスログ記録も有効化されており、そのアクセスログは自身に保存されていました。※下図の「②のアクセスログ」

それが、バージョン3.1ではアクセスログ保存バケットのアクセスログ記録が無効化される設定に変更され、アクセスログの自身への保存がなくなりました。

リージョン拒否コントロールへの例外となるグローバルサービスの追加

SCP(Service Control Policy)は、Organizationsの機能でOU(Organizations Unit, 組織)単位又はAWSアカウント単位で指定できるポリシーで、実行できるサービスやアクションを制限できます。

Control Towerには、ランディングゾーン全体に適用かつアカウント単位のオプトアウト不可、という他のSCPとは違った挙動をする 「リージョン拒否コントロール」というものがあります。そのリージョン拒否コントロールが今回の更新対象です。

This version also includes updates to Region Deny that allow additional actions for global services such as AWS Support Plans and AWS Artifact.

アップデートブログの文面に上記とあるように、今回のアップデートで例外指定されるグローバルサービス(AWS Support PlansやAWS Artifactのようなグローバルサービス)が増えているようです。

後述する「更新してみた」で詳しい更新内容については確認してみようと思います。

更新してみた

Control Towerコンソールのランディングゾーン設定を確認してみると、このようにバージョン3.1が追加されています。更新してみましょう。

更新時のはいつものように「推定残り時間:60分」と表示されますが、私の検証環境では大体30分くらいで更新が完了しました。

更新が完了したら、更新された内容を確認してみましょう。

S3アクセスログのアップデート後チェック

ログアーカイブアカウントのControl Towerログのアクセスログ用バケット(aws-controltower-s3-access-logs-から始まるバケット)を確認します。

S3アクセスログ設定が無効になっていることがわかります。

ちなみに変更の影響で、該当のS3バケットがSecuirty Hubのセキュリティ基準 『AWS 基礎セキュリティのベストプラクティス v1.0.0』の"[S3.9]S3 bucket server access logging should be enabled"で新規に違反項目として検出されてしまいます。

しかし、AWS公式ドキュメントに以下とあるように、AWSのベストプラクティスとしてアクセスログの保存用バケットのサーバーアクセスログ記録は有効にしなくても問題ありません。

ターゲットのログ記録バケットは、サーバーアクセスのログ記録を有効にする必要がないため、このバケットの結果は非表示にします。

忘れないうちに、「抑制済み」のステータスに変更しておきましょう。

リージョン拒否コントロールのアップデート後チェック

リージョン拒否コントロールのJSONは、Control Towerコンソールのランディングゾーン設定-リージョン拒否コントロールの統制の詳細を表示 から

遷移した先のアーティファクトタブのService control policy (SCP)をクリックすると、SCPのJSONファイルの中身が確認できます。

こちらがバージョン3.1のSCPのJSONファイルです。

※トグルを開くと表示されます
```json { "Version": "2012-10-17", "Statement": [ { "Condition": { "StringNotEquals": { "aws:RequestedRegion": [ "ap-northeast-1", "us-east-1" ] }, "ArnNotLike": { "aws:PrincipalARN": [ "arn:aws:iam::*:role/AWSControlTowerExecution" ] } }, "Resource": "*", "Effect": "Deny", "NotAction": [ "a4b:*", "access-analyzer:*", "acm:*", "account:*", "activate:*", "artifact:*", "aws-marketplace-management:*", "aws-marketplace:*", "aws-portal:*", "billingconductor:*", "budgets:*", "ce:*", "chatbot:*", "chime:*", "cloudfront:*",z "compute-optimizer:*", "config:*", "cur:*", "datapipeline:GetAccountLimits", "devicefarm:*", "directconnect:*", "discovery-marketplace:*", "ec2:DescribeRegions", "ec2:DescribeTransitGateways", "ec2:DescribeVpnGateways", "ecr-public:*", "fms:*", "globalaccelerator:*", "health:*", "iam:*", "importexport:*", "kms:*", "license-manager:ListReceivedLicenses", "lightsail:Get*", "mobileanalytics:*", "networkmanager:*", "organizations:*", "pricing:*", "resource-explorer-2:*", "route53-recovery-cluster:*", "route53-recovery-control-config:*", "route53-recovery-readiness:*", "route53:*", "route53domains:*", "s3:CreateMultiRegionAccessPoint", "s3:DeleteMultiRegionAccessPoint", "s3:DescribeMultiRegionAccessPointOperation", "s3:GetAccountPublic", "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:PutAccountPublic", "s3:PutAccountPublicAccessBlock", "s3:PutMultiRegionAccessPointPolicy", "savingsplans:*", "shield:*", "sso:*", "sts:*", "support:*", "supportapp:*", "supportplans:*", "sustainability:*", "tag:GetResources", "trustedadvisor:*", "vendor-insights:ListEntitledSecurityProfiles", "waf-regional:*", "waf:*", "wafv2:*" ], "Sid": "GRREGIONDENY" } ] } ```

バージョン3.1では「NotAction」配下のAWSサービスの種類が増えていると思われるのですが、私の環境だとバージョン3.0のリージョン拒否コントロールのJSONとの差分が見つかりませんでした。

少なくともバージョン3.0のSCPにも、AWS Support PlansやAWS ArtifactのAPIのことを指す"artifact:"や"supportplans:"は含まれているので、アップデートブログで言われているような新規追加されたグローバルサービスがなんだったのかわかりませんでした。

ご自身の環境との差分が気になる方は前述したバージョン3.1のSCP JSONと比較してみてください。

(2023/3/7追記) バージョン3.0と3.1のリージョン拒否コントロールについて

本章の記載の内容は、2023年3月7日現在、確認できている事象です。 今後の更新により現在とは状況が変わる場合がありますので、ご承知おきください。

ランディングゾーン バージョン3.0とバージョン3.1のリージョン拒否コントロール間で差分が見つからなかった事象についてサポートに確認したところ、どうやら想定していない事象だったようでControl Tower側の表示の不具合である、との回答をいただきました。

表示が不具合であることを確認するために、同じ環境のOrganizationsコンソールからSCPを確認してみました、

Organizationsコンソールで、同じSID(GRREGIONDENY)のSCPを確認したところ、こちらはバージョン3.0の内容が表示されていました。

SCPに記載のあるバージョン3.0のJSONファイルはこちらです(トグルをクリック)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": [
            "ap-northeast-1",
            "us-east-1"
          ]
        },
        "ArnNotLike": {
          "aws:PrincipalARN": [
            "arn:aws:iam::*:role/AWSControlTowerExecution"
          ]
        }
      },
      "Resource": "*",
      "Effect": "Deny",
      "NotAction": [
        "a4b:*",
        "acm:*",
        "aws-marketplace-management:*",
        "aws-marketplace:*",
        "aws-portal:*",
        "budgets:*",
        "ce:*",
        "chime:*",
        "cloudfront:*",
        "config:*",
        "cur:*",
        "directconnect:*",
        "ec2:DescribeRegions",
        "ec2:DescribeTransitGateways",
        "ec2:DescribeVpnGateways",
        "fms:*",
        "globalaccelerator:*",
        "health:*",
        "iam:*",
        "importexport:*",
        "kms:*",
        "mobileanalytics:*",
        "networkmanager:*",
        "organizations:*",
        "chatbot:*",
        "pricing:*",
        "route53-recovery-control-config:*",
        "route53-recovery-readiness:*",
        "route53-recovery-cluster:*",
        "route53:*",
        "route53domains:*",
        "s3:GetBucketPublicAccessBlock",
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation",
        "s3:GetAccountPublic",
        "s3:DeleteMultiRegionAccessPoint",
        "s3:DescribeMultiRegionAccessPointOperation",
        "s3:GetMultiRegionAccessPoint",
        "s3:GetMultiRegionAccessPointPolicy",
        "s3:GetMultiRegionAccessPointPolicyStatus",
        "s3:ListMultiRegionAccessPoints",
        "s3:GetStorageLensConfiguration",
        "s3:GetStorageLensDashboard",
        "s3:ListStorageLensConfigurations",
        "s3:GetAccountPublicAccessBlock",
        "s3:PutAccountPublic",
        "s3:PutAccountPublicAccessBlock",
        "shield:*",
        "sts:*",
        "support:*",
        "trustedadvisor:*",
        "waf-regional:*",
        "waf:*",
        "wafv2:*",
        "access-analyzer:*"
      ],
      "Sid": "GRREGIONDENY"
    }
  ]
}

上記の内容から、あくまでControl Towerの表記上の問題で、適用されているSCPは想定通りバージョン3.0の内容であることがわかりました。

参考までに、両者をDiffしたところ、以下のように差分が確認できました。左がバージョン3.0で右がバージョン3.1です。

文字が小さくてほぼ見えないと思いますが、左のバージョン3.0はバージョン3.1と比べて項目が不足していること(赤ハイライトの箇所)、右のバージョン3.1はバージョン3.0と比較して項目が増えている(緑ハイライトの箇所)ことがわかります。

最後に

今回は、Control Towerランディングゾーンの新しいバージョンであるバージョン3.1の更新内容について調査し、検証環境でバージョンを更新して内容を確認してみました。

個人的に、ランディングゾーン3.0から3.1へのアップデートはぜひやってほしいと思っています。

「アクセスログ用S3バケットのサーバーアクセスログ記録の無効化」によりアクセスログ記録が最適化され、「リージョン拒否コントロールへの例外サービス追加」についても差分こそ確認できなかったのですが、例外の追加であるため既存環境への影響はないものだと思っていいと思われます。

バージョン3.0以前からのアップデートについては過去のブログをご覧いただき、更新内容を確認いただいた後にご検討ください。

本ブログがあなたの役に立てれば幸いです。

以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。