LoginSignup
5
3

More than 3 years have passed since last update.

OneLoginとSwitchロールでAWSにログインできるようにした

Last updated at Posted at 2019-12-04

本記事は「Opt Technologies Advent Calendar 2019」4日目の記事である。

1. 概要および制限事項

本記事ではAWSに対してOneLoginで認証する手順については記載しない。

OneLoginを利用してあるAWSアカウントにログインしたユーザがSwitch Roleで別のAWSアカウントに切り替えられる設定
およびOneLoginの認証情報をもとにSwitchRole可能なアカウントを制限する設定について記載する。
またAWSコンソールの利用のみ対象とし、IAMロールに紐づく一時アクセスキーの取得は対象外とする。

今回の手順では一部にAWS CLIを使用する。

$ aws --version
aws-cli/1.16.195 Python/2.7.16 Darwin/19.0.0 botocore/1.12.185

2. 手順内容

手順はおおよそ以下となる。

  1. マスターアカウントにSAMLとIAMロールを設定
  2. OneLoginにAWS用のコネクタを作成
  3. メンバーアカウントにSwitchRoleのためのIAMロールを作成
  4. ユーザにURLを共有

2-1. 構成

SwitchRole.png

上図のようにユーザはOneLoginでマスターアカウントにログインする。
各プロダクトが稼働するメンバーアカウントはSwitchRoleして利用することを考えた。

2-2. OneLoginでマスターアカウントにログインする

参考資料をもとに設定をおこなう。

参考資料に加えて必要な手順として、今回の構成においてユーザにはメンバーアカウントへのSwitchRoleをさせるため
マスターアカウントに作成するIAMロールにはその権限を付与する。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "*"
        }
    ]
}

2-3. メンバーアカウントにSwitch Role用のIAMロールを作成

メンバーアカウントにてIAMロール作成する。以下はCloudFormationで作成するさいのサンプル。

sample.yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  MasterAccountId:
    Type: String
Resources:
  IAMRole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: 'PowerUserRole'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Action: 'sts:AssumeRole'
            Effect: 'Allow'
            Principal:
              AWS: !Sub 'arn:aws:iam::${MasterAccountId}:root'
            Sid: ''
      ManagedPolicyArns:
      - 'arn:aws:iam::aws:policy/PowerUserAccess'

AssumeRolePolicyDocumentにarn:aws:iam::(マスターアカウントのID):rootを設定することで、マスターアカウントからのSwitchRoleだけ許可する。

AWS CLIでは以下のようにデプロイする。
注意:メンバーアカウントに対してデプロイするよう注意すること

masterAccountId=hoge
productAccountProfile=huga

aws cloudformation deploy \
--template-file sample.yaml \
--stack-name switchrole-from-onelogin \
--parameter-overrides MasterAccountId=${masterAccountId} \
--capabilities CAPABILITY_NAMED_IAM \
--profile ${productAccountProfile}

2-4. 限られたユーザのSwitchRole

上記のIAMロールの設定ではマスターアカウントにログインしたユーザは全員SwitchRole可能となっている。
Administratorなど限られたユーザにのみSwitchRoleを許可したい場合、以下のように設定する。

sample.yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  MasterAccountId:
    Type: String
  MasterAccountRoleName:
    Type: String
Resources:
  IAMRole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: 'PowerUserRole'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Action: 'sts:AssumeRole'
            Effect: Allow
            Principal:
              AWS:
                - !Sub 'arn:aws:sts::${MasterAccountId}:assumed-role/${MasterAccountRoleName}/erai@example.com'
                - !Sub 'arn:aws:sts::${MasterAccountId}:assumed-role/${MasterAccountRoleName}/kanrisha@example.com'
            Sid: ''
      ManagedPolicyArns:
      - 'arn:aws:iam::aws:policy/PowerUserAccess'

OneLogin経由でマスターアカウントにログインした状態では<IAMロール名>/<メールアドレス>で認証されているため
AssumeRolePolicyDocumentにarn:aws:sts::(マスターアカウントID):assumed-role/(IAMロール)/(メールアドレス)となる。

デプロイは手順2-3と共通。

2-5. SwitchRole用のURLを共有

作成したIAMロールをAWSコンソールから確認すると、赤枠のコンソールでロールを切り替えることができるユーザーに、このリンクを知らせますが表示される。
scsho.png

このURLをユーザに共有する。

ユーザがOneLogin経由でマスターアカウントにログインしている状態で上記リンクを踏むと以下の画面に遷移する。

switchroleconfig.png

上記項目を設定するとSwitchRole設定が完了する。

3. 参考

OneLoginを利用してAWSにSAMLでログインする: Serverworks ENGINEER BLOG
http://blog.serverworks.co.jp/tech/2018/06/22/onelogin-aws-saml/

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3