Amazon Connect の緊急管理者ログイン(Emergency access)を制限してみる

2023.09.21

こんにちは、AWS事業本部の平木です!

皆さんは Amazon Connect を使用していますか?

クラウド型コンタクトセンターサービスである Amazon Connect は、
Amazon Connect 用のコンソールがあり、AWS アカウントの認証情報とは別の認証情報を使用し、
Amazon Connect コンソールへログインできます。

また、緊急時に AWS アカウントの認証情報を使用して Amazon Connect コンソールへログインできる
緊急管理者ログイン(Emergency access) の機能があります。

今回は、この Emergency access の実行を制限してみたいと思います。

いきなり結論

Emergency access の実行を制限するには、
IAMポリシーにてconnect:GetFederationTokensのアクションを許可または拒否することで、
Emergency access の操作を制限できます。

Emergency access とは

Emergency access とは冒頭でもご説明しました通り、
緊急時に AWS アカウントの認証情報を使用して Amazon Connect コンソールへログインできる機能です。

通常、 Amazon Connect コンソールへログインするには、
https://{instance name}.my.connect.aws/
の形式のURLから下記のようなログイン画面より各ユーザの認証情報を使用してアクセスします。

しかし下記のようなケースの場合、 Amazon Connect コンソールへのアクセスに問題が発生します。

  • Amazon Connect 管理者パスワードを忘れてしまい、リセットする他の Amazon Connect 管理者がいない場合。
  • 誰かが誤って Amazon Connect 管理者 セキュリティプロファイルを削除した場合。

このような場合の解決法として利用する機能が Emergency access です。

AWS コンソール画面にて Amazon Connect の対象インスタンスの概要を確認すると、
Emergency access という項目があることが分かります。
下のLog in for emergency accessをクリックするとAWS アカウントの認証情報を使用して Amazon Connect コンソールへログインできます。

Emergency access に使用される API を確認する

まずどの API が使用されているか確認するため ReadOnly 権限でアクセスを試みます。

アクセスを試みると、下記のようなエラーメッセージが確認できました。

(原文)
アクセスが拒否されました
Your access is being denied because you do not have full permission to perform the federation. Please find out the required permission for federation in the document Required permissions for using custom IAM policies to manage access to the Amazon Connect console - Amazon Connect. After adding the permission listed in the document, please retry the request.

If the problem persists, please contact サポート. We apologize for the inconvenience. Click here to visit our home page.

(日本語訳 Deepl翻訳)
アクセスが拒否されました
フェデレーションを実行するための完全な権限がないため、アクセスが拒否されています。フェデレーションに必要なパーミッションは、ドキュメント「Required permissions for using custom IAM policies to manage access to the Amazon Connect console」でご確認ください。ドキュメントに記載されている権限を追加した後、リクエストを再試行してください。

問題が解決しない場合は、サポートにお問い合わせください。ご不便をおかけして申し訳ございません。ホームページはこちら

このようなエラーからフェデレーションに関する権限がないことが分かります。
ドキュメントへの誘導もあるため確認すると、ドキュメントの最下部に下記記載があることが分かります。

したがって、IAMポリシーにてconnect:GetFederationTokensのアクションを許可または拒否することで制御できます。

Appendix

特定の IAM ロールを使用したセッションまたは、使用する IAM ユーザによって
Emergency access の実行可否を決めたい場合には、Conditionを使用することで柔軟に制御可能です。

特定の IAM ロールを使用したセッションに制限したい例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyEmergencyAccess",
            "Effect": "Deny",
            "Action": "connect:GetFederationTokens",
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "aws:userid": "AROAxxxxxxxxxxxxxxVAI:*"
                }
            }
        }
    ]
}

aws:useridを確認するには下記コマンドの結果から分かります。

aws iam get-role --role-name {IAMロール名}

特定の IAM ユーザを使用したセッションに制限したい例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyEmergencyAccess",
            "Effect": "Deny",
            "Action": "connect:GetFederationTokens",
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "aws:username": "{IAMユーザ名}"
                }
            }
        }
    ]
}

参考

終わりに

今回は、Amazon Connect の緊急管理者ログイン(Emergency access)を制限してみました!

万が一の緊急のアクセス経路として機能があるのは助かる反面、
Amazon Connect コンソールの認証情報をスキップできることから、AWSアカウント側でも制御しておきたいと思われるシチュエーションもあるかもしれません。

Emergency access は、緊急時に使用するもののためここへ制限をかけてしまう場合、運用上支障をきたす可能性があります。
実環境へ適用する場合には、慎重に検討および検証をし、実装してください。

この記事がどなたかの役に立てば嬉しいです。