OktaのSAML2.0を使ったAWSコンソールへのフェデレーションをやってみた

OktaのSAML2.0を使ったAWSコンソールへのフェデレーションを試してみました。oktaコンソールからログインなしにAWSコンソールに遷移できます。
2022.01.01

OktaのSAML2.0を使ったAWSコンソールへのフェデレーションを試してみました。検証にはoktaのトライアルライセンスを利用しました。

フェデレーションの結果

フェデレーションを設定すると、OktaコンソールのマイアプリにAWS Account Federationのアイコンが表示されます。

アイコンを選択すると、サイン中の旨が表示されたのちにAWSコンソールが表示されます。

AWS Account Federationの追加

設定方法を解説します。Okta Adminコンソールから、Applicationを追加します。Applications>Application>Browse App Catalogを選びます。

AWS Account Federationを検索し、Addします。

一般設定は初期値のまま進みます。

サインインオプションにSAML 2.0を選択します。

Identity Provider metadataのリンクを右クリックし、metadata.xmlとして保存します。

Doneを選択します。

IDプロパイダをAWSコンソールで設定

AWS側で設定を行います。IAMコンソール>IDプロパイダ>プロパイダを追加を選びます。プロパイダのタイプにSAML、メタデータファイルはOktaコンソールからダウンロードしたファイルを指定します。

IDプロパイダを選ぶと、プロバイダARNを確認できます。後ほど利用します。

OktaIDプロパイダを信頼するIAMロールの作成

ユーザーがAWSコンソールにフェデレーションした際に使われるIAMロールを作成します。今回はReadOnlyAccessポリシーを割り当てたIAMロールを作成しますので、ユーザーはReadOnlyAccess権限でAWSコンソールに接続できることになります。

IAMコンソール>ロール>ロールを作成を選びます。信頼されたエンティティはSAML2.0フェデレーション、SAMLプロパイダーに作成したものを指定し、「プログラムによるアクセスと AWS マネジメントコンソールによるアクセスを許可する」を選びます。ポリシーにはReadOnlyAccessを割り当てました。ロール名はReadOnlyAccess-Oktaとしました。

IAMロールを選択し、信頼関係>信頼関係の編集を選びます。以下のようにIDプロパイダのArnからのフェデレーションを許可するポリシーになっています。今回はIAMロールを新規作成しましたが、既存のIAMロールに許可したい場合はポリシーを手動で設定してもOKです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "<COPY & PASTE SAML ARN VALUE HERE>"
      },
      "Action": "sts:AssumeRoleWithSAML",
      "Condition": {
        "StringEquals": {
          "SAML:aud": "https://signin.aws.amazon.com/saml"
        }
      }
    }
  ]
}

OktaがIAMロールを取得するためのAWS APIアクセスキーを作成

Oktaがフェデレーションに利用するためのIAMロールを取得するために、IAMユーザーとキーを作成します。

以下の内容でIAMポリシーを作成します。

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

IAMユーザーを作成します。プログラムによるアクセスを選択し、先程作成したポリシーを設定します。キーのCSCVファイルをダウンロードしておきます。

Oktaでフェデレーションアプリを設定

OktaコンソールからAWS Account Federationアプリ>Sign Onタブ>Editを選びます。

Identity Provider ARNにIAMコンソールのIDプロバイダのArnを入力します。

Join all rolesと、Use Group Mappingはオフにし、Saveします。

OktaコンソールからAWS Account Federationアプリ>Provisioning>Configure API Integrationを選び、Enable API integrationを有効にします。キーを入力し、Test API Credentialsを実行し成功したらセーブします。

Provisioning>To AppでCreate UsersとUpdate User Attributesを有効にし、Saveします。

フェデレーションアプリにユーザーまたはグループを割り当てます。Assignments>Assignを選択します。

今回はユーザー単位で割り当てます。

フェデレーションに使うIAMロールを選択します。作成しておいたReadOnlyAccess-Oktaを選びます。

Assignmentsに表示されるユーザーとグループがフェデレーションアプリを利用できます。

ユーザーのOktaコンソールにフェデレーションアプリが表示され、AWSコンソールに接続できれば完了です。

フェデレーション後の詳細

abeユーザーでReadOnlyAccess-Oktaにフェデレーションしました。AWSコンソールの右上からその旨を確認できます。

CloudTrailには、IAMロールとOktaユーザー名が表示されます。

おわりに

OktaのSAML2.0を使ったAWSコンソールへのフェデレーションを紹介しました。実運用の際はReadOnly用のアプリ、設定変更用のアプリ、管理者向けのアプリなど複数のアプリを登録しておくと良いと思います。

追記 1ユーザーに複数のIAMロールを割り当てる記事を書きました。

Okta+AWSのSAMLによるフェデレーションで複数のIAMロールを使う方法

参考