【AWS】CIS Benchmarksをまとめてみた（IAM編）


# CIS Benchmarksについて

非営利団体であるCenter of Internet Security (CIS) によって作成されたセキュリティのベストプラクティスです。このベストプラクティスは、セキュリティエキスパートのグローバルコミュニティによって作成されており、自社のセキュリティ環境評価や情報資産を守るための指標としての活用が期待されています。

:::note info
本記事はCIS Amazon Web Services Foundations Benchmark（v3.0.0） を筆者が簡易的にまとめたものです。IAMに関連した22項目を対象としています。
https://www.cisecurity.org/benchmark/amazon_web_services
:::


# 1.  IAM（Identity and Access Management）

「認証」「認可」を行う機能です。クラウド利用者のアカウントや、AWSの各サービスがアクセスできる範囲を制御することができます。AWS上では"AWS IAM"というサービスとして提供されています。

# 1.1  Maintain current contact details 

　AWS アカウントに登録されているメールと電話番号が常に最新であり、組織の複数のメンバーに連絡可能な状態であることが推奨されています。ポリシーに反したアクションや不正なアクティビティが検出されたAWSサポートから登録済みの連絡先へ通知されます。

【確認フロー】
AWS Management ConsoleにRoot Userでアクセス
⇨画面右上のユーザー名をクリックし、'アカウント'を押下
　⇨'連絡先情報（Contact Information）'
 

# 1.2  Ensure security contact information is registered 

代替連絡先としてセキュリティに関する連絡先を登録することが推奨されています。

【確認フロー】
AWS Management ConsoleにRoot Userでアクセス
⇨画面右上のユーザー名をクリックし、'アカウント'を押下
　⇨'代替連絡先（Alternate Contacts）'

 ![スクリーンショット 2024-06-10 22.46.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/f8419fbd-efa9-837f-c887-125ce3ff9093.png)


# 1.3  Ensure security questions are registered in the AWS account

秘密の質問を登録することが推奨されています。現在では多要素認証が推奨され、秘密の質問は廃止予定です。

【確認フロー】
AWS Management ConsoleにRoot Userでアクセス
⇨画面右上のユーザー名をクリックし、"アカウント"を押下
　⇨　"秘密の質問"

:::note alert
![スクリーンショット 2024-06-10 23.58.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/bee8fa22-9dc6-9f19-f027-b2a6ddec7950.png)
:::


# 1.4 Ensure no 'root' user account access key exists

ルートユーザーのアクセスキーの削除が推奨されています。ルートユーザーのアクセスキーとシークレットキーが流出した場合、全ての権限が利用可能となり、非常に危険です。

【確認フロー】
AWS Management ConsoleからIAMを選択
⇨認証情報タブを選択し、「認証情報をダウンロード」
　⇨'root_account'行の’access_key_1_active’、’access_key_２_active’がどちらも **FALSE**

![スクリーンショット 2024-06-11 23.35.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/2a180869-8be5-cea0-7b9d-b986d83c2d9f.png)

![スクリーンショット 2024-06-11 23.18.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/2f0000ff-6aa1-f062-a718-7ffe3a40c734.png)


# 1.5 Ensure MFA is enabled for the 'root' user account

ルートユーザーのログイン時に多要素認証（Multi-Factor Authentication）が有効になっていることが推奨されています。多要素認証の方式としてはSMSが廃止され、以下の３つの方式から選択することができます。

:::note info
![スクリーンショット 2024-06-12 10.58.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/f60a4df0-3afb-0929-2bd8-3b2da33aa73c.png)
:::

【確認フロー】
AWS Management ConsoleからIAMを選択
⇨ダッシュボード
⇨セキュリティステータス
⇨MFAを有効化

![スクリーンショット 2024-06-11 23.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/ba391d88-0540-cad4-3c5a-5908cbf056dd.png)

# 1.6  Ensure hardware MFA is enabled for the 'root' user account

ルートユーザーのログイン時にハードウェアベースの多要素認証（Multi-Factor Authentication）を有効にすることが推奨されています。

【確認フロー】
AWS Management ConsoleからIAMを選択
⇨ダッシュボード
⇨セキュリティステータス
⇨MFAを有効化（ハードウェアTOTPトークンを選択）

# 1.7 Eliminate use of the 'root' user for administrative and daily tasks

日常的なタスクを実行する際にルートユーザーアカウントを使用しないことを推奨している項目です。最小権限で必要な職務機能へのアクセスを持ったIAMユーザーアカウントを別途作成し、利用することが推奨されています。

【確認フロー】
AWS Management ConsoleからIAMを選択
⇨認証情報タブを選択し、「認証情報をダウンロード」
⇨**root_account** のレコードを確認すればルートユーザーアカウントの利用に関する情報を確認可能です。

  ・**password_last_used** 
  ・**access_key_1_last_used_date**
  ・**access_key_2_last_used_date**

# 1.8 Ensure IAM password policy requires minimum length of 14 or greater

