AWSアカウント作成後、ルートユーザーの初期設定、IAMユーザーの作成と初期設定を行いましょう!
0. AWSアカウント作成
本題に入る前に、もしまだAWSアカウントを作成(=AWSを契約)されていない方がいらっしゃれば、作成をお願いいたします。既に作成されている方はそのまま使って頂いて大丈夫です。
作成手順はAWS公式の説明が一番分かりやすいので、詳細は割愛させて頂きます。サポートプランは無料の「ベーシック」でかまいません。
解説動画
※動画の画質が悪い場合は、歯車から1080pの画質を選択ください
1. 解説動画
ここから本題になります。
※動画の画質が悪い場合は、歯車から1080pの画質を選択ください
↓動画リニューアル対応中のため、上記と冒頭の部分が重複します。4:05〜 ご覧ください
※動画の画質が悪い場合は、歯車から720pの画質を選択ください
※アクセスキーの発行時に次のような画面が追加されました。「どういうケースでアクセスキーを使うの?」というアンケートに過ぎません。「コマンド (Command Line Interface=CLI)」を選ぶと「⚠︎ その場合は他にもっとオススメの方法があるよ」と表示されるので、「そのオススメを理解した上で、なおアクセスキーを作りたいんだ」というチェックを入れればOKです。
2. 概要
ルートユーザーとIAMユーザーの違いについて表でまとめました。
ユーザーの種類 | ユーザー数 | ログイン方法① | ログイン方法② | 備考 |
---|---|---|---|---|
ルートユーザー | AWSアカウントごとに1つのみ =AWSアカウントの所有者 | メールアドレス+パスワード | アクセスキーID+シークレットアクセスキー(非推奨!) | ルートユーザーしかできない操作をする時だけ使う |
IAMユーザー | 必要なだけ作成可能 | AWSアカウントID+ユーザー名+パスワード | アクセスキーID+シークレットアクセスキー | 日常的に使う |
AWSで必須のセキュリティ設定が 4つあります。
- ルートユーザーのアクセスキーは絶対に使わない (新たにアクセスキーを作成しなければOK)
- ルートユーザーや権限の強いIAMユーザーでは、MFA(多要素認証)を有効にする (多要素認証は無料が良ければ Authy がオススメ。バックアップや端末間での共有可 → https://authy.com/ ) (もし有料契約でも良ければ 1Password が一番のオススメ。ブラウザからの入力が格段に楽 → https://1password.com/ )
- パスワードポリシーを強化する (最近はデフォルトでも、8文字以上 & 3種の文字組み合わせになっているのでOK)
- IAMユーザーの権限管理はIAMユーザーグループで行う
リソース一覧
リソース | 目的 | 備考 |
---|---|---|
IAM: Group | IAMユーザーをグルーピングする「ユーザーグループ」 | IAMユーザーの権限を管理するために作成する |
IAM: User | AWSアカウントやリソースを操作する「ユーザー」 | AWSアカウントやリソースを操作する権限主体の一つ |
公式URL
IAMユーザーとIAMユーザーグループはIAMのリファレンス内に記載があります。
- Docs: AWS アカウントのルートユーザー - AWS Identity and Access Management Docs: IAM ユーザー - AWS Identity and Access Management
- CFn: IAM リソースタイプのリファレンス - AWS CloudFormation
- CLI: iam — AWS CLI v2 Command Reference
3. 解説手順
- ルートユーザーでログインし、MFA(2段階認証)を有効にする & 動作確認 https://console.aws.amazon.com/
- パスワードポリシーを設定する(確認する)
- 東京リージョン(ap-northeast-1)のCFnでIAMユーザーを作成する
- IAMユーザーでログインし、MFA(2段階認証)を有効にする & 動作確認
- IAMユーザーでアクセスキーを発行する
- AWS CLI (Command Line Interface) を使えるようにする
※Macの場合:
brew install awscli
←失敗する場合はFAQも参照ください ※Windowsの場合: https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-windows.html より最新バージョンをインストールくださいaws configure
aws s3 ls
← エラーなくS3の一覧が表示されたら動作確認OKです!
4. CFnテンプレート
IAM User
Group と User を作成します。
【お願い】S3バケットを最初に手で作ってください。バケット名は cf-{アカウント番号}-{リージョン名}
でお願いします(例: cf-123456789012-ap-northeast-1
)その中にCFnのテンプレートファイルを置いて頂きます。
【注意】UserRubiconLink
と rubicon.link
をお好きな名前に置換してください。変えなくてもOKです。このテンプレートに限り、VSCodeやメモ帳などで「置換」機能を使って頂いた方が間違いないです!
【注意】東京リージョンで作成ください。間違えて別なリージョンに作った場合は削除後、再度東京リージョンで再度作り直してください。
CFn Stack Name: iam-user S3 File Name: iam-user.yml
---
### [Change Name] UserRubiconLink, rubicon.link
AWSTemplateFormatVersion: "2010-09-09"
Description: Create IAM User etc.
Resources:
## IAM: Group
GroupAdministrators:
Type: AWS::IAM::Group
Properties:
GroupName: Administrators
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
## IAM: User
UserRubiconLink: ### [Change Name]
Type: AWS::IAM::User
Properties:
UserName: rubicon.link ### [Change Name]
LoginProfile:
Password: 123456=NuFuA
PasswordResetRequired: true
Groups:
- !Ref GroupAdministrators
Outputs:
## IAM: Group
GroupAdministrators:
Value: !GetAtt GroupAdministrators.Arn
Export:
Name: !Sub ${AWS::StackName}-GroupAdministrators
## IAM: User
UserRubiconLink: ### [Change Name]
Value: !GetAtt UserRubiconLink.Arn ### [Change Name]
Export:
Name: !Sub ${AWS::StackName}-UserRubiconLink ### [Change Name]
【変更履歴】
- 2022-01-10:IAMユーザーとIAMユーザーグループの順番を逆にした(逆にしてもCFnの動作に変更はない)
- 2023-04-14:コメント文を全般的に修正
5. 予習
- 解説動画の通り、設定・作成してください ※CFnでエラーになった場合は、EventsタブのスクリーンショットをSlackでください (AWSの画面が変わっている場合は同じ設定項目を探してください)
- CFnで作成したリソース(IAMユーザーとIAMユーザーグループ)を手でも作ってください。作成中に分からなかった設定項目については調べたり、質問のためにメモしておいてください
- 【宿題】下記の項目について調べて、次回のZoomで説明してください
- 日常的に使うべきなのは、ルートユーザー・IAMユーザーのどちらですか?
- IAMユーザーのアクセスキーとシークレットが漏洩した場合に起きること(危険性)
- 【2022年2月1日以降は設定不要です。カード払いの方は自動的に日本円になるようです】必須ではありませんが、AWSからの請求を日本円(JPY)に変えることをオススメします。米ドル(USD)のままではカード会社に1.6〜2.2%の外貨取扱手数料を上乗せされてしまいますので。日本円(JPY)にするとAWS側で0.6%(?)程度の手数料がかかるようですが、カード会社の手数料よりはマシです。変更手順は次の通りです。変更すると来月分の請求から変更されます。
- ルートアカウントでログインする
- 右上のユーザー名をクリックする
- My Account(マイアカウント)をクリックする
- Payment Currency Preference(お支払い通貨の設定)の右にあるEdit(編集)をクリックする
- JPY - Japanese Yen を選択して、Update(更新)ボタンをクリックする
6. FAQ(随時追加)
いいえ。アクセスキーはIAMユーザーの画面で作りましたように、ユーザーごとに発行するものです。
ルートユーザーでログイン後、ユーザー名をクリックすると12桁のアカウントIDを確認できます。
aws s3 ls
を実行すると他の案件で使っているS3のバケットも出てきてしまうので、
aws s3 ls --profile account
のようにprofileを使いたいと思います。
カリキュラム内で、profileを分けていることで注意しないと事故になる場面ありますでしょうか?
もし特になければ、上記を使うことによる一般的な注意点がもしあればお伺いしたいです。- 他の案件で使っているリソースをZoomで画面共有したくない場合は、ルビコン塾学習用のAWSアカウントを別に作ることをオススメします。その際プロファイル (profile) を使うと、
aws
コマンドで利用するIAMユーザーやAWSアカウントに簡単に切り替えることができます。 - ただしプロファイルを使う場合は、教材で
aws
コマンドを使う際に毎回同じプロファイルを指定してください。もしプロファイルの指定を忘れそうな場合は、デフォルトのプロファイルとして設定すると指定を忘れても問題ありません。 - 事故になるかどうかはケースバイケースですね。例えば「現場で開発環境のAWSアカウントを操作していると思っていたら、実は本番環境のAWSアカウントを操作していて、間違って何かのリソースを削除してしまった」というようなケースです。プライベートのPCからは学習用のAWSアカウントにしか繋がらない場合は、特に気にする必要もないと思います。最悪リソースを削除してしまったら、作り直せばいいだけなので。
Administrators
ユーザーグループなど既存のユーザー名・ユーザーグループ名と重複する場合 → CFnでの作成がエラーになりますので、既存を削除して頂くか、重複しないようテンプレートのユーザー名・ユーザーグループ名を一括置換してから作成してください。- 既存のユーザーやユーザーグループをそのまま使われたい場合 → CFnで作ったユーザーやユーザーグループは勉強後にCFnのスタックごと削除して頂いてかまいません。
- 既存のユーザーやユーザーグループは使わず、CFnで作ったユーザーやユーザーグループに置き換える場合 → 既存のユーザーやユーザーグループを削除したり、削除しない場合はユーザーのアクセスキーを無効や削除するようお願いします。アクセスキーを使っている箇所は移行をお願いします
brew install awscli
を実行しましたが、Warning: No available formula with the name "awscli".
というエラーが表示されて、AWS CLIがインストールができません。どうすればいいですか?homebrew/coreがGitHubのリポジトリに接続できていない可能性があります。その場合は次のコマンド2行を実行してhomebrew/coreを再インストールしてみてください。
rm -rf $(brew --repo homebrew/core)
brew tap homebrew/core
aws configure
でアクセスキーを設定しましたが、以前に発行したアクセスキーが使われて切り替わりません。どこを確認すればいいですか?設定の基本 - AWS Command Line Interface にAWS CLI認証情報の優先順位が書かれています。
- コマンドラインオプション
--profile
など - 環境変数
export AWS_ACCESS_KEY_ID=****
など - CLI認証情報ファイル
~/.aws/credentials
やC:\Users\USERNAME\.aws\credentials
- CLI設定ファイル
~/.aws/config
やC:\Users\USERNAME\.aws\config
aws configure
でアクセスキーを設定すると3.のcredentialsファイルに保存されますが、2.の環境変数が優先されているのかもしれません。
Macの場合は.zshrc
や.bash_profile
を確認して、もし書いてある場合は削除してください。
職務機能の AWS 管理ポリシー - AWS Identity and Access Management に参考例はありますが、この中で良く使うのは
管理者の職務機能 AWS 管理ポリシー名: AdministratorAccess
読み取り専用アクセス AWS 管理ポリシー名: ReadOnlyAccess
くらいで、それ以外は要件をヒアリングしながらカスタマイズして作ったり、既存のAWS管理ポリシーで良さげなものを使ったり、完全にケースバイケースです。
IAMUserChangePassword
というポリシーが追加されました。どこで手順を間違えてしまったのでしょうか?IAMUserChangePassword
は手で作った場合に勝手に追加されるようです。CFnでは指定していないので、追加されることはありませんが。
ちなみに手で作る目的としては、CFnと全く同じものを作ることを目指すのではなく、
- Q. どういうリソースを作るのか?(今回で言えばIAMユーザー)
- Q. そのリソースは何のために作るのか?
- Q. そのリソースの設定値には何があるか?
- Q. それらの設定値の意味や目的は?
などを調べて予習することが目的です。
- Q. CFnで作った場合と手で作った場合に何が違ったか?
も多少は勉強になりますが、その点はあまり気にされなくて大丈夫です。リソースの種類によっては全く同じ設定で複数個、重複して作ることができないものもありますし。もちろん違う点については、ZoomやSlackで質問いただければお答えしますので、ご安心ください。
2021年夏頃にしれっと画面(マネジメントコンソール)上の表記がIAM GroupからIAM User Groupに変わりました。特にアナウンスもありませんでした。
こんな感じで画面の表記は本当によく変わりますが、CFnのテンプレートは変わりません。恐らくAWSの内部の管理上も変えていないからだと思います。
テンプレートが変わらず互換性が保たれるのはCFnのメリットと言えばメリットですが、画面とテンプレートの差異が生まれるという意味ではデメリットでもあります。
ちなみにテンプレートの方も変わる可能性があるのは、リソースのバージョンが変わった時ですね。
例えばELBにはv1(とは表記しませんが、今で言うところのCLB=Classic Load Balancer)と、新しいv2(ALB・NLB・GWLB)があります。他にWAFにもv1(とは表記しませんが、昔のWAF)と、新しいv2(WAFv2)があります。 これらは当然v1とv2で書き方が異なります。違うTypeのリソースという扱いなので当然ですね。
ただv1とv2があるのは珍しい方で、たいてい既存のものを機能拡張していくことの方が多いです。
以上、お疲れさまでした!