はじめに

AWSにてシステム構築を実施する際、PCI DSS要件に準拠させたい場面があると思います。

準拠させる要件の一つとして、システムログイン時の連続失敗時におけるアカウントロックがあります。
これを、任意のユーザーがマネジメントコンソールログイン時、ログインを連続失敗した際に、
そのユーザーアカウントをロックさせる機能(以下、アカウントロックと呼ぶ)を実現する方法を考えます。

AWSサービスから考えると、IAMで実現できそうな予想ができますが、IAMではアカウントロックの機能を提供しておりません。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_passwords_account-policy.html

サインインが指定された回数失敗したユーザーをアカウントからロックアウトするために、「ロックアウトポリシー」を作成することはできません。セキュリティを強化するために、強力なパスワードポリシーと Multi-Factor Authentication (MFA) を組み合わせることをお勧めします。

IAMの他にも、AWSサービス単体でアカウントロック機能を提供しているサービスはないため、
マネジメントコンソールでのログイン時にアカウントロック機能を実装したい場合は、作り込みが必要になります。

実現案としてどのような方法があるか、見ていきます。

実現方法

実現案としては、以下の方法があります。

  1. AWS Directory Serviceによるアカウントロック機能の実装
  2. Cognito +AWS Directory Serviceを利用した方法
  3. CloudTrail +Lambda +DynamoDB +CloudWatchを利用した方法

それぞれの実現案について、エントリーを分けてご紹介していきます。
本記事では、「1.AWS Directory Serviceによるアカウントロック機能の実装」の概要に触れます。

1.AWS Directory Serviceによるアカウントロック機能の実装

AWS Directory Service(以下、ADと呼ぶ)を利用し、アカウントロックを実現させる方法です。

  • ADの認証情報を利用し、マネジメントコンソールログイン時に認証させる
  • ログイン時のユーザーアカウントはIAMユーザーではなく、ADドメインのユーザーとなる
  • アカウントロックを定義するポリシーは、AD側のポリシーを用意し適用させる

ADの認証情報により、AWSマネジメントコンソールへのアクセスを制御することが可能です。
https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/ms_ad_management_console_access.html

AWS Management Console へのアクセスを有効にする
デフォルトでは、コンソールへのアクセスが有効化されたディレクトリはありません。ディレクトリのユーザーおよびグループによるコンソールアクセスを有効にするには、以下の手順を実行します。

ログイン時の認証情報としてADの認証情報を利用していることから、
対象となるユーザーアカウントは、IAMユーザーではなくADドメインに登録されているユーザーとなります。

要となるアカウントロックのポリシーは、ADのポリシーで定義します
https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/supportedpolicysettings.html

アカウントロックアウトのポリシー
パスワードポリシーでは以下のプロパティを変更することもでき、Active Directory がログインの失敗後にアカウントをロックアウトするかどうかと、その方法を指定できます。

特徴

  • ADのドメインユーザーをAWSコンソールへログインさせたい場合はこちらの実現案が都合が良い
  • ユーザー管理をADに集約させることで、IAMで二重にユーザー管理を行う必要がない
  • IAMでのアイデンティティ制御を利用している場合は、管理が複雑になる可能性がある

まとめ

本エントリーでは、マネジメントコンソールログイン時のアカウントロックの実現案と、
AWS Directory Serviceを利用した場合の方法について、その概要について触れました。

PCI DSS監査を実施されている企業など、セキュリティ要件の高い案件におけるAWSのアクセス管理は、
IAMだけでは実現できない可能性があり、今回のアカウントロック機能もその一つかと思われます。

次回は、今回ご紹介できなかった「Cognito +AWS Directory Serviceを利用した方法」と
「CloudTrail +Lambda +DynamoDB +CloudWatchを利用した方法」について触れます。

また、いずれの実現案についても実際に機能を実装し、メリットデメリットについて深掘りしていきます。

次回までお待ちください!