OneLogin で複数 AWS アカウントへのシングルサインオン環境をつくる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菊池です。

OneLoginをIDプロバイダ/SAML連携プロバイダとして利用することで、複数のAWSアカウントにシングルサインオンすることが可能です。今回、OneLoginを利用する機会がありましたので、早速試してみました。

利用イメージは以下のようになります。

OneLoginにログインしたユーザは、許可されたAWSアカウントに対してSAML連携でシングルサインオンが可能です。サインオンした際に使える権限は、設定されたIAMロールのポリシーに従いますが、どのIAMロールを使用するかの設定も可能でした。

OneLoginによるSSO環境構築

設定の手順は、OneLoginの以下のドキュメントに従い進めることで、それほど難しくなく可能でした。

設定要素と手順サマリ

動作イメージは以下のようになります。

設定要素

OneLoginとAWSでそれぞれ以下の項目を設定する必要があります。

  • OneLogin
    • ユーザ:OneLoginにログインするユーザ
    • Role:ユーザを割り当て可能。サインイン先のアカウント/権限を分ける単位で作成する。
    • Rule:Roleに対し、どのAWSアカウント/IAM Roleを許可するかのマッピング
  • AWS
    • クロスアカウントアクセス用 IAM Role:OneLoginが対象となるAWSアカウントのエイリアス、IAM Roleを取得するために利用される。対象全てのAWSアカウントで同じ名称にする
    • SAML連携用 IAM Role:OneLoginユーザがAWSにサインインする時に利用する

手順サマリ

  • OneLoginのApplicationを作成
  • AWS(連携する各アカウントで実施
    • IDプロバイダの作成
    • アカウントエイリアスの設定(任意)
    • SAML連携用 IAM Role の作成
    • クロスアカウントアクセス用 IAM Role の作成
  • OneLogin
    • 連携先SAMLプロバイダの設定
    • Roleの作成・設定
    • Ruleの設定
    • ユーザをRoleに追加

それでは順を追って設定していきます。

OneLoginのApplicationを作成

まずはOneLoginのApplicationの作成です。管理者権限のあるユーザでOneLoginにログインし、[APPS] -> [Add Apps]に進みます。

たくさんのApplicationがリストされますので、「AWS」と入れて検索し、「Amazon Web Services (AWS) Multi Account」を選択します。

任意の表示名称を入れてSAVE。ここでアイコン画像も設定できるみたいです。

[Configuration]のタブに進み、任意のIAM Role名を入力し、外部IDを生成します。ここで指定したIAM Role名が、後で設定するクロスアカウントアクセス用 IAM Role の名称と一致する必要があります。

次に、[Provisioning]タブで、「Enable provisioning for Amazon Web Services (AWS) Multi Account」にチェックを入れて保存します。

[Parameters]タブに進み、[Role]の行を選択します。

ポップアップウィンドウで、以下の設定を確認します。(「Amazon Roles Format」が選択されていること)

ここまで設定、保存できたら、[MORE ACTIONS]から、[SAML Metadata]を選択します。すると、「onelogin_metadata_xxxxxx.xml」がダウンロードされます。

AWSアカウントの設定

ここからはAWSの設定です。連携したい全てのアカウントで同じ作業が必要です。

IDプロバイダの作成

IAMのメニューから、[IDプロバイダ] -> [プロバイダの作成] に進みます。

タイプはSAMLを選択し、任意の名称を入力します。[メタデータドキュメント]に、先ほどOneLoginでダウンロードした「onelogin_metadata_xxxxxx.xml」をアップロードします。

問題なければ作成。

作成できました。

アカウントエイリアスの設定(任意)

任意ですが、アカウントのエイリアスを設定しておきます。複数のAWSアカウントを使い分ける際に、数字12桁のアカウントIDでは区別しにくいので、アカウントのエイリアス(別名)が設定できます。

IAMのダッシュボードから、[カスタマイズ]を選びます。

好みのエイリアスを設定しましょう。(AWSアカウントで一意である必要があります)

SAML連携用 IAM Role の作成

続いて、SAML連携用のIAM Roleです。これは、ユーザに利用させる権限を分割する数だけ、各アカウントに作成する必要があります。

IAM Roleの作成画面で、[SAML 2.0 フェデレーション]を選択し、SAMLプロバイダーは先ほど作成したものを選択します。マネジメントコンソールも利用させたいので、下のチェックを入れます。

アクセス権限は、そのロールに必要な権限をポリシーで設定しましょう。今回は[PowerUserAccess]を選択しました。

クロスアカウントアクセス用 IAM Role の作成

次に、クロスアカウントアクセス用のIAM Roleです。これは、OneLoginが連携先AWSアカウントのエイリアスと利用できるIAM Roleを取得するために設定します。

まずは、必要最小限の権限を設定したIAMポリシーを作成します。

ポリシーはJSONでこんな感じで設定しましょう。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "iam:ListAccountAliases",
                "iam:ListRoles"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

ポリシーができたらIAM Roleです。今回は、[別のAWSアカウント]のロールを作成します。アカウントIDはこちらのドキュメントに記載があります。外部IDを有効にし、OneLoginのApplication作成時に生成したIDを入力します。

ポリシーは先に作成したものを選択。

IAM Roleの名称は、OneLoginのApplication作成時に設定した名称で作成します。

ここまでできたら、IDプロバイダのARNを控えておきます。

ここまでのAWSの設定を、連携先の各アカウントで実施します

OneLoginの設定

OneLoginで残りの設定を進めます。

連携先SAMLプロバイダの設定

[Configuretion]タブで、[List of SAML Identity Providers]の欄に、各AWSアカウントで作成したIDプロバイダのARNを入力します。

[Provisioning]タブに進み、[Refresh]を押します。(特に何も変化しません)

Roleの作成・設定

OneLoginのRoleを作成します。利用上、役割を分担する必要がある数だけ作成します。

[Role]に進み、ロール名称を入力し、利用するアプリケーションにチェックを入れます。

Applicationに戻り、[Access]タブにある[Roles]から、利用を許可するRoleを選択してチェックを入れます(複数可)。

Ruleの設定

Ruleを設定します。[Rules]タブから、[New rule]を選択します。

ここで、Roleに対して利用可能なAWSアカウント/IAM Roleを割り当てます。条件を選択し、利用させるIAM Role/アカウントにチェックを入れます。

ユーザをRoleに追加

Roleの画面から、[Users]のタブに進みます。ユーザを選択したら[CHECK]。

これで、ユーザにRoleが割り当てられました。

以上で、事前の設定は完了です!

動作確認

それでは、動作確認です。

OneLoginにログインすると、利用可能なApplicationのアイコンが表示されていますので、選択します。

ログインしたユーザが利用できる、AWSアカウントとIAM Roleが表示されます。利用したものをチェックしてサインイン!

AWSコンソールにログインできました!

最後に

以上です。

OneLoginを使った、複数AWSアカウントへのシングルサインオンを試してみました。OneLoginでは、今回紹介した以外にも、決め細かくRole、Ruleを設定可能ですので、複数部門で多数のAWS環境をアカウントを分けて利用している場合にも対応できそうです。

また、AWS側の設定はアカウントごとに同じ作業を繰り返すことになりますので、CloudFormationなどで一括設定できるように準備すると、アカウントの追加時にもスムーズに設定できそうです。今後、この辺りも試していきたいと思います。