Amazon Connect で SAML 認証と Okta を使って IP アドレス制限をやってみた

Amazon Connect で SAML認証を選択すると、IP アドレス制限などの ID プロバイダーが対応する機能が利用できます。
2022.05.12

入社2年目になりましたアノテーション・テクニカルサポートチームの hato です。

「Amazon Connect でIP アドレス制限をしたい」というお問い合わせをいただくことがありましたが、実際に構築したことはなかったのでやってみました。

Amazon Connect の認証方式と IP アドレス制限

Amazon Connect では3つの認証方式をサポートしています。

  1. Amazon Connect で認証
  2. AWS Directory Service で認証
  3. SAML 2.0 ベースで認証

ID プロバイダーを利用した SAML 2.0 ベースの認証方式の場合、ID プロバイダーが対応する IP アドレス制限や多要素認証が使用できるため、IDとパスワードにより認証を行う Amazon Connect で認証する方式に比べ、柔軟な設定が可能です。

今回は、SAML 2.0 ベースの認証方式で、IP アドレス制限に対応した ID プロバイダーを選択し、Amazon Connect インスタンスの作成から ID プロバイダーで IP アドレス制限の設定、ログインの確認までをやってみます。

ID プロバイダーには参考になるブログが存在する Okta を使用しています。手順も参考にさせて頂いており、実際に構築される際はこちらの内容もぜひご覧ください。

なお、他の ID プロバイダーで SAML 2.0 ベースの認証方式を設定する場合は、次のブログが参考になると思います。
(IP アドレス制限などの要件がある場合は、 ID プロバイダーが対応しているか忘れずにご確認ください)

事前準備

事前準備として、Okta でアカウント開設とログイン用ユーザーを作成しておきます。
今回は Okta 側にhato@example.comというユーザーを作成済みです。
ID プロバイダー(Okta)内のユーザー名と Amazon Connect のユーザー名は一致させる必要があるのでご注意ください。

準備が完了したら、以下手順を進めてきます。

手順

  1. Amazon Connect インスタンスの作成
  2. フェデレーションの準備
  3. Okta と AWS アカウントのフェデレーション設定
  4. Okta で Amazon Connect へのログインを設定
  5. IP アドレス制限の設定

Amazon Connect インスタンスの作成

SAML 認証を選択した Amazon Connect を作成します。
現時点で、作成後に認証方式を変更することはできませんのでご注意ください。

Amazon Connect コンソール を開き、「インスタンスを追加する」をクリックします。

「SAML 2.0 ベースの認証」を選択。「アクセス URL」に任意の名前を入力し、「次へ」をクリックします。

次の値を指定して「次へ」をクリックします。

  • 名:任意の名前
  • 姓:任意の名字
  • ユーザー名:Oktaと同じユーザー名(メールアドレス)

「次へ」をクリックします。

「次へ」をクリックします。

「インスタンスの作成」をクリックします。

次のステップで設定するため Connect インスタンス ARN を取得します。
作成したインスタンスエイリアスをクリックします。

Instance ARN をコピーして、テキストエディタなどで保存します。

フェデレーションの準備

二つの IAM ポリシーと IAM ユーザーを作成します。

  • Connect インスタンスのユーザーにフェデレーションを許可する用の IAM ポリシー
  • Okta に IAMロールとアカウントエイリアスの一覧表示を許可する用の IAM ポリシー
  • 上記ポリシーを使用する Okta 用の IAM ユーザー

なお、「Okta のフェデレーション設定」のステップで、IAM ロールも作成します。

フェデレーションを許可するポリシー

IAM コンソール を開き、ポリシーから「ポリシーの作成」をクリックします。

「JSON」タブを選択します。

エディタ(赤枠で囲った部分)に、次のポリシーを入力します。

Connect インスタンス ARNはさきほど保存した「Connect インスタンス ARN」に置き換えてください。

{
   "Version": "2012-10-17",
   "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": "connect:GetFederationToken",
            "Resource": [
                "<Connect インスタンス ARN>/user/${aws:userid}"
            ]
        }
    ]
}

「次のステップ:タグ」をクリックします。

「次のステップ:確認」をクリックします。

「名前」に任意の名前を入力し、「ポリシーの作成」をクリックします。

一覧表示を許可するポリシー

ポリシーから「ポリシーの作成」をクリックします。

「JSON」タブを選択します。

エディタ(赤枠で囲った部分)に、次のポリシーを入力します。

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

「次のステップ:タグ」をクリックします。

「次のステップ:確認」をクリックします。

「名前」に任意の名前を入力し、「ポリシーの作成」をクリックします。

IAM ユーザーの作成

IAM コンソール のユーザーから「ユーザーを追加」をクリックします。

次の値を指定して「次のステップ:アクセス権限」をクリックします。

  • ユーザー名:任意の名前
  • AWS 認証情報タイプを選択:アクセスキー - プログラムによるアクセス

「既存のポリシーを直接アタッチ」を選択します。

作成した一覧表示を許可するポリシーを選択し、「次のステップ:タグ」をクリックします。

