Slide 1

Slide 1 text

2024.7.31 クラスメソッド AWS事業本部 コンサルティング部 yhana AWS IAM Identity Center を使わない マルチアカウントのユーザー管理

Slide 2

Slide 2 text

自己紹介 yhana クラスメソッド株式会社 AWS事業本部 コンサルティング部 ソリューションアーキテクト 2024 Japan AWS Top Engineer (Security) AWS Community Builder (Security and Identity) 2 DevelopersIO ブログのタグ

Slide 3

Slide 3 text

今日の主題 ユーザーを集約する AWS アカウントを作成して、 マルチアカウント環境のユーザーを一元管理するテクニックを紹介 3 AWS アカウント AWS アカウント AWS アカウント ユーザー管理アカウント

Slide 4

Slide 4 text

もくじ 1. マルチアカウントのユーザー管理の課題 2. IAM ユーザーの一元管理の基礎 3. IAM ユーザーの一元管理のテクニック集 4

Slide 5

Slide 5 text

1. マルチアカウントのユーザー管理の課題 5

Slide 6

Slide 6 text

マルチアカウントのユーザー管理の課題 各アカウントにユーザーを作成する場合の課題 6 AWS アカウント AWS アカウント AWS アカウント 各アカウントに同じ利用者の ユーザーを作成する手間 社内ルールが遵守されていない ユーザーの存在 MFA 無し 脆弱な PW 異動・退職により利用していない ユーザーの放置

Slide 7

Slide 7 text

IAM Identity Center による課題解決 AWS Organizations を利用している場合は、 AWS IAM Identity Center サービスでユーザーの一元管理が可能 7

Slide 8

Slide 8 text

IAM Identity Center を利用できない場合 AWS IAM Identity Center を利用できない場合もある • リセラーの制約 • 社内の制約(社内発行アカウントの制約、別部署が管理など) 8

Slide 9

Slide 9 text

IAM ユーザーを利用した一元管理 IAM ユーザーを一つのアカウントのみに作成して、 他のアカウントには IAM ロールを作成してスイッチロールする 9 パスワード MFA

Slide 10

Slide 10 text

IAM ユーザーを集約するアカウントの呼び方 IAM ユーザーを集約したアカウントの呼び名は様々 • Jump アカウント • 踏み台アカウント • ユーザー管理アカウント(本資料ではこの名前を採用) 10

Slide 11

Slide 11 text

2. IAM ユーザーの一元管理の基礎 11

Slide 12

Slide 12 text

設定後の利用イメージ 12 マネジメントコンソールにパスワード、MFA でサインイン

Slide 13

Slide 13 text

設定後の利用イメージ 13 ロールの切り替え(パスワード、MFA は不要)

Slide 14

Slide 14 text

ユーザー管理アカウントの設定例 必要最小限の IAM ポリシーを付与する設定例 • MFA を設定、コンソールパスワードを変更する権限 • スイッチロールする権限 14

Slide 15

Slide 15 text

