AWS SRAを使ってIAM Password Policyを設定してみた
こんにちは。吉田です。
今日は私がDWSに入社後に初めて使用したサービス、AWS Control Towerについて書きたいと思います。新規アカウントにAWS Control Towerをセットアップした後、AWS SRA(セキュリティリファレンスアーキテクチャ)のサンプルソリューションを使用して、Control Towerのカスタマイズをおこないました。
はじめに
まず最初に、Control Towerをセットアップした後に、
- ワークロード用のOUの作成
- Account Factoryでワークロード用のアカウントの作成
- ガードレールの設定
- SSO(IAM Identity Center)のユーザー、グループ、許可セットの作成と割り当て
などの一連のControl Tower初期設定を行いましたが、まだいくつか追加で設定したい部分がありました。例えば、
- 管理アカウントのAWS Configが有効になっていない
- AWS Security Hubが有効になっていない
- AWS GuardDutyが有効になっていない
- IAMパスワードポリシーがセキュリティ基準に準拠していない
など
これらの設定を手動で行うことももちろんできますが、できればアカウント追加時なども自動で設定されてほしいと思い、いろいろ調べていくうちにAWS SRAというものがあることを知りました。
AWS SRA(セキュリティリファレンスアーキテクチャ)はマルチアカウント環境でAWSセキュリティサービスを完全補完するための包括的ガイドラインで、実際にこのガイドラインに沿ったパターンで展開するのに役立つサンプルソリューションが提供されています。
すべてのサンプルソリューションを導入しなければならないというものではなく、環境やセキュリティニーズに合わせて必要なものを導入するのが良いと思います。
https://github.com/aws-samples/aws-security-reference-architecture-examples#example-solutions
- Account Alternate Contacts
組織内のアカウントの代替連絡先の設定 - CloudTrail
- Config Management Account
管理アカウントでConfig有効化 - Config Organization Conformance Pack
組織全体でConformance Packを展開 - Config Organization Aggregator
- EC2 Default EBS Encryption
EC2のデフォルトEBS暗号化を設定 - Firewall Manager
組織全体でAWS WAFやSecurity Groupのポリシーを展開 - GuardDuty
組織全体でGuardDutyを有効化 - IAM Access Analyzer
組織全体でIAM Access Analyzerを有効化 - IAM Account Password Policy
組織内のアカウントでIAM Password Policyの設定 - Macie
組織全体でMacieを有効化 - S3 Block Account Public Access
アカウントレベルでS3ブロックパブリックアクセスを有効化 - Security Hub
組織全体でSecurity Hubを有効化
SRAの展開手順
CloudFormation StackSetsの「信頼されたアクセス」の有効化
管理アカウントのマネージメントコンソールから、AWS OrganizationsのCloudFormation StackSetsの「信頼されたアクセス」を有効にする
管理アカウントのCLIプロファイルの作成
$ aws configure sso --profile sso-management
プロファイル名は任意です。ここでは、sso-managementとしています。
SSOのログインページのURLやControl Towerのホームリージョンなどを入力します。ログインが済んでいない場合は、ログイン認証を要求されます。
認証後の画面で、Allowを選択
管理アカウントを選択
以後、--profile sso-managementを指定してコマンドを実行できます。
SRAソリューションの展開準備
SRAソリューションの展開は管理アカウント、ホームリージョンに対しておこないます。
ログインしてない場合はログインします。
$ aws sso login --profile sso-management
SRAソリューションのダウンロード、展開
SRAソリューションのダウンロード
$ git clone https://github.com/aws-samples/aws-security-reference-architecture-examples.git $HOME/aws-sra-examples
$ cd $HOME/aws-sra-examples
AWS S3 staging bucketを作成
$ aws cloudformation deploy --template-file $HOME/aws-sra-examples/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-staging-s3-bucket.yaml --stack-name sra-common-prerequisites-staging-s3-bucket --capabilities CAPABILITY_NAMED_IAM --profile sso-management
すべてのAWS SRAサンプルソリューションのLambdaコードをパッケージ化
Lambda zipファイルとCloudFormationテンプレートをAWS S3 staging bucketにステージング
$ sh $HOME/aws-sra-examples/aws_sra_examples/utils/packaging_scripts/stage_solution.sh --profile sso-management
SRA共通前提ソリューションの展開
SSMパラメータを作成
$ aws cloudformation deploy --template-file $HOME/aws-sra-examples/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-management-account-parameters.yaml --stack-name sra-common-prerequisites-management-account-parameters --capabilities CAPABILITY_NAMED_IAM --profile sso-management
SRAソリューションをステージングするための前提条件のリソースを作成
SSMパラメーターの解決
$ aws cloudformation deploy --template-file $HOME/aws-sra-examples/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main-ssm.yaml --stack-name sra-common-prerequisites-main-ssm --capabilities CAPABILITY_NAMED_IAM --profile sso-management
デプロイ方法の選択
展開する方法として、
- AWS CloudFormation StackSets
- Customizations for AWS Control Tower (CfCT)
のどちらかを選択します。
実運用ではCfCTのほうが管理しやすそうな気はしますが、今回はSRAの部分にフォーカスしたいので、CloudFormation StackSetsを使用したいと思います。
サンプルソリューションの展開
個々のサンプルソリューションの展開はここからになります。今回はIAM Password Policyのサンプルソリューションを展開してみたいと思います。
Control TowerはデフォルトのIAM Password Policyを変更しません。
また、Control Tower下ではIAMユーザーは利用しないことがベストプラクティスとなりますが、IAMユーザーを利用しない場合でも、以下のSecurity Hubのセキュリティ基準に準拠する必要がありました。
AWS Foundational Security Best Practices(FSBP)
[IAM.7] IAM ユーザーのパスワードポリシーには強力な設定が必要です
CIS AWS Foundations Benchmark
1.5 - IAM パスワードポリシーで少なくとも 1 文字の大文字が要求されていることを確認する
1.6 - IAM パスワードポリシーで少なくとも 1 文字の小文字が要求されていることを確認する
1.7 - IAM パスワードポリシーで少なくとも 1 文字の記号が要求されていることを確認する
1.8 - IAM パスワードポリシーで少なくとも 1 文字の数字が要求されていることを確認する
1.9 - IAM パスワードポリシーで 14 文字以上の長さが要求されていることを確認する
1.10 - IAM パスワードポリシーでパスワードの再使用が禁止されていることを確認する
1.11 - IAM パスワードポリシーでパスワードが 90 日以内に有効期限切れとなることを確認する
IAM Password Policyサンプルソリューションの展開
$ aws cloudformation deploy --template-file $HOME/aws-sra-examples/aws_sra_examples/solutions/iam/iam_password_policy/templates/sra-iam-password-policy-main-ssm.yaml --stack-name sra-iam-password-policy-main-ssm --capabilities CAPABILITY_NAMED_IAM --profile sso-management
展開前
展開後
サンプルソリューション展開後、Account Factoryで新規にアカウントを作成して、新規アカウントでもIAM Password Policyが変更されていることも確認できました。
IAM Password Policy
https://github.com/aws-samples/aws-security-reference-architecture-examples/tree/main/aws_sra_examples/solutions/iam/iam_password_policy
まとめ
個人的にはSecurity HubやGuardDutyの有効化など管理アカウントで1度しかしないような簡単な作業のものは、ドキュメントを残した上で手動でやってしまうのもアリなのかなと思いましたが、組織下のメンバー全体に共通で適用させたい設定はできれば自動化したいものです。
今回は、AWS Control Towerをセットアップした後、SRAサンプルソリューションを使用してカスタマイズを行いましたが、他にもCfCTやBLEA(Baseline Environment on AWS)などを使用してカスタマイズを行う方法もあるかと思います。
機会があれば今回とは違ったカスタマイズ方法も試してみたいと思います。