ControlTower導入の話(SecurityHub編①)
はじめに
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では、一緒にプロダクト開発組織を盛り上げてくれる仲間を募集しています!
ご興味のある方は以下リンクから応募していただき、カジュアル面談を通じて働く環境や仲間を知っていただければと思います!
その際、応募フォームの「知ったきっかけ」に「テックブログ」と記載いただければと思います。
Discussion