「次のステップ:確認」をクリックします。

「ユーザーの作成」をクリックします。

「.csv のダウンロード」をクリックし、認証情報を取得します。

Okta のフェデレーション設定

Okta の管理コンソールと AWS マネジメントコンソールからフェデレーションを設定します。
Okta -> AWS -> Okta とコンソールを行き来しますので、閉じないようにご注意ください。

Okta の管理コンソールを開き、Applications -> Applications の順にクリックします。

「Browse App Catalog」をクリックします。

「AWS Account Federation」を検索し、選択します。

「Add」をクリックします。

「Your AWS Login URL」にhttps://console.aws.amazon.com/と入力し、「Next」をクリックします。

「SAML 2.0」を選択します。

「Default Relay State」に次の値をを入力し、「Next」をクリックします。

  • https://ap-northeast-1.console.aws.amazon.com/connect/federate/Connect インスタンス ID
  • Connect インスタンス IDは「Connect インスタンス ARN」に含まれる Connect インスタンス ID に置き換えてください。
# Connect インスタンス ARN の例
arn:aws:connect:ap-northeast-1:123456789012:instance/abcdefgh-1234-4567-8901-123456789012

# Connect インスタンス ID の例
abcdefgh-1234-4567-8901-123456789012

「Identity Provider metadata」を右クリックして、metadata.xmlという名前で保存します。

Okta の管理コンソールは閉じないでください
IAM コンソール を開き、ID プロバイダから「プロバイダを追加」をクリックします。

「プロバイダ名」に任意の名前を入力し、「ファイルを選択」からさきほど保存したmetadata.xmlをアップロードします。

「プロバイダを追加」をクリックします。

作成したプロバイダをクリックします。

ARN をコピーして、テキストエディタなどで保存します。

IAM コンソール を開き、ロールから「ロールを作成」をクリックします。

「SAML 2.0 フェデレーション」を選択

「SAML 2.0 ベースのプロバイダー」から作成したプロバイダを選択します。
「プログラムと AWS マネジメントコンソールへのアクセスを許可する」を選択し、「次へ」をクリックします。

作成した二つのポリシーを選択し、「次へ」をクリックします。

「ロール名」に任意の名前を入力し、「ロールの作成」をクリックします。

Okta の管理コンソールに戻ります。
「Identity Provider ARN」にコピーした ARN を入力し、「Done」をクリックします。

「Provisioning」タブをクリック

「Configure API Integration」をクリックします。

「Enable API Integration」を選択し、「Save」をクリックします。

IAM ユーザの作成時にダウンロードした CSV ファイルから「Access Key」と「Secret Key」を入力し、「Test API Credentials」をクリックします。

「AWS Account Federation was verified successfully!」が表示されることを確認し、「Save」をクリックします。

「Edit」をクリックします。

Create Usersの「Enable」を選択し、「Save」をクリックします。

Okta で Amazon Connect へのログインを設定

「AWS Account Federation」を使用できる Okta のユーザーを設定します。
今回はグループを使用していませんが、複数のユーザーを設定する場合はグループの使用もご検討ください。

「Assignments」タブを選択します。

Assign -> Assign to People の順にクリックします。

追加するユーザーの「Assign」をクリックします。

次の値を指定して「Save and Go Back」をクリックします。

  • Role:作成した IAM ロール
  • SAML User Roles:チェックする

「Assignd」を確認し、「Done」をクリックします。

ログインの動作確認

IP アドレス制限はまだですが、この時点で追加したユーザーのマイアプリに「AWS Account Federation」が追加され、Amazon Connect にログインができるか動作確認を行います。

正常にログインができました。

IP アドレス制限の実施

Okta のセキュリティ設定から許可する IP アドレスのゾーンを作成し、ゾーン外を拒否するルールを設定します。
今回は Okta でログインした全ユーザーの全アプリに適用していますが、アプリ単位にも設定できます。

参考:OktaのアプリケーションでIP制限してみた | DevelopersIO

許可する IP アドレスのゾーンを作成

Okta の管理コンソールを開き、 Security -> Networks の順にクリックします。

Add Zone -> IP Zone の順にクリックします。

次の値を指定して「Save」をクリックします。

  • Zone Name:任意の名前
  • Gateway IPs:許可する IP アドレス

IP アドレス制限のルールを作成

Security -> Global Session Policy の順にクリックします。

「Add rule」をクリックします。

「Rule name」に任意の名前を入力し、「User's IP is」から「Not in zone」を選択します。

さきほど作成した Zone を入力します。

「Access is」から「Denied」を選択し、「Create Rule」をクリックします。

「Default Rule」より上にルールが追加されることを確認します。

実際の挙動

許可された IP アドレスからマイアプリにログインすると、「AWS Account Federation」が表示され

Amazon Connect にログインできます。


許可されていない IP アドレスからログインすると、警告が表示され

ログイン画面に戻るだけのページが表示されます。

参考資料

最後に

この記事が誰かのお役にたてば幸いです。

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。