パスワードポリシーを設定し、パスワードに使われる文字列の文字数を14文字以上に設定することが推奨されています。デフォルトは8文字。

【確認フロー】
AWS Management ConsoleからIAMを選択
⇨アカウント設定
⇨パスワードポリシー

![スクリーンショット 2024-06-12 10.37.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/f17757be-37d7-95ea-94ab-87fb9a4301ea.png)

【確認フロー】

# 1.9 Ensure IAM password policy prevents password reuse

パスワードポリシーを設定し、パスワードの再利用を禁止することが推奨されています。1~24個まで再利用できない過去のパスワード数を設定可能です。

【確認フロー】
AWS Management ConsoleからIAMを選択
⇨アカウント設定
⇨パスワードポリシー

![スクリーンショット 2024-06-12 10.41.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813723/489842fe-a3c7-f9b9-a274-fdb8edd92b0e.png)


# 1.10 Ensure multi-factor authentication (MFA) is enabled for all IAM users that have a console password

アクセス権限を持つすべてのIAMアカウントで MFA を有効にすることが推奨されています。

【確認フロー】
AWS Management ConsoleからIAMを選択
⇨アクセス管理 - ユーザー
⇨**MFA** 列の値を確認


# 1.11 Do not setup access keys during initial user setup for all IAM users that have a console password

IAMユーザの作成時にAPIなどのプログラム経由のアクセス権限が必要か選択可能です。デフォルトではプログラム経由でのアクセスを無効にし、必要な場合のみアクセスキーを発行することが推奨されています。

# 1.12 Ensure credentials unused for 45 days or greater are disabled

認証情報（パスワードとアクセスキー）が**45日** 以上使用されていない場合は認証情報を無効にすることが推奨されています。


# 1.13 Ensure there is only one active access key available for any single IAM user

ユーザには複数のアクセスキーが設定可能ですが、キーローテーションなどの特定のケースを除き、アクセスキーは1つのみ許可することが推奨されています。

# 1.14 Ensure access keys are rotated every 90 days or less

アクセスキーは**90日以内** にキーローテーションすることが推奨されています。


# 1.15 Ensure IAM Users Receive Permissions Only Through Groups

IAMユーザーが所属するグループを通してのみ権限が付与されることが推奨されています。ユーザーポリシーを編集する方法は大きく分けて、以下の4種類がありますが推奨されているのは③です。インラインポリシーは基本的に1つのオブジェクトに対してのみアタッチ可能であり、再利用できません。

①ユーザーに割り当てられているポリシーを編集する（インラインポリシー or ユーザーポリシー）
②ユーザーに既存のポリシーをアタッチする
**③IAMグループにユーザーを追加し、グループにポリシーをアタッチする**
④インラインポリシーをアタッチしたIAMグループにユーザーを追加する

# 1.16 Ensure IAM policies that allow full "*.*" administrative privileges are not attached

フル権限を許可するIAMポリシーは許可しないことが推奨されています。リソースに対するフル権限もアクションに対するフル権限も作成せず、最小権限を付与することがベストプラクティスとされています。

# 1.17 Ensure a support role has been created to manage incidents with AWS Support 

AWSの**サポートチームがテクニカルサポートを行うための最小のポリシー** が割り当てられたIAMロールを事前に作成しておくことが推奨されています。マネージドポリシーであるAWSSupportAccessを割り当てるのが一般的です。

# 1.18 Ensure IAM instance roles are used for AWS resource access from instances

AWS上のEC2インスタンス（仮想サーバ）からAWS上の各リソースにアクセスする際にはEC2インスタンスにIAMロールをアタッチすることが推奨されています。

# 1.19 Ensure that all the expired SSL/TLS certificates stored in AWS IAM are removed

期限切れの**SSL/TLS証明書** を定期的に削除することが推奨されています。

# 1.20 Ensure that IAM Access analyzer is enabled for all regions

利用中の全てのリージョンで**IAM Access analyzer** サービスが有効化されていることが推奨されています。IAM Access analyzerは2019年に登場したサービスで、意図しないユーザーが権限を持っていないか視覚的に確認することが可能です。外部アクセスが許可されているリソースの識別するのにも利用されます。

# 1.21 Ensure IAM users are managed centrally via identity federation or AWS Organizations for multi-account environments

IAMユーザーが、マルチアカウント環境のIDフェデレーションまたは AWS Organizations を利用して一元管理されていることが推奨されています。

# 1.22 Ensure access to AWSCloudShellFullAccess is restricted

マネージドポリシーである**AWSCloudShellFullAccess** はユーザーに**AWS CloudShell** のフルアクセス権限を付与します。CloudShell環境内ではユーザーにデフォルトで管理者権限が付与され、インターネットにアクセス可能なため、データ漏えい等の危険が飛躍的に高まります。よってこのマネージドポリシーは通常、制限されていることが推奨されています。


以上です。引き続き、他の章も確認していきます。