Featured image of post AWSのマルチアカウントの設定

AWSのマルチアカウントの設定

目次

概要

  • プロジェクトの規模が大きくなり、マルチアカウントを扱う必要になった
  • AWSのベストプラクティスは環境ごとにアカウントは分離すること
  • そのためAWS OrganizationとIAM Identity Center(AWS SSO)を設定したときの備忘録

NOTE:

  • 画像は色々な所から持ってきているため、内容が違う場合がある

前提

  • AWSアカウントのセットアップ済み

AWS Organization

AWS Organizationの前提知識

AWS Organizationとは

  • AWS Organizationsは複数のAWSアカウントを管理するサービス
  • 料金は無料

AWS Organizationの全体像

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 Organizationsで構成する管理アカウントとメンバーアカウントの概要図

AWS Organizationのポリシー

  • ポリシーとは、サービスの利用範囲やアクセスの制限などを明示したドキュメント
  • AWS OrganizationではOUやメンバーアカウントに適用が可能
  • ワークロードごとにポリシーを管理するのがベター

利用できるポリシーは次の4つがある。

  1. サービスコントロールポリシー(SCP)
    • 組織内のアカウントで使用可能なAWSサービスを定義可能
  2. バックアップポリシー
    • 組織内のアカウントのAWSリソースに、バックアッププランの管理と適用ができる
  3. ポリシー
    • 組織内のアカウントのAWSリソースにアタッチされたタグを、標準化することに役立つ
  4. 人工知能(AI)サービスのオプトアウトポリシー
    • 組織内のアカウントのAWS AI サービス用のデータ収集を管理できる

今回使うのはSPCとなる。

AWSアカウントの分離基準

アカウントとOUの分割には、次のような観点がある。

  1. 組織(会社や事業体)
  2. プロダクト/サービス
  3. 基盤特性(アプリ基盤/分析基盤/監視基盤/データ基盤)
  4. 環境(prod/stg/devなど)

メンバーアカウントの追加

管理アカウントとなるAWSアカウントでAWSマネジメントコンソールにアクセスし、AWS Organizationsを起動し、「組織を作成する」をクリック。

組織を作成した時点では、管理アカウントだけが所属した状態となっているので、「AWSアカウントを追加」をクリック。

組織にメンバーアカウントを追加する。

  • name:
    • AWSアカウントの名前は<corp>-<pj>-<env>など
  • email:
    • AWSアカウントのメールアドレスはユニークネスが必要
    • 同じメールアドレスは使えない
    • Gmailの場合はalias(xxx+1@gmail.comxxx.1@gmail.com)がおすすめ
  • IAM Role name:
    • OrganizationAccountAccessRole

OUの作成

続いて、Rootにチェックを入れ、「アクション」メニューから、「組織単位」「新規作成」をクリックする。

OUの名前は<xxx>-ouなど。
組織単位名のみ設定し、「組織単位の作成」をクリックする。

メンバーアカウントとOUの紐づけ

先ほど作成したメンバーアカウントを選択肢、AWSカウント > 移動を押下する。

そして、OUを選択して移動させる。

SCPの作成

ポリシーページ > サービスコントロールポリシーを押下。

「サービスコントロールポリシー」を有効化し、有効化すると以下のページになるので「ポリシーを作成」をクリックする。

メンバーアカウントが組織を離れるのを禁止するポリシーを作成する。

  • policy名
    • leaving-org-policy
  • 説明
    • メンバーアカウントの管理者が組織からアカウントを削除できないようにする。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "organizations:LeaveOrganization"
            ],
            "Resource": "*"
        }
    ]
}

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 Centerの概要

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_namesso_account_idをマニュアルで変える必要がある
  • 故に、username-env-roleでprofileをセットするのがベター
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ aws configure sso --profile xxx-admin --no-browser
SSO session name (Recommended): 123121-poweruser
SSO start URL [None]: https://xxx.awsapps.com/start
SSO region [None]: us-east-1
SSO registration scopes [sso:account:access]: sso:account:access
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.us-east-1.amazonaws.com/

Then enter the code:

XXX-XXXX
tcgetpgrp failed: Not a tty
The only AWS account available to you is: 59000000008
Using the account ID 59000000008
The only role available to you is: PowerUserAccess
Using the role name "PowerUserAccess"
CLI default client Region [None]: ap-northeast-1
CLI default output format [None]: json

To use this profile, specify the profile name using --profile, as shown:

例えば、2つのロールがある時は、選ぶようになっている。 これによって、1つのsso profileで複数のawsアカウントのIAM Userを制御できるようになる

CLIでログイン

2回目以降は、以下でログインする。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ aws sso login --profile xxx-admin --no-browser
Browser will not be automatically opened.
Please visit the following URL:

https://device.sso.us-east-1.amazonaws.com/

Then enter the code:

XXXX-WKKB

Alternatively, you may visit the following URL which will autofill the code upon loading:
https://device.sso.us-east-1.amazonaws.com/?user_code=XXXX-WKKB
Successfully logged into Start URL: https://xxx.awsapps.com/start

その後、ウィザードに従ってAWSアカウントとRoleを選ぶ。

設定ファイル

設定すると ~/.aws/configに次のような設定が追加される。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[profile mike]
sso_session = mike
sso_account_id = 111111111 
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json
[sso-session mike]
sso_start_url = https://xxx.awsapps.com/start#/
sso_region = us-east-1
sso_registration_scopes = sso:account:access

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を適切なものに設定すべき

PoLP

AWS Organization vs. IAM

AWS OrganizationとIAMは次のように対応しているとみなせる。

AWS OrganizationsIAM (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で色変えの設定ができるのでおすすめ。

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。