🔒

ControlTower導入の話(SecurityHub編①)

2024/04/11に公開

はじめに

Septeni Japan株式会社でプロダクト開発&インフラセキュリティ対策を行っている市原と申します。
この記事は、社内のプロダクトに対してセキュリティのガバナンスを効かせる為にAWS Control Towerを導入した話となります。
Control Tower導入の話は下記のパートに分かれて記事を執筆しています。

今回はSecurityHub編①となります。

Control Towerの機能の①コントロール(=ガードレール)適用のうちの検出的コントロール部分は、SecurityHubというサービスによって実現されます。SecurityHub単体でもセキュリティ対策として導入可能なほど、できることが多い為、Control Tower導入の話の中でもSecurityHubの話を2回に分けて記事にしています。

SecurityHubによる検出的コントロール


SecurityHubによって実現可能なことは、セキュリティリスクのある設定を検出するという部分になります。前記事に出てきたSCPでは、機能を禁止する役割でしたが、SecurityHubではあくまで検出にとどまっているのが違いです。

SecurityHubのOrganization連携による統合

なお、当社では、Control TowerからSecurityHubを有効にする方法ではなく、AuditやLog Archive、メンバーアカウントなどのアカウント構成はそのままで、SecurityHubをOrganization連携によって統合管理しています。

理由としては、Control Towerから導入するとRootアカウントを操作する必要がある為です。
Control TowerからSecurityHubを有効にした場合、Control TowerはRootアカウントに導入している為、コントロールの有効化時にRootアカウントに対してアクセスが必要となります。当社では、権限管理上、Rootアカウントには極力アクセスせずに管理していく方針を取っている為、この方法での管理は適さないと判断しました。

一方、SecurityHubをOrganization連携によって、Auditアカウントへ権限委任してしまえば、Rootアカウントを操作せずに管理が行え、当社の管理方針にも差し支えない為、この方法を取ることとしました。

有効化した検出項目

以下は、有効にした検出項目です。対象は重要度が「高」「重要」のものとなります。
「中」「低」については、別途判断し、有効にしていく予定です。

ID 項目 重要度
ACM.2 RSA certificates managed by ACM should use a key length of at least 2,048 bits
Autoscaling.5 Auto Scaling グループの起動設定を使用して起動された Amazon EC2 インスタンスには、パブリック IP アドレスを使用しないでください
CloudFront.1 CloudFront ディストリビューションでは、デフォルトのルートオブジェクトが設定されている必要があります 重要
CloudFront.12 CloudFront distributions should not point to non-existent S3 origins
CodeBuild.1 CodeBuild GitHub または Bitbucket ソースリポジトリの URL は OAuth を使用する必要があります 重要
CodeBuild.2 CodeBuild プロジェクトの環境変数には、クリアテキストの認証情報を含めないでください 重要
DMS.1 Database Migration Service のレプリケーションインスタンスはパブリックであってはなりません 重要
DocumentDB.3 Amazon DocumentDB manual cluster snapshots should not be public 重要
EC2.1 EBS スナップショットはパブリックに復元可能ではありません 重要
EC2.13 Security groups should not allow ingress from 0.0.0.0/0 to port 22
EC2.14 Ensure no security groups allow ingress from 0.0.0.0/0 to port 3389
EC2.18 セキュリティグループは、許可されたポートのための無制限の着信トラフィックのみを許可する必要があります
EC2.19 セキュリティグループは、リスクが高いポートへの無制限アクセスを許可してはなりません 重要
EC2.25 EC2 launch templates should not assign public IPs to network interfaces
ECR.1 ECR プライベートリポジトリでは、イメージスキャンを設定する必要があります。
ECS.1 Amazon ECS タスク定義には、安全なネットワークモードとユーザー定義が必要です。
ECS.2 ECS サービスには、自動的にパブリック IP アドレスが割り当てられてはなりません
ECS.3 ECS タスク定義ではホストのプロセス名前空間を共有しないでください
ECS.4 ECS コンテナは非特権として実行する必要があります
ECS.5 ECS コンテナは、ルートファイルシステムに対する読み取り専用アクセス権に制限される必要があります
ECS.8 シークレットはコンテナ環境変数として渡さないでください
ECS.9 ECS task definitions should have a logging configuration
EKS.1 EKS cluster endpoints should not be publicly accessible
EKS.2 EKS クラスターは、サポートされている Kubernetes バージョンで実行する必要があります
EMR.1 Amazon Elastic MapReduce クラスターのマスターノードにはパブリック IP アドレスを使用できません
ES.2 Elasticsearch ドメインは VPC 内に存在する必要があります 重要
IAM.1 IAM ポリシーは完全な「*」管理権限を許可してはなりません
IAM.4 IAM ルートユーザーアクセスキーは存在してはなりません 重要
KMS.3 AWS KMS キーを意図せずに削除しないでください 重要
Lambda.1 Lambda 関数ポリシーはパブリックアクセスを禁止する必要があります 重要
Neptune.3 Neptune DB cluster snapshots should not be public 重要
Opensearch.2 OpenSearch domains should be in a VPC 重要
RDS.1 RDS スナップショットはプライベートにする必要があります 重要
RDS.13 RDS マイナーバージョン自動アップグレードが有効になっている必要があります
RDS.18 RDS インスタンスは、VPC にデプロイされる必要があります
RDS.2 RDS DB インスタンスはパブリックアクセスを禁止する必要があります。PubliclyAccessible 設定によって決まります。 重要
Redshift.1 Amazon Redshift クラスターはパブリックアクセスを禁止する必要があります 重要
S3.2 S3 バケットはパブリック読み取りアクセスを禁止する必要があります 重要
S3.3 S3 バケットはパブリック書き込みアクセスを禁止する必要があります 重要
S3.6 バケットポリシーで他の AWS アカウントに付与される S3 アクセス権限は制限する必要があります
S3.8 S3 ブロックパブリックアクセス設定は、バケットレベルで有効になっている必要があります
SageMaker.1 Amazon SageMaker ノートブックインスタンスにインターネットへの直接アクセスを設定しないようにします
SageMaker.2 SageMaker notebook instances should be launched in a custom VPC
SageMaker.3 Users should not have root access to SageMaker notebook instances
SSM.2 Systems Manager で管理される EC2 インスタンスでは、パッチのインストール後、パッチコンプライアンスステータスが COMPLIANT である必要があります
SSM.4 SSM ドキュメントは公開できません 重要

