AWSスキルビルダー個人サブスク費用をOrganizationsで管理する

今回はAWS Organizationsを使用してAWS公式のEラーニングサービスである[スキルビルダー](https://aws.amazon.com/jp/training/digital/)の「個人」サブスク請求を管理してみよう〜というお話です。

この方法のメリットは以下の通り：

* AWSスキルビルダー想定利用者数が50名に満たない組織でも比較的容易にAWSスキルビルダーの有償コンテンツを利用できる
* 複数のAWSアカウントとそれに紐づくAWSスキルビルダー「個人」サブスクの請求を一元管理できる
* AWSカウントごとに（したがってサブスク契約ごとに）電話番号を用意する必要がない
* AWSカウントごとに（したがってサブスク契約ごとに）クレジットカード情報を入力する必要がない

:::note warn

このようなことを考えたのは、後述の通り、AWS[スキルビルダー](https://aws.amazon.com/jp/training/digital/)を組織で利用しようとしたところ「チーム」サブスクの条件に該当せず、「個人」サブスクを利用するにもいくつか課題があったからです。そもそも「チーム」サブスクや「個人」サブスクを普通に利用できる場合にはこの記事でご紹介するような手順を踏む必要はありません。

この手順を踏む必要があるのは、組織でスキルビルダーの有償コンテンツ（セルフペースラボなど）を利用したいものの、次のような諸事情があってそうできないケースです（OR条件）：

* 対象メンバーが50名に満たない
* 契約シート数（≒ユーザー数）の20％を超える部分も随時メンバーを差し替えながら利用したい
* 年契約ではなく月契約としたい

:::

# 背景

:::note info
AWS[スキルビルダー](https://aws.amazon.com/jp/training/digital/)についてよくご存知で、前述の「諸事情」についてもご納得いただける方は、このセクションをスキップいただいて大丈夫です。
:::

AWSスキルビルダーはAWSが提供するEラーニング・コンテンツ（群）。無償で利用できるものもありますが、サブスク契約することで利用できるようになるものも。この有償コンテンツの中に「セルフペースラボ」と呼ばれるハンズオンも含まれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/1966ed4c-3440-6fb5-b1fe-0a47a7c573fb.png)

AWSが用意した詳細な手順書に従って、専用に用意されたAWSアカウント内で、管理コンソールを操作して各種のAWSリソースを作成したり変更したり削除したりするオペを学ぶことができます。

* 利用者の都合のよい時間にいつでも何度でもできる、追加費用発生の心配もない。
* 日本語で受けられるものだけでも100を超えるコース。
* 中にはVPCやTransit Gatewayを操作するものなど、ワークロードを運用中の環境はもちろん学習用のサンドボックス環境でも普通できない体験ができる。
* サブスクには「個人」と「チーム」の2種類あり、「チーム」サブスクではメンバーの進捗管理やコース割り当てもできる。

これは組織内でAWSスキル強化のためのメンバー教育をするのには好都合！！・・・と思ったのですが、いくつか制約もありました。

* 「チーム」は50シート（≒50名）以上でないと申し込めない。
* 「チーム」は年間契約のみ。
* 「チーム」は申し込んだシート数のうち80％についてユーザーの差し替えが不可、残り20％について年間通じて何度でも差し替え可。利用を希望するメンバーを交代々々利用させることができるのはこの20％のみ。

これでは申し込みにある程度の規模が必要になりますし、少なくとも8割のメンバーには年間を通じてしっかり利用することを約束してもらう必要があります。
私の所属する組織ではこれが厳しい。4月はこの3名に利用させる、5月は別の3名に利用させる─みたいなことができない。

では機能は劣るものの「個人」サブスクで代替できるのか？

* 「個人」サブスクは月契約・年契約を選べるが、価格は米ドルなので為替レートに応じて日本円で支払う金額が変動。
* 「個人」サブスクにはクラスルームトレーニングなどにあるバウチャーチケットのようなものはない。
* 「個人」サブスクはAWSアカウントと1：1に結びつき、当該アカウントの毎月の請求に合算となる。つまり当該アカウントで発生する他の請求（稼動中のワークロードを構成するAWSリソースの利用料など）とまとめられてしまう。

希望するメンバー／選抜されたメンバーに経費でチケットを買い与えることはできませんし、立替精算することは不可能ではありませんがかなり難しいのです。

AWSの営業さんに相談したところ提案いただいたのがこの方法：

* 組織でメールアドレスを複数用意。
* 当該メールアドレスでAWSアカウントを複数用意。
* 各アカウントの請求は組織のクレジットカードで決済するよう設定。
* それぞれのアカウントでスキルビルダー「個人」サブスクを契約。
* 各アカウントを毎月（あるいは一定期間）特定メンバーに利用させる（アカウント：メンバー＝1：1）。

この方法の困ったところは：

* アカウント数分メールアドレスが必要（まあこれはもう仕方ないかなあという気分）
* アカウント数分電話番号が必要（これはちょっと厳しい）
* アカウント数分クレジットカード情報の登録が必要（面倒。セキュリティ的にもどうなのかと思う）

:::note info
ちなみに「請求情報をセットしたAWSアカウントを組織のメンバーに自由に使わせるのはどうなの？」という不安を抱く方もいらっしゃると思います（私は思った）。

幸いと言うべきか、ややこしいことにと言うべきか、スキルビルダーの1サブスク契約にはAmazon.comのアカウントとAWSのアカウントが1つずつ必要ですが、実際にスキルビルダーを利用する段階（スキルビルダーにサインインする段階）になると必要なのはAmazon.comのアカウントのみとなります。そしてAmazon.comは決済手段の登録なしにアカウント作成できます。このため前述の不安はあたらずということに。

アカウント作成に利用したメールアドレスについてはその受信箱にアクセスするための権限（ログイン情報等）をメンバーに渡さないことで、Amazon.comアカウントの不正利用／オペミスも防止できます。
:::

そこで、AWS Organizationsの活用を思いついた次第です。Organizationsを使えば、電話番号やクレジットカード情報なしにメンバーアカウントを作成できます。メールアドレスについては、利用しているメールシステム次第ではエイリアスを活用できます（Gmailであればユーザー名の後に `+alias` をつけるだけ！）。各メンバーアカウント宛の請求は管理アカウント宛の請求に統合されます。

# 手順の概要

1. スキルビルダー「個人」契約本数分のメールアドレス（ないしエイリアス）を用意
1. AWS Organizationsにより「組織」を作成
1. 管理アカウントで「個人」サブスク契約数分のメンバーアカウントを作成
1. 各メンバーアカウントでパスリセしてログイン可能な状態に設定
1. 各メンバーアカウントに対応するAmazon.comのアカウントを作成
1. 各Amazon.comアカウントでスキルビルダー「個人」サブスク契約を開始
1. 各Amazon.comアカウントのログイン情報のみをメンバーに共有

:::note warn
次のものはメンバーには共有しません。これはガバナンスの意味でも、対象メンバーの心理的安全のためにも重要です：

* AWSのメンバーアカウントのログイン情報
* AWSのメンバーアカウントの作成に利用したメールアドレスの受信箱へのアクセス権限（ログイン情報等）
:::

# 手順の詳細

## 1. スキルビルダー「個人」契約本数分のメールアドレス（ないしエイリアス）を用意

個別のメールアドレスでも、あるメールアドレスのエイリアスでも構いません。とにかく文字列として一意性のあるものを用意してください。

私は管理アカウントのメールアドレスにGmailを使用しているので、メンバーアカウント用メールアドレスの準備は `+alias` で行いました。例：

* `taro.qiita+labsuser01@example.com`
* `taro.qiita+labsuser02@example.com`
* `taro.qiita+labsuser03@example.com`

## 2. AWS Organizationsにより「組織」を作成

AWS Organizationsを有効化します。
OUを追加したり、SCP（予防的ガードレール）やCloudTrail（発見的ガードレール）で制御を加えたりすべきだと思いますが、今回は詳細を省きます。

## 3. 管理アカウントで「個人」サブスク契約数分のメンバーアカウントを作成

先ほど用意したメールアドレスでメンバーアカウントを登録していきます：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/40e92536-fbe0-e2fe-8bb1-d26ff312bf78.png)

## 4. 各メンバーアカウントでパスリセしてログイン可能な状態に設定

Organizationsで新規作成したアカウントの初期パスワードは不明で、そのままではログイン不可です。これではスキルビルダー契約のための手順を実行できません。

パスワードリセットを行なってログインできるようにします：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/abfc210f-82e4-0746-dd5b-36917b64f492.png)