ユーザー管理アカウントの設定例 MFA 設定、コンソールパスワードを変更する権限 • IAM: IAM ユーザーに MFA デバイスの自己管理を許可する • IAM ユーザーに自分のパスワードを変更する権限を付与する スイッチロールする権限 15 { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*" } }

Slide 16

Slide 16 text

スイッチロール先アカウントの設定例 IAM ロールの設定例 • 許可ポリシー:特権、読み取り権限などの IAM ポリシー • 信頼ポリシー:ユーザー管理アカウントの IAM ユーザーを信頼 16

Slide 17

Slide 17 text

信頼ポリシーの記載例 特定の IAM ユーザーからのスイッチロールを許可 17 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/test-user-01", "arn:aws:iam::111122223333:user/test-user-02" ] }, "Action": "sts:AssumeRole" } ] } • アカウント ID はユーザー管理 アカウントを指定 • user の他に role (IAMロール) の指定も可能 • IAMグループの指定は不可能

Slide 18

Slide 18 text

信頼ポリシーの記載例 ユーザー管理アカウントにおける すべてのプリンシパル(IAM ユーザー、IAM ロールなど)を許可 18 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole" } ] } • アカウント ID はユーザー管理 アカウントを指定 • root はルートユーザーではなく、 すべての IAM ユーザー/ロール を示す

Slide 19

Slide 19 text

改めて設定後の利用イメージ 19 マネジメントコンソールにサインイン 最小限の権限のためユーザー管理アカウントの コスト情報は見れない

Slide 20

Slide 20 text

改めて設定後の利用イメージ 20 ロールの切り替え(スイッチロール) スイッチロールの際に許可された(信頼された) ユーザーであるか判定される

Slide 21

Slide 21 text

設定後の利用イメージ 21 ロールの切り替え(スイッチロール) 信頼されておらず、 スイッチロールが失敗した例

Slide 22

Slide 22 text

3. IAM ユーザーの一元管理のテクニック集 22

Slide 23

Slide 23 text

AWS Extend Switch Roles を利用した スイッチロール設定の管理 23 参考ブログ:各種ブラウザでAWS Extend Switch Roles #AWSExtendSwitchRoles - Qiita

Slide 24

Slide 24 text

ブラウザ拡張機能によるスイッチロールの管理 AWS Extend Switch Roles は スイッチロールの設定を管理できるブラウザ拡張機能 毎回スイッチ先の情報を入力する手間がなくなる 24 [ReadOnlyAccess] aws_account_id = 444455556666 role_name = test-read-only-role region = ap-northeast-1 color = DDDDDD [AdministratorAccess] aws_account_id = 444455556666 role_name = test-admin-role region = ap-northeast-1 color = e26d50 Configuration の設定例

Slide 25

Slide 25 text

スイッチロールの条件として MFA 有無と送信元 IP アドレスを指定 25 参考ブログ:Jumpアカウント環境でIPアドレス制限を行う方法 | DevelopersIO

Slide 26

Slide 26 text

スイッチロールの条件を付与 IAM ロールの信頼ポリシーの Condition により条件を付与 • MFA 有りの場合に許可 • 送信元 IP アドレスに応じて許可 条件を満たしていない場合はスイッチロールに失敗 26

Slide 27

Slide 27 text

MFA 有りの場合に許可 MFA 有りの場合にスイッチロールを許可する信頼ポリシー例 27 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } ] }

Slide 28

Slide 28 text

送信元 IP アドレスに応じて許可 MFA に加えて送信元 IP アドレスに応じてスイッチロールを許可する例 28 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" }, "IpAddress": { "aws:SourceIp": [ "192.0.2.1/32", "198.51.100.1/32" ] } } } ] } IP アドレスが下記の場合に許可 • 192.0.2.1/32 • 198.51.100.1/32

Slide 29

Slide 29 text

ユーザー管理アカウントで IP アドレス制限 送信元 IP アドレス制限の別の方法として、ユーザー管理アカウントの IAM ポリシーにおいて制限を設けることも可能 29 マネジメントコンソールへの サインイン時に送信元 IP アドレス制限

Slide 30

Slide 30 text

ユーザー管理アカウントで IP アドレス制限 マネジメントコンソールへのサインインを禁止する動作ではなく、 サインインできるが何も操作が許可されていない動作となる 30

Slide 31

Slide 31 text

ユーザー管理アカウントで IP アドレス制限 IAM ユーザー/グループにアタッチする IP 制限の IAM ポリシー例 31 { "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.1/32", "198.51.100.1/32" ] }, "Bool": { "aws:ViaAWSService": "false" } } } } AWS サービスからの利用は 送信元 IP アドレスで制限しない

Slide 32

Slide 32 text

送信元 IP アドレスに応じて許可 ユーザー管理アカウントの IAM ポリシーで制限する場合と スイッチロール先の IAM ロールで制限する場合の使い分けポイント 32 ユーザー管理アカウントで制限する場合は、 すべてのスイッチロール先のアカウントに 対して一律で制限できる スイッチロール先のアカウントで制限する場合は、 アカウント毎に異なるポリシーを適用できる

Slide 33

Slide 33 text

スイッチロール先 IAM ロールの 信頼ポリシーで複数ユーザーをまとめて許可 33 参考ブログ:信頼ポリシーにおいてスイッチロールできるIAMユーザーを複数指定する方法 | DevelopersIO

Slide 34

Slide 34 text

