Organizationsのメンバーアカウント作成時に存在しないメールアドレスで作成してしまったときの対応方法

## 概要
業務でAWS Organizationsで存在しないメールアドレスでうっかりメンバーアカウントを作成してしまい、このメンバーアカウントを組織から除外するの方法がわからず少し苦労したので、記事にしました。
少々マニアックな内容ですが、ググっても答えに辿りつけなかった内容のため、同じ問題に直面している方の助けになれば幸いです。

※ 以下で組織から「除外」と「削除」で表記揺れがありますが、同じニュアンスで使っているので特に気にしないで下さい。

## なぜ存在しないメールアドレスで作成すると困るのか
### AWSのOrganizationsから組織を除外するためにはそのアカウントがスタンドアロンな状態にある必要があるから。
AWSアカウントの文脈においてスタンドアロンであるというは、いわばそのアカウントが独立して請求に対する責任を追うことができる状態にあることを意味します。
具体的にはデフォルトのクレジットカードが登録されており、かつ電話番号の認証がされていることが条件です。(アカウントが有効化されていること)
これらを見たすためにはまずコンソールにログインできる必要がありますが、そもそもメールアドレスが存在しないのでコンソールログインのためのパスワードが発行できない状況です。 当時は「え、これ詰んでるやん。」と思いました。安心して下さい。

**救済策は、ありますっっ！！！(元祖リケジョ? O保方晴子風)**

#### 注意
- 作成から7日間はアカウントの削除ができません。すぐに消したい気持ちになりますが、ここはぐっと堪えましょう。招待されたアカウントの場合は7日間待つ必要はありません。
- アカウントが正常に組織を離れた時点で、そのAWSアカウントの所有者は、新たに発生するすべてのAWSコストと、アカウントに適用される支払い方法についての責任を負います。(要は組織とは関係のない全く別のアカウントになる)
- 組織から除外したアカウントは組織で適用されていたポリシーの管理下から外れます。SCPにる制限がなくなり、そのアカウントのユーザーやロールに以前より多くの権限が付与される可能性があります。その他の組織ポリシータイプが適用または処理されることもなくなります。
- SSOを利用している場合、除外したアカウントはポータルサイトに表示されなくなりSSOアカウントからアクセスできなくなります。アクセスしたい場合、管理アカウント配下にIAMを作成しスイッチロールなどでアクセスするか、直接該当アカウントでコンソールログインできるIAMを作成する必要があります。

#### その他の注意点や削除による影響を知りたい場合、下記をご参考下さい
[組織からのメンバーアカウントの削除](https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_accounts_remove.html)

## 対処方法(推奨順)
### スイッチロールを使う
おそらくこれがどの状況でも対応でき、一番楽です。
管理アカウントからコンソールログインし、スイッチロールを使用して誤って作成されたメンバーアカウントにアクセスし、必要な設定を行う方法です。
#### 手順
1. **管理アカウント(スイッチロール元)からコンソールログイン**
1. **IAM→ポリシーを選択し、ポリシーの作成をクリック**
1. **JSONで、下記を記述しポリシーを保存。`ACCOUNT_ID`にはスイッチロール先のアカウントIDを入力します。今回は複数(本当はもっとあった…)アカウント削除したかったためリソースを配列で列挙しています。**
    ```json
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Resource": [
                    "arn:aws:iam::ACCOUNT_ID:role/OrganizationAccountAccessRole",
                    "arn:aws:iam::ACCOUNT_ID_2:role/OrganizationAccountAccessRole"
                ]
            }
        ]
    }
    ```
    - `OrganizationAccountAccessRole`というのはメンバーアカウントを完全に管理する権限を持っています。これは、メンバーアカウント作成時にOrganizationsによって自動的に付与されるロールです。

1. **ポリシーのアタッチ**
    - 上記ポリシーをロールを引き受けるための許可をもつユーザーにアタッチします。(可能であればメンテしやすいようにユーザーではなくグループに付与するのが望ましいです。)IAM→ユーザー→許可タブをクリックし、上記で作成したポリシーをアタッチしましょう。

1. **ロールの切り換え**
    1. マネジメントコンソールの右上にあるアカウント名をクリックし、「ロールの切り替え」をクリックします。
    2. ロールの切り替え画面で、次の情報を入力します。
        - 「アカウント」を `ACCOUNT_ID` に設定します。
        - 「ロール」を `OrganizationAccountAccessRole` に設定します。
        - 「表示名」には、自分が識別しやすい名前を設定します。
    3. 「ロールの切り替え」をクリックします。

6. **デフォルトのクレカを設定**
    - 右上のアカウントクリック→請求ダッシュボード→お支払いの詳細設定からクレジットカードを登録します。
    - ↑が完了したら、「デフォルトの支払い情報に設定」的なボタンがあるのでクリック
7. **電話番号の認証**
    - サポートから状況を伝えて問い合わせると、AWSからこちらで指定した時間帯で、任意の電話番号へ電話をかけてくれるのでこれで電話番号認証ができます。請求で設定した電話番号とは違う番号でも認証できます。詳しくは[こちら](https://repost.aws/ja/knowledge-center/phone-verify-no-call)。

以上で、メンバーアカウントのスタンドアロンな状態になったはずなので、晴れて組織から除外できるようになったと思います。

#### 上記手順についての公式ドキュメントは下記になります。ご参考下さい。

[管理アカウントのアクセスロールを持つメンバーアカウントへのアクセス](https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_accounts_access.html#step-choose-group)


### 存在しないメールアドレスを後付けで作成する
  誤って作成したメールアドレスを実際に作成し、コンソールにログインできるようにします。その後、アカウントの設定を行い、スタンドアロンで動作できるようにします。

### Catch-Allを使う
  メールサーバーにCatch-All設定を行い、誤って作成したメールアドレス宛のメールを別のメールアドレスに転送するように設定します。これにより、コンソールへのログイン情報を取得し、アカウント設定ができるようになります。

## まとめ
この記事を読んでいただき、ありがとうございます。同じ問題に直面して苦労された方がいらっしゃったら、この記事が少しでもお役に立てたら幸いです。
AWSの組織管理には、トラブルが発生する可能性もありますが、問題を解決するための方法がいくつかあります。この記事で紹介したスイッチロールを使った方法が、一番楽で効果的な方法だと思います。また、この問題に限らず、AWSの運用においてわからないことがあれば、ドキュメントを読んだり、AWSサポートに問い合わせることをおすすめします。実際にこのスイッチロールの対応方法はググってもでてこなかったためサポートへ問い合わせたら教えてくださいました。

再度、お読みいただきありがとうございました。