目次
概要
- プロジェクトの規模が大きくなり、マルチアカウントを扱う必要になった
- AWSのベストプラクティスは環境ごとにアカウントは分離すること
- そのためAWS OrganizationとIAM Identity Center(AWS SSO)を設定したときの備忘録
NOTE:
- 画像は色々な所から持ってきているため、内容が違う場合がある
前提
- AWSアカウントのセットアップ済み
AWS Organization
AWS Organizationの前提知識
AWS Organizationとは
- AWS Organizationsは複数のAWSアカウントを管理するサービス
- 料金は無料
AWS Organizationでできる事
- AWSアカウント(メンバーアカウント)を作成
- 請求とコストの一元管理
- AWSアカウント間やOU(組織単位)間でリソースの共有
- AWS Resource Access Manager(AWS RAM)で可能
2つのAWSアカウント
AWSアカウント(メールアドレスや12桁のIDで識別)はAWSを利用する契約単位。
それには次の2種類のアカウントタイプがある。
- 管理アカウント(マネジメントアカウント)/ 親アカウント
- 組織全体の管理権限を持つ
- 1つの組織に1つだけ存在する
- メンバーアカウント / 子アカウント
- 管理アカウント以外は、全てメンバーアカウント
- AWSアカウントが組織のメンバーになることができるのは、一度に1つのみ
組織単位(OU)
- OU(Organization Unit)は組織内のAWSアカウントを束ねたグループ
- OUの中に他のOUを入れ子にして階層化することが可能
- OUには後述するサービスコントロールポリシーの適用が可能
- 階層化されたOUでは、親にアタッチされたポリシーは、子のOUにも適用される
AWS Organizationのポリシー
- ポリシーとは、サービスの利用範囲やアクセスの制限などを明示したドキュメント
- AWS OrganizationではOUやメンバーアカウントに適用が可能
- ワークロードごとにポリシーを管理するのがベター
利用できるポリシーは次の4つがある。
- サービスコントロールポリシー(SCP)
- 組織内のアカウントで使用可能なAWSサービスを定義可能
- バックアップポリシー
- 組織内のアカウントのAWSリソースに、バックアッププランの管理と適用ができる
- ポリシー
- 組織内のアカウントのAWSリソースにアタッチされたタグを、標準化することに役立つ
- 人工知能(AI)サービスのオプトアウトポリシー
- 組織内のアカウントのAWS AI サービス用のデータ収集を管理できる
今回使うのはSPCとなる。
AWSアカウントの分離基準
アカウントとOUの分割には、次のような観点がある。
- 組織(会社や事業体)
- プロダクト/サービス
- 基盤特性(アプリ基盤/分析基盤/監視基盤/データ基盤)
- 環境(prod/stg/devなど)
メンバーアカウントの追加
管理アカウントとなるAWSアカウントでAWSマネジメントコンソールにアクセスし、AWS Organizationsを起動し、「組織を作成する」をクリック。
組織を作成した時点では、管理アカウントだけが所属した状態となっているので、「AWSアカウントを追加」をクリック。
組織にメンバーアカウントを追加する。
- name:
- AWSアカウントの名前は
<corp>-<pj>-<env>
など
- AWSアカウントの名前は
- email:
- AWSアカウントのメールアドレスはユニークネスが必要
- 同じメールアドレスは使えない
- Gmailの場合はalias(
xxx+1@gmail.com
やxxx.1@gmail.com
)がおすすめ
- IAM Role name:
- OrganizationAccountAccessRole
OUの作成
続いて、Rootにチェックを入れ、「アクション」メニューから、「組織単位」「新規作成」をクリックする。
OUの名前は<xxx>-ou
など。
組織単位名のみ設定し、「組織単位の作成」をクリックする。
メンバーアカウントとOUの紐づけ
先ほど作成したメンバーアカウントを選択肢、AWSカウント > 移動を押下する。
そして、OUを選択して移動させる。
SCPの作成
ポリシーページ > サービスコントロールポリシーを押下。
「サービスコントロールポリシー」を有効化し、有効化すると以下のページになるので「ポリシーを作成」をクリックする。
メンバーアカウントが組織を離れるのを禁止するポリシーを作成する。
- policy名
- leaving-org-policy
- 説明
- メンバーアカウントの管理者が組織からアカウントを削除できないようにする。
|
|
SCPのアタッチ
先ほど作成したSCPを選択し、「ポリシーのアタッチ」をクリックしてアタッチする。
スイッチロール
スイッチロールとは
- 一言で言うと、1つのIAM Userで複数のAWS AccountのIAM Roleになれる機能
- 例えば、AWSの管理アカウント(xxx@hoge.com)で作ったAWSのメンバーアカウント(yyy@hoge.com)に対して、AWS管理アカウント側から
OrganizationAccountAccessRole
でアクセスするなどができる - 別々のメールアドレスでもOkである
スイッチロールでログイン
ユーザーメニューからスイッチロールを押下する。
AWSメンバーアカウントで作成した情報を入力する。表示名はなんでも良い。
- アカウント
- AWSのアカウントID
- 59859000000など
- Role
- AWS Organizationで設定したロール
- OrganizationAccountAccessRoleなど
- 表示名
- xxx-dev
スイッチロールすると、以下のように表示が変わる。
下のようなエラーの画面に遷移しても問題ない。
これはあくまでロールをスイッチする前に見ていたAWS Organizationsの画面にメンバーアカウントで遷移した為に発生したエラー。
IAM Identity Center
IAM Identity Centerの前提
IAM Identity Centerとは
- IAM Identity Centerは、AWS Single Sign-onの後継サービス
- AWS Organizationsで複数アカウントを運用している環境で各ユーザを集約管理できる
- つまり、各アカウントへのログインを簡単に行えるようにするためのサービス
- 概念的には次になり、IAM UserやIAM Groupの抽象度が上がった機能
IAM Identityのエンティティの関係
IAM Identityのエンティティの関係は次になる。
- 基本的に次のの紐づけをする
- グループ : ユーザー = 1:N
- 許可セット : ポリシー = 1:N
- そしてそれらをAWSアカウントに紐づけができる
- AWSアカウント : グループ = 1:N
- AWSアカウント : 許可セット = 1:N
つまり、ユーザーと権限をAWSアカウントにつける事ができる。
IAM Identity CenterとAWS Accountの関係
- あくまでIAM Identity CenterとAWS Accountのクレデンシャルは別物
- IAM Identity Centerのクレデンシャルは複数のAWSアカウントにSSOするための物
- つまり、AWSアカウントとIAM Identity Centerは同じメールアドレスでもOK
IAM Identity Centerの有効化
- 管理権限を持つアカウントでログインする
- その後、Tokyoリージョンを選択する
- そして、IAM Identity Centerにアクセス、有効にする
- なお、IAM Identity Centerはある1つリージョンのみしかでしか作れないので注意
ユーザー
ユーザー追加
左メニューのユーザーからユーザーを追加する。
- ユーザー名
<random_int>-<role>
- 例えば、
123121-poweruser
という形
- 表示名
- 本名
ユーザーのメールの認証
次のようなメールがIAM Identity Centerから来るのでログインする。
ユーザーのPWと二段階認証の設定
SSO Userのメールをチェックし、ユーザー名とPWをセットし、二段階認証を設定する。
グループ
グループ作成
左メニューのユーザーからグループを追加する。
名前は<pj>-<env>-<role>
で作成した。
例えば、xxx-dev-poweruser
見たいな形となる。
そのグループに上記のユーザーを追加し、グループとユーザーを紐づけする。
グループとAWSアカウントの紐づけ
AWS Organizationで作成したグループとAWS Identity Centerのリソースを連携する。
先ほど作ったグループを指定して、割り当てをクリック。
その後、PowerUserAccessを許可セットとして設定する。
これでAWSのアカウントへのユーザーの紐づけが出来た。
ちなみに、これをしないと下記のようにAWSアカウントがない状態で表示されるので注意。
許可セット
許可セットの追加
左メニューから許可セット > 許可セットの作成
を選択する。
事前に用意されたポリシーPowerUserAccess
を使用する。
詳細は次を設定する。
- 許可セット名
- PowerUserAccess
- セッション期間
- 12h
つまり、ポリシーと許可セットの紐づけである。
許可セットとAWSアカウントの紐づけ
あとは権限をアカウントに紐づける。
NOTE: ここでOUに対しては許可セットは紐づけられないので注意。
ユーザーまたはグループの割り当てをクリックして紐づける。
今回はxxx-dev-poweruser
に紐づける。
SSOでログイン
ログインURLの変更
設定 > アイデンティティソース
から、URLを変更できる。
マネージメントコンソール
マネージメントコンソールにログイン
アクセスポータルのURLからSSOの画面にログインする。
ログインすると次のように表示される。
日本語とthemeはdarkで設定する。
Console
CLIのセットアップ
- 次のコマンドで、IAM Identity Centerのユーザー名でログインする
--profile
の値はssoでログインした情報を紐づけるだけのもので、任意の名前をつけられる- ただし、最初に設定したAWSアカウントとRoleのセットからは2回目以降変えられない
- .aws/configの
sso_role_name
やsso_account_id
をマニュアルで変える必要がある
- .aws/configの
- 故に、
username-env-role
でprofileをセットするのがベター
|
|
例えば、2つのロールがある時は、選ぶようになっている。 これによって、1つのsso profileで複数のawsアカウントのIAM Userを制御できるようになる。
CLIでログイン
2回目以降は、以下でログインする。
|
|
その後、ウィザードに従ってAWSアカウントとRoleを選ぶ。
設定ファイル
設定すると ~/.aws/config
に次のような設定が追加される。
|
|
IAM
IAMユーザーの分割基準
- 管理者
- PJ/プロダクト全般の管理者
- 請求対応/IAM権限管理/緩和申請などを対応する
- 開発者
- アプリケーションの開発者
- アプリケーションの開発を担当する
- 規模によってはBE/FE/Infraごと、またはプロダクトごとに分割する
- 監査担当者
- PJ/プロダクト全般の監査担当者
- リリース前/セキュリティインシデント時の監査対応をする
- ベンダー
- 開発の一部などを委託されたベンダー
- 限定された範囲のみ権限を付与する
- 規模によってはベンダーごとに分割する
IAM Policyのテンプレ
基本的に次のPolicyを使う。
ポリシー | 主な対象者 | 用途 |
---|---|---|
AdministratorAccess | 開発者 | 全権限。AWS経験が少ない開発者にはただちには割り当てない |
PowerUserAccess | 開発者 | IAMの権限まわりを除いた全権限 |
Billing | 請求管理者 | 請求情報のみアクセスできれば良い場合に割り当てる |
SupportUser | 開発者以外の一部 | 開発業務をするわけではないが、AWSの仕様や管理について問い合わせをしたい場合に割り当てる |
その他
PoLP
- PoLPとは、Principle of Least Privilege(最小権限/最小特権の原則)の意味
- アクセス許可セットの設定では、PoLPを意識するべき
- 方法は、PJの初期段階でユーザー/グループを細かくする事
- 役割ごとにアクセス許可セットのIAM Policyを適切なものに設定すべき
AWS Organization vs. IAM
AWS OrganizationとIAMは次のように対応しているとみなせる。
AWS Organizations | IAM (Identity and Access Management) |
---|---|
管理アカウント (Management Account) | ルートユーザー (Root User) |
メンバーアカウント (Member Account) | IAM ユーザー (IAM User) |
組織単位 (Organizational Unit, OU) | IAM ユーザーグループ (IAM User Group) |
ポリシー (Policy) | IAM ポリシー (IAM Policy) |
IAM RoleはAWS Organizationsと直接的な関係がない。
IAM Roleは特定の権限を持つ一時的なアイデンティティのため。
mangement consoleの色変え
次のChrom Extensionはあるとベター。
- Colorize CloudWatch
- AWS Peacock Management Console
特にPeacockはAccountIdで色変えの設定ができるのでおすすめ。
参考文献
- Principle of least privilege - Wikipedia
- AWS Organizationsとは?その仕組みと実現できること、ユースケースを解説 | アシスト
- [AWS]Organizationsにおけるマルチアカウント構成のベストプラクティスについて
- [アップデート] AWS Organizationsでメンバーアカウントを簡単に削除できるようになりました | DevelopersIO
- 【AWS入門】AWS Organizationsで、AWSアカウントを一元管理する | よくわかるAWS・クラウド
- 一般的な例 - AWS Organizations
- AWS Organizationsから新規AWSアカウントを作成してスイッチロールしてみた | DevelopersIO
- IAM Identity Center(AWS SSO)に移行して1年たったので使い方などまとめる | 株式会社PLAN-B
- IAM Identity Centerを使って複数アカウント管理する。(その1:IAM Identity Centerでのログイン) #AWS - Qiita
- 【小ネタ】複数のSwitch Roleでのクロスアカウントアクセスをブラウザのブックマークで管理する | DevelopersIO
- AWS IAM Identity CenterでIAMアカウントを統一する
- IAM Identity Centerを使って複数アカウント管理する。(その1:IAM Identity Centerでのログイン) #AWS - Qiita