「パスワードはお忘れですか？」からパスワードリセットを行います：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/fa3a19ab-776e-96be-491b-203f093e91d2.png)

ログインした結果：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/93b79efd-2334-6e6a-5747-b4535a6c4aee.png)

## 5. 各メンバーアカウントに対応するAmazon.comのアカウントを作成

スキルビルダーの「個人」サブスクにはAWSのトレーニングと認証のサービスにログインする必要があり、っこれにはAmazon.comのアカウントが必要です。
AWSの各メンバーアカウントのメールアドレスを使ってAmazon.comアカウントを作成します：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/ed5fdc7e-c55d-0fb7-9c97-635a6fd557b2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/acb27697-ccca-bae3-a8b2-0d8551c0cd65.png)

## 6. 各Amazon.comアカウントでスキルビルダー「個人」サブスク契約を開始

スキルビルダーの契約をします。
AWSの[スキルビルダーのページ](https://explore.skillbuilder.aws/learn)にアクセスし、「サインイン」ボタンをクリック：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/fb782063-1ff1-d64a-51ae-7b52c20ee14e.png)

「Login with Amazon」からログイン・フォームに進み、先ほど作成したAmazon.comアカウントでログインします：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/1e6dadd0-06fa-351f-c5c8-3c0ade4ddd8b.png)

