チーム開発で押さえるべき注意点：AWSコスト削減とセキュリティ事故防止のためのIAMポリシー

## はじめに
今回は、受講しているITスクールのハッカソンにおける注意事項について、自分なりに考えをまとめてみました。

:::note warn
***本記事は個人の意見としてまとめたものです。そのため、内容には主観的な部分が含まれることをご了承ください。***
:::

初めてハッカソンに参加する方や、チーム開発を進める際に「何を話し合えばいいのかわからない」と感じる方にとって、少しでも参考になれば幸いです。

## 書こうと思ったきっかけ
私自身、初めてチーム開発としてハッカソンに参加した際には、わからないことが多く、不安に感じる場面がたくさんありました。

:::note info
***その経験を踏まえ、同じような不安を抱える方の参考になればと思い、この記事を書くことにしました。***
:::

例えば、自分たちのローカル環境で動いているアプリケーションをAWSなどのクラウド基盤にデプロイする際には、サーバー費用をはじめとするさまざまなコストが発生します。

***デプロイに関して不明な点がある方は、以下の記事をご参考ください。***

https://qiita.com/free-honda/items/445c00bd862f59394f0a

:::note alert
***さらに、受講生同士で共通のAWSアカウントを利用する場合、IAM（Identity and Access Management）の権限設定に関する知識がないと、セキュリティ事故につながる危険性があります。***
:::

過去に経験した「***他人のAWSアカウントを切り替えて利用する際のIAMポリシー設定***」に関する失敗談も、以下の記事でまとめています。

***興味のある方は、ぜひご覧ください！***

https://qiita.com/free-honda/items/e306b7d752e74e1b4c04

## 大前提：アプリ開発よりも大事だと思っていること
4～5名程度で構成されるチームでアプリケーションを開発し、それをインターネット上に公開することは、とても素晴らしい取り組みだと思います。

:::note alert
***しかし、その一方で、AWSアカウントに安易にフルアクセス権限を付与し、誰でもスイッチできる状態にするのは非常に危険です。***
:::

名前や住所といった個人情報だけでなく、**最悪の場合、クレジットカード情報などが流出する可能性もあるため、慎重な権限設定が必要です。**

改めて、AWSが推奨するIAMの最小権限に関するベストプラクティスの公式ドキュメントを以下に掲載しておきます。***必要に応じて確認してみてください。***

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html

## 2つの課題に対してのアクション
ここでは、ハッカソンでチーム開発を始める前に重要だと考える2つの課題と、それに対するアクションを私なりにまとめました。

:::note warn
- **インフラ構築にはお金がかかる**
- **AWSアカウントを知識なく他人と共有すると、個人情報が漏洩するリスクがある**
:::

***これが必ずしも正解だとは言えませんが、私個人のベストプラクティスとして整理しました。*** 少しでも参考になれば幸いです。

### インフラ構築にはお金がかかる
例えば、RDS（リレーショナルデータベースサービス）などのリソースを停止せずに放置すると、2カ月間で10万円以上のコストが発生する可能性があります。

https://carbazochromet.hatenablog.com/entry/20231205/1701738358

特に、興味本位でAuroraのクラスター構成を利用すると、予想以上の費用が発生し、***最新のMacBook Proが買えるほどの出費になることもあります。***

#### おすすめの方法

 **AWS無料利用枠を最大限活用する**  
 
   AWSアカウント作成時に付与される無料利用枠を利用することで、初期コストを大幅に抑えることができます。

https://aws.amazon.com/jp/free/?gclid=CjwKCAiA-Oi7BhA1EiwA2rIu2-iPqyEgR_uEe3BMXZfXZaNbhoAPxYlm5Om0hXNtUbtMnSymsu-w5xoCv8gQAvD_BwE&trk=8a8e7906-914d-4577-93a2-d09e75ae5941&sc_channel=ps&ef_id=CjwKCAiA-Oi7BhA1EiwA2rIu2-iPqyEgR_uEe3BMXZfXZaNbhoAPxYlm5Om0hXNtUbtMnSymsu-w5xoCv8gQAvD_BwE:G:s&s_kwcid=AL!4422!3!568105078052!e!!g!!aws%20%E7%84%A1%E6%96%99%E5%88%A9%E7%94%A8%E6%9E%A0!11772965715!117413644991&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all

 **300ドルのAWS無料クレジットを申請する**  
 
   AWSアカウント作成後、「***300 USDのAWSクレジットを申請する***」という件名のメールが届くことがあります（受信時期は不明）。 

   ![Screenshot 2025-01-05 at 23.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6ef4fb7a-28da-335c-a268-04c86db525e7.png)
   
   私自身はこのメールを見落とし、申請を忘れてしまいましたが、直近のハッカソンチームでは、このクレジットを活用してコストをカバーし、さらにお釣りが出たという事例がありました。
   
***とても感動したエピソードです！！***

https://qiita.com/anmorenight/items/b6ddd6edb89a39b008eb

### AWSアカウントを知識なく共有すると、個人情報が漏洩するリスクがある
AWS IAM（アイデンティティとアクセス管理）の設定次第では、他人にアカウントを共有した際に個人情報が漏洩するリスクがあります。

***こちらについては、過去の記事で詳しくまとめていますので、必要に応じてご確認ください。***

https://qiita.com/free-honda/items/c39743e60af30661ac2f

https://qiita.com/free-honda/items/5bb71782c8a84585206a

#### 

:::note alert
**セキュリティ事故例**
- ***自分の名前や住所が表示される***  
- ***クレジットカード情報が閲覧可能になる（その可能性が非常に高い）***
:::

***例えば、チームメンバーにフル権限でスイッチロールを設定した場合、適切な権限設定を行わないと、管理画面全体へのアクセスを許可してしまう恐れがあります。***

#### おすすめの方法

- **カスタムIAMポリシーを活用する**  
   チームに共有する際には、必要最小限の権限を持つカスタムIAMポリシーを作成し、適切に設定することをおすすめします。

こちらについても、過去の記事の中で、カスタムのJSONのポリシーの設定方法などをまとめていますので、参考にしてみてください。

https://qiita.com/free-honda/items/e306b7d752e74e1b4c04

:::note warn
**このポリシーには以下の条件を満たす設定が含まれています。**
- **ハッカソン期間中（1月5日〜3月1日）のみ有効**
- **名前や住所などの個人情報に関する権限を制限**
:::

***以下のJSON形式のポリシーを利用することで、個人情報漏洩のリスクを大幅に軽減できます。***

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "sts:GetCallerIdentity",
                "iam:ListAccountAliases"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "DateGreaterThan": {
                    "aws:CurrentTime": "2025-01-05T00:00:00Z"
                },
                "DateLessThan": {
                    "aws:CurrentTime": "2025-03-01T23:59:59Z"
                }
            }
        }
    ]
}
```

**このポリシーを必要に応じて修正し、他の権限変更などを加えることで、さらにカスタマイズして利用できます。**

## まとめ
***今回は、私なりのベストプラクティスをお伝えしました。*** これらの内容は、チーム開発やアプリ作成以上に重要だと考えています。

:::note warn
***個人情報は自分で守る必要があります。ただし、AWSを初めて利用する方にとっては、これらの設定が少し難しく感じられるかもしれません。***
:::

この内容がどれほど参考になるか分かりませんが、提供したJSON形式のカスタムポリシーを必要に応じて編集し、活用していただければ幸いです。