Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS IAM Identity Center を使わないマルチアカウントのユーザー管理

yhana
July 31, 2024

AWS IAM Identity Center を使わないマルチアカウントのユーザー管理

yhana

July 31, 2024
Tweet

More Decks by yhana

Other Decks in Technology

Transcript

  1. マルチアカウントのユーザー管理の課題 各アカウントにユーザーを作成する場合の課題 6 AWS アカウント AWS アカウント AWS アカウント 各アカウントに同じ利用者の

    ユーザーを作成する手間 社内ルールが遵守されていない ユーザーの存在 MFA 無し 脆弱な PW 異動・退職により利用していない ユーザーの放置
  2. IAM Identity Center を利用できない場合 AWS IAM Identity Center を利用できない場合もある •

    リセラーの制約 • 社内の制約(社内発行アカウントの制約、別部署が管理など) 8
  3. ユーザー管理アカウントの設定例 MFA 設定、コンソールパスワードを変更する権限 • IAM: IAM ユーザーに MFA デバイスの自己管理を許可する •

    IAM ユーザーに自分のパスワードを変更する権限を付与する スイッチロールする権限 15 { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*" } }
  4. 信頼ポリシーの記載例 特定の 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グループの指定は不可能
  5. 信頼ポリシーの記載例 ユーザー管理アカウントにおける すべてのプリンシパル(IAM ユーザー、IAM ロールなど)を許可 18 { "Version": "2012-10-17", "Statement":

    [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole" } ] } • アカウント ID はユーザー管理 アカウントを指定 • root はルートユーザーではなく、 すべての IAM ユーザー/ロール を示す
  6. ブラウザ拡張機能によるスイッチロールの管理 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 の設定例
  7. スイッチロールの条件を付与 IAM ロールの信頼ポリシーの Condition により条件を付与 • MFA 有りの場合に許可 • 送信元

    IP アドレスに応じて許可 条件を満たしていない場合はスイッチロールに失敗 26
  8. 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" } } } ] }
  9. 送信元 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
  10. ユーザー管理アカウントで 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 アドレスで制限しない
  11. 送信元 IP アドレスに応じて許可 ユーザー管理アカウントの IAM ポリシーで制限する場合と スイッチロール先の IAM ロールで制限する場合の使い分けポイント 32

    ユーザー管理アカウントで制限する場合は、 すべてのスイッチロール先のアカウントに 対して一律で制限できる スイッチロール先のアカウントで制限する場合は、 アカウント毎に異なるポリシーを適用できる
  12. 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グループの指定は未対応
  13. 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 ではワイルドカ ードは利用できない
  14. 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/*" } } } ] }
  15. ①ユーザー管理アカウントでアクセスキー作成 42 AWS CLI でスイッチロールする例 $ aws s3 ls --profile

    test Enter MFA code for arn:aws:iam::111122223333:mfa/test-user-auth-app: コマンドの実行時に MFA のコードを入力 アクセスキー
  16. ①ユーザー管理アカウントでアクセスキー作成 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 アクセスキー
  17. AWS CloudShell 利用時の考慮点 48 セッション時間の制約 > キーボードまたはポインタを使用して 20~30 分間操作しないと、シェルセッションは終了 >

    約 12 時間連続して実行するシェルセッションは、ユーザーがその期間に定期的に操作している場合 でも、自動的に終了 引用元:のサービスクォータと制限 AWS CloudShell - AWS CloudShell インターネットアクセスやファイルのアップロード/ダウンロードが可能 アップロード/ダウンロードはアクションの禁止が可能 ReadOnlyAccess に追加で CloudShell 利用権限を付与する場合に禁止する場合もある 参考ブログ:AWS CloudShell におけるファイルのアップロード・ダウンロードを禁止する権限を試 してみた | DevelopersIO
  18. 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 のユーザープリン シパル名を指定
  19. AWS IAM Identity Center と 組み合わせた利用 59 参考ブログ:AWS IAM Identity

    Center から踏み台アカウント経由で AWS Organizations 管理外アカウントにスイッチロール してみる | DevelopersIO
  20. AWS IAM Identity Center との連携 ユーザー管理アカウントにアタッチするアクセス許可セットのインラインポリシー例 スイッチロールするための権限のみを付与(パスワードと MFA は IAM

    Identity Center で管理しているため変更・設定権限は不要) 61 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "*" ] } ] }
  21. 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 の ユーザー名
  22. 未利用の IAM ユーザーの検出 AWS が提供しているマネージドな Config ルールで ◯ 日間未利用の IAM

    ユーザーを検出できる 64 iam-user-unused-credentials-check を利用して 5 日を超えて未利用の IAM ユーザーを検出した例 5日以内に利用がある 5日以内に利用がない
  23. 未利用の IAM ユーザーの無効化 さらに AWS が提供している SSM オートメーション AWSConfigRemediation- RevokeUnusedIAMUserCredentials

    を利用することで 自動 or 手動で IAM ユーザーの無効化も可能 65 手 動 自 動 検出を契機に自動実行 無効化 検出の通知 手動実行 無効化
  24. ABAC (属性ベースのアクセス制御) の設定 67 参考ブログ • Jump アカウント構成で ABAC を使って

    EC2 インスタンスの起動・停止許可を与える | DevelopersIO • Jump アカウント構成において IAM ユーザーのタグを利用した ABAC により EC2 インスタンスの起動・停止許可を与 える | DevelopersIO
  25. 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 ロールのタグ
  26. 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 ユー ザーのタグ
  27. さいごに AWS IAM Identity Center を利用しないマルチアカウントのユーザー管理方 法を紹介した 基本的には IAM Identity

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