ログイン後に表示される学習ダッシュボード（Leaner dashboard）のメニューで「サブスクリプション」（Subscriptions）をクリック、「月契約」（Monthly）もしくは「年契約」(Annual）を選択します：
![スクリーンショット 2022-12-17 13.09.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/190ebcfc-0d45-ab6b-097b-7c22b7f44551.png)

チェックアウト（Checkout）画面で「Sign in to your AWS account」をクリック、Amazon.comアカウントに対応するAWSアカウントのログイン情報でログインします： 
![7q4Ek.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/bdf010a1-ee65-e1fb-d7a6-988ca1efe07e.png)

ログインが済むと「Account ID」欄にAWSアカウントのIDが表示されます。
想定通りのアカウントIDになっているか、金額に問題ないかを確認。注意事項に目を通したらチェックボタンに✅。すると「Subscribe」ボタンが有効化されるのでクリック：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/6d98ed75-798c-1e22-7c30-4e5a15d93335.png)

これでサブスク契約ができました。請求先はAmazon.comアカウントに関連付けされたAWSアカウントになりますが、そのAWSアカウントの請求は管理アカウントの請求に統合されます：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/fd57f07f-884f-ae6e-4e4a-b143ad908ff8.png)

セルフペースラボも受講可能な状態になりました：
![スクリーンショット 2022-12-17 13.16.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/631b98c2-a2d2-729a-6a4d-6e00486430f6.png)

## 7. 各Amazon.comアカウントのログイン情報のみをメンバーに共有

あとは、Amazon.comアカウントのログイン情報 **のみ** をメンバーに共有します。
AWSアカウントのログイン情報は不要です。大事に仕舞っておきましょう。。

:::note info
この記事を書いたあと2022年12月31日にメンバーアカウントでスキルビルダーをサブスク契約したあと、翌日の2023年1月1日に管理アカウントの請求ダッシュボード：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/c3fb6713-e051-5074-9805-1507ac65b06e.png)
そしてメンバーアカウント側の請求ダッシュボード：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50571/653f10e4-0f80-4829-a2cb-041f38e7551a.png)
管理アカウント側の一括請求の金額の中にメンバーアカウントのスキルビルダーの費用も計上されていることがわかります。
:::