無効化した検出項目

以下は、無効化した検出項目です。
無効化した理由は、下記です。

  • ControlTowerの機能で有効になっているもの
  • 別のコントロールで代替できるもの
  • 使わないサービス、かつ、設定がリッチになりすぎるもの
ID 項目 重要度
AutoScaling.4 Auto Scaling グループの起動設定には、1 より大きいメタデータ応答ホップ制限を設定しないでください
Account.2 AWS account should be part of an AWS Organizations organization
AppSync.5 AWS AppSync GraphQL APIs should not be authenticated with API keys
AutoScaling.3 Auto Scaling グループの起動設定では、インスタンスメタデータサービスバージョン 2 (IMDSv2) を要求するように EC2 インスタンスを設定する必要があります
CloudTrail.1 CloudTrail は、読み取り/書き込み管理イベントを含むマルチリージョンの証跡を少なくとも 1 つ有効にし、設定する必要があります。
CloudTrail.3 CloudTrail を有効にする必要があります
CloudWatch.15 CloudWatch Alarms should have an action configured for the alarm state
CloudWatch.17 CloudWatch alarm actions should be enabled
CodeBuild.5 CodeBuild プロジェクト環境では、特権モードを有効にしないでください
EC2.2 VPC のデフォルトセキュリティグループでは、インバウンドまたはアウトバウンドのトラフィックを許可してはなりません
EC2.23 EC2 Transit Gateway は、VPC アタッチメントリクエストを自動的に受け入れることはできません
EC2.8 EC2 インスタンスでは、Instance Metadata Service Version 2 (IMDSv2) を使用する必要があります
EC2.9 EC2 インスタンスにはパブリック IPv4 アドレスを使用できません
ElastiCache.1 ElastiCache Redis clusters should have automatic backup enabled
ElastiCache.2 ElastiCache for Redis cache clusters should have auto minor version upgrades enabled
ElastiCache.7 ElastiCache clusters should not use the default subnet group
ElasticBeanstalk.2 Elastic Beanstalk マネージドプラットフォームの更新が有効になっている必要があります
ElasticBeanstalk.3 Elastic Beanstalk should stream logs to CloudWatch
GuardDuty.1 GuardDuty を有効にする必要があります
IAM.6 ハードウェア MFA はルートユーザーに対して有効にする必要があります 重要
IAM.9 MFA はルートユーザーのために有効化される必要があります 重要
Opensearch.7 OpenSearch ドメインでは、きめ細かなアクセスコントロールを有効にしなければなりません

次回

次回はSecurityHub編②です。当社ではセキュリティ検出が上がったタイミングでslack通知させる仕組みを取り入れているので、その通知の仕組みや条件について詳しく説明していきます。

We are hiring

Septeni Japanでは、一緒にプロダクト開発組織を盛り上げてくれる仲間を募集しています!
ご興味のある方は以下リンクから応募していただき、カジュアル面談を通じて働く環境や仲間を知っていただければと思います!

その際、応募フォームの「知ったきっかけ」に「テックブログ」と記載いただければと思います。
https://septeni-recruitment.snar.jp/jobboard/detail.aspx?id=D3Sa2fnGT-Q5Qe8T-ivLbg

Discussion