IAM ロールの信頼ポリシーで複数ユーザーを許可 IAM ロールの信頼ポリシーは IAM グループの指定に未対応 34 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/test-user-01", "arn:aws:iam::111122223333:user/test-user-02" ] }, "Action": "sts:AssumeRole" } ] } IAMグループの指定は未対応

Slide 35

Slide 35 text

IAM ロールの信頼ポリシーで複数ユーザーを許可 Condition 条件を使うことで次のパターンは実現可能 • IAM ユーザー名をワイルドカードで指定 • IAM ユーザーのパスで指定 35

Slide 36

Slide 36 text

IAM ユーザー名をワイルドカードで指定 「test-」から始まる IAM ユーザー名のスイッチロールを許可 36 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:iam::111122223333:user/test-*" } } } ] } Principal ではワイルドカ ードは利用できない

Slide 37

Slide 37 text

IAM ユーザーのパスで指定 パスが「/ccoe/」から始まる IAM ユーザーのスイッチロールを許可 37 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:iam::111122223333:user/ccoe/*" } } } ] }

Slide 38

Slide 38 text

IAM ユーザーのパス設定 IAM ユーザーにはユーザー名とは別にパスを設定できる パスはマネジメントコンソールから変更できず、AWS CLI で変更する 38 参考ブログ:IAMユーザーのパス設定を変更してみる | DevelopersIO

Slide 39

Slide 39 text

IAM ユーザーのパス設定の注意点 IAM ユーザーのパスは、IAM グループのように一つのユーザーに複数の パスを紐づけることはできない 次のようにパスを階層化することはできる • /company/sales/user01 • /company/developer/user02 • /partner/operator/user03 39

Slide 40

Slide 40 text

アクセスキーの利用 40 参考ブログ • IAM初心者がAWS CLIでスイッチロールするまで | DevelopersIO • マネコン起動もできるAWSのスイッチロール用CLIツール「AWSume」の紹介 | DevelopersIO

Slide 41

Slide 41 text

アクセスキー ユーザー管理アカウントを作成する構成でアクセスキーの作成は 2 通り ① ユーザー管理アカウントの IAM ユーザーでアクセスキーを作成 ② スイッチロール先アカウントでアクセスキーを作成 41 ① ②

Slide 42

Slide 42 text

①ユーザー管理アカウントでアクセスキー作成 42 AWS CLI でスイッチロールする例 $ aws s3 ls --profile test Enter MFA code for arn:aws:iam::111122223333:mfa/test-user-auth-app: コマンドの実行時に MFA のコードを入力 アクセスキー

Slide 43

Slide 43 text

①ユーザー管理アカウントでアクセスキー作成 43 AWS CLI でスイッチロールする例 Credentials ファイルの例 [default] aws_access_key_id = AKIA5FEXAMPLEEXAMPLE aws_secret_access_key = DrTzlzcMYz2gi49nqEdLZ2jzeexampleexample [test] source_profile = default role_arn = arn:aws:iam::444455556666:role/test-admin-role mfa_serial = arn:aws:iam::111122223333:mfa/test-user-auth-app アクセスキー

Slide 44

Slide 44 text

②スイッチロール先アカウントでアクセスキー作成 44 プログラム向けのアクセスキーの場合は、スイッチロール先アカウント で個別にアクセスキーを作成する場合もある アクセスキー

Slide 45

Slide 45 text

②スイッチロール先アカウントでアクセスキー作成 45 人が操作するためのアクセスキーの場合には、 スイッチロール先で AWS CloudShell を利用することもできる アクセスキー

Slide 46

Slide 46 text

②スイッチロール先アカウントでアクセスキー作成 46 人が操作するためのアクセスキーの場合には、 スイッチロール先で AWS CloudShell を利用することもできる アクセスキー

Slide 47

Slide 47 text

②スイッチロール先アカウントでアクセスキー作成 47 AWS CloudShell を利用する権限を付与

Slide 48

Slide 48 text

AWS CloudShell 利用時の考慮点 48 セッション時間の制約 > キーボードまたはポインタを使用して 20~30 分間操作しないと、シェルセッションは終了 > 約 12 時間連続して実行するシェルセッションは、ユーザーがその期間に定期的に操作している場合 でも、自動的に終了 引用元:のサービスクォータと制限 AWS CloudShell - AWS CloudShell インターネットアクセスやファイルのアップロード/ダウンロードが可能 アップロード/ダウンロードはアクションの禁止が可能 ReadOnlyAccess に追加で CloudShell 利用権限を付与する場合に禁止する場合もある 参考ブログ:AWS CloudShell におけるファイルのアップロード・ダウンロードを禁止する権限を試 してみた | DevelopersIO

Slide 49

Slide 49 text

AWS CloudFormation を利用した IAM ロールの設定 49 参考ブログ:CloudFormation StackSetsでスイッチロール用のIAM Roleを一括作成する - サーバーワークスエンジニアブ ログ

Slide 50

Slide 50 text

CloudFormation による IAM ロール設定 次のようなシチュエーションでは CloudFormation の利用が便利 • 一つのユーザーが複数のアカウントにアクセスする設定 • 一時的にアカウントにアクセスする設定 50

Slide 51

Slide 51 text

複数アカウントにアクセスする設定の展開 StackSets 機能により一つのアカウントから複数アカウントに展開 51 読み取り権限の IAM ロールを作成 読み取り権限の IAM ロールを作成 読み取り権限の IAM ロールを作成 設定者

Slide 52

Slide 52 text

一時的なアカウントアクセス設定の依頼 調査や支援のために、一時的にアカウントへのアクセスするための IAM ロール設定依頼を楽にできる 52 依頼者 依頼者のアカウント/ユーザーを 信頼した IAM ロールの作成

Slide 53

Slide 53 text

外部 ID プロバイダとの連携 (Microsoft Entra ID との連携) 53 参考ブログ:Jump アカウント構成で外部 ID プロバイダとして Entra ID を利用する | DevelopersIO

Slide 54

Slide 54 text

Microsoft Entra ID との連携例 Microsoft Entra ID とユーザー管理アカウントを連携して、ユーザーを Entra ID で管理する構成例 54

Slide 55

Slide 55 text

Microsoft Entra ID との連携例 ユーザー管理アカウントを利用せずに設定することもできるが、 この場合は Entra ID 側の設定頻度が多くなるため、Entra ID と AWS の管理 部署が異なると俊敏性が落ちる場合がある 55

Slide 56

Slide 56 text

Entra ID からのアクセスイメージ 56 Microsoft のマイアプリポータルからアカウント管理アカウントにアクセス

Slide 57

Slide 57 text

Entra ID からのアクセスイメージ 57 ユーザー管理アカウントからのスイッチロール手順は Entra ID と連携していないときと同様 ただし、スイッチロール先 IAM ロールの信頼ポリシーは異なる (次スライド参照)

Slide 58

Slide 58 text

Microsoft Entra ID との連携例 スイッチロール先 IAM ロールの信頼ポリシー例 58 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/test-assume-role" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:userid": "*:[email protected]" } } } ] } Entra ID と連携している ユーザー管理アカウントの IAM ロールを指定 Entra ID のユーザープリン シパル名を指定

Slide 59

Slide 59 text

AWS IAM Identity Center と 組み合わせた利用 59 参考ブログ:AWS IAM Identity Center から踏み台アカウント経由で AWS Organizations 管理外アカウントにスイッチロール してみる | DevelopersIO

Slide 60

Slide 60 text

IAM Identity Center と組み合わせた利用 AWS Organizations のメンバーアカウントの一つを ユーザー管理アカウントとして運用する構成例 60

Slide 61

Slide 61 text

AWS IAM Identity Center との連携 ユーザー管理アカウントにアタッチするアクセス許可セットのインラインポリシー例 スイッチロールするための権限のみを付与(パスワードと MFA は IAM Identity Center で管理しているため変更・設定権限は不要) 61 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "*" ] } ] }

Slide 62

Slide 62 text

AWS IAM Identity Center との連携 スイッチロール先 IAM ロールの信頼ポリシー例 62 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/aws- reserved/sso.amazonaws.com/ap-northeast- 1/AWSReservedSSO_AssumeRoleOnlyAccess_22e9e155fexample" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:userid": "*iam-idc-user-name" } } } ] } IAM Identity Center が作成した IAM ロールの ARN スイッチロールを許可したい IAM Identity Center の ユーザー名

Slide 63

Slide 63 text

未利用の IAM ユーザーの無効化 63 参考ブログ:AWS Config ルールの自動修復を利用して一定期間未利用の IAM ユーザーを無効化してみた | DevelopersIO

Slide 64

Slide 64 text

未利用の IAM ユーザーの検出 AWS が提供しているマネージドな Config ルールで ◯ 日間未利用の IAM ユーザーを検出できる 64 iam-user-unused-credentials-check を利用して 5 日を超えて未利用の IAM ユーザーを検出した例 5日以内に利用がある 5日以内に利用がない

Slide 65

Slide 65 text

未利用の IAM ユーザーの無効化 さらに AWS が提供している SSM オートメーション AWSConfigRemediation- RevokeUnusedIAMUserCredentials を利用することで 自動 or 手動で IAM ユーザーの無効化も可能 65 手 動 自 動 検出を契機に自動実行 無効化 検出の通知 手動実行 無効化

Slide 66

Slide 66 text

IAM ユーザーが無効化された状態 オートメーション実行後のコンソールアクセス無効化と アクセスキーの無効化(削除ではない) 66

Slide 67

Slide 67 text

ABAC (属性ベースのアクセス制御) の設定 67 参考ブログ • Jump アカウント構成で ABAC を使って EC2 インスタンスの起動・停止許可を与える | DevelopersIO • Jump アカウント構成において IAM ユーザーのタグを利用した ABAC により EC2 インスタンスの起動・停止許可を与 える | DevelopersIO

Slide 68

Slide 68 text

スイッチロール時に ABAC で制御する方法 ユーザー管理アカウント構成において ABAC を実現する方法 • スイッチロール先 IAM ロールのタグを利用した ABAC • ユーザー管理アカウントの IAM ユーザーのタグも利用した ABAC 68

Slide 69

Slide 69 text

IAM ロールのタグを利用した ABAC スイッチロールした IAM ロールで ABAC を実現する場合は、 IAM ロールに付与したタグを利用する 69

Slide 70

Slide 70 text

IAM ロールのタグを利用した ABAC 70

Slide 71

Slide 71 text

IAM ロールのタグを利用した ABAC 71 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": "*", "Condition": { "StringEquals": { "ec2:ResourceTag/Project": "${aws:PrincipalTag/Project}" } } } ] } 今回の例では • ec2:ResourceTag は EC2 インスタ ンスのタグ • aws:PricipalTag はスイッチロール している IAM ロールのタグ

Slide 72

Slide 72 text

IAM ユーザーのタグも利用した ABAC IAM ユーザーからスイッチロールできる IAM ロールも ABAC により 制限して連鎖的に制御することもできる 72

Slide 73

Slide 73 text

IAM ユーザーのタグも利用した ABAC スイッチロール先 IAM ロールと操作対象の EC2 インスタンスの ABAC は上述した「IAM ロールをタグを利用した ABAC」と同様のイメージ 73

Slide 74

Slide 74 text

IAM ユーザーのタグも利用した ABAC 74

Slide 75

Slide 75 text

IAM ユーザーをタグも利用した ABAC 75 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*", "Condition": { "StringEquals": { "iam:ResourceTag/Project": "${aws:PrincipalTag/Project}" } } } ] } 今回の例では • iam:ResourceTag はスイッチ 先の IAM ロールのタグ • aws:PricipalTag は IAM ユー ザーのタグ

Slide 76

Slide 76 text

さいごに 76

Slide 77

Slide 77 text

さいごに AWS IAM Identity Center を利用しないマルチアカウントのユーザー管理方 法を紹介した 基本的には IAM Identity Center 推奨だが IAMによる管理には次のような利 点もある • AWS Organizations 外のアカウントへのアクセス設定が比較的容易(IAM Identity Center の場合は IAM ID プロバイダの設定も必要) • AWS Config ルールによる未利用ユーザーの検出と無効化が可能 • ABAC で任意のタグが利用できる(IAM Identity Center は特定の属性の 利用となる) • スイッチロールの表示名が任意のためアカウント ID を含めることも可能 77

Slide 78

Slide 78 text

78