ベストプラクティス：他人アカウントスイッチ時のAWS IAMポリシーの設定について

## はじめに
ITスクールのハッカソンに参加した際、個人のAWSマネジメントコンソールにポリシーを設定せずにアクセスした結果、他の参加者の個人情報が無防備に閲覧できる事態が発生しました。

:::note warn
**この経験から、AWSのIAM（Identity and Access Management）の重要性を痛感し、必要な権限のみを許可するIAMポリシーの作成プロセスを振り返ります。**
:::

本記事は、その実体験を基にした知識の整理と、今後の自分への備忘録になります。

## 知識整理
以下に、必要な知識を簡単に整理します。

### IAMとは
IAM（Identity and Access Management）は、AWSのサービスで、ユーザーやグループのアクセス権限を管理するための機能です。

https://aws.amazon.com/jp/iam/

IAMを使用することで、誰がAWSリソースにアクセスできるか、またそのユーザーがどの操作を行えるかを細かく制御することができます。

### IAMロールとは
IAMロールは、特定のアクセス権限を持つ「役割」です。IAMユーザーに直接付与するのではなく、他のAWSサービスやアプリケーションから一時的にその権限を取得するために使用されます。

![スクリーンショット 2024-09-27 7.18.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/c7c6ff82-35b6-4ee6-34b8-6e6ec6442c20.png)
引用画像：https://aws.amazon.com/jp/builders-flash/202303/learn-iam-role/

これにより、リソースにアクセスする際のセキュリティを強化できます。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles.html

### IAMポリシーとは
IAMポリシーは、JSON形式で書かれたドキュメントで、特定のアクションを許可または拒否するためのルールを定義します。

![スクリーンショット 2024-09-27 7.16.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/555339ad-26a3-fc52-e04e-76b874fbb60e.png)
引用画像：https://iselegant.hatenablog.com/entry/2020/05/24/215808

ポリシーはユーザー、グループ、ロールにアタッチして使用され、AWSリソースへのアクセス制御を実現します。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies.html

### アカウント間のスイッチ設定とは
アカウント間のスイッチ設定は、異なるAWSアカウント間でのアクセスを簡単にするための機能です。

![スクリーンショット 2024-09-27 7.20.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5fe4da64-f487-de5e-3cd1-43eb946e6727.png)
引用画像：https://baresupport.jp/blog/2022/05/12/113/

この設定を行うことで、あるアカウントのIAMユーザーが、別のアカウントのリソースにアクセスできるようになります。特に複数のアカウントを管理している場合に便利です。

https://baresupport.jp/blog/2022/05/12/113/

## IAMポリシー作成及び適用
IAMポリシーを作成し、適用する際は、権限の範囲を明確に定義することが重要です。

:::note
ここでは、具体的な作成手順と適用の流れについて説明します。
**ステップ１：IAMポリシーの作成**
**ステップ２：適用の流れ**
:::

適切にポリシーを設定することで、最小限の権限でセキュリティを保ちながら、必要な操作が実行できるようになります。

## ステップ１：IAMポリシーの作成
AWSマネジメントコンソールにログイン後、IAMサービスへ移動し、「ポリシー」のセクションを選択します。

![スクリーンショット 2024-11-14 22.05.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3faca2c1-9513-0c80-e764-9c3161670fd4.png)

「ポリシーの作成」ボタンをクリックし、JSON形式で新しいポリシーを記述します。
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "sts:GetCallerIdentity",
                "iam:ListAccountAliases"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "DateGreaterThan": {
                    "aws:CurrentTime": "2024-07-08T00:00:00Z"
                },
                "DateLessThan": {
                    "aws:CurrentTime": "2024-08-18T23:59:59Z"
                }
            }
        }
    ]
}
```

ポリシーに名前と説明を付けて、設定内容を保存します。この際、他のユーザーが理解しやすいように説明を工夫することが重要です。

:::note warn
**以下の箇所は、特定の期間内を指定していますので、必要に応じて修正してください。**

                "DateGreaterThan": {
                    "aws:CurrentTime": "2024-07-08T00:00:00Z"
                },
                "DateLessThan": {
                    "aws:CurrentTime": "2024-08-18T23:59:59Z"
:::

このポリシーは、特定の期間内（2024年7月8日から2024年8月18日）にすべてのアクションを許可しますが、その期間外はすべてのアクションが拒否されます。

![スクリーンショット 2024-11-14 22.07.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1032684e-4d34-8aff-68d5-89881ca2bc85.png)


**さらに、呼び出し元の情報取得とアカウントエイリアスの一覧表示は常に拒否されるように設定されています。**

## ステップ２：IAMポリシー適用の流れ

作成したポリシーは、IAMユーザーやグループ、ロールに適用できます。

![スクリーンショット 2024-11-14 22.08.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/225336e2-814f-ed91-8428-745e585da076.png)


対象となるユーザーやロールを選択し、ポリシーをアタッチします。

![スクリーンショット 2024-11-14 22.10.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/155a459c-8a37-a0df-0767-437b9985345c.png)

:::note alert
**定期的にポリシーの見直しを行い、必要に応じて修正を加えることで、セキュリティを維持します。**
:::

適用後、ポリシーが正しく動作しているかを確認するため、対象ユーザーでログインして実際に操作してみてください！

## まとめ
AWSのIAMポリシーを正しく設定することは、個人情報や重要なデータを守るために非常に重要です。

:::note warn
**ハッカソンでの経験を通じて、必要な権限のみを許可することの重要性を再認識しました。**
:::

この忘備録が、今後のAWS利用時の参考になれば幸いです。IAMの知識を深めることで、より安全なクラウド環境を構築していきましょう！

## 参考記事
https://zenn.dev/fdnsy/articles/31105a37126d66

https://qiita.com/montama/items/90bb8a3973d101be4690