AWSのSSOとプロビジョニングについて
OktaでAWSコンソールにSSOとプロビジョニングする方法を記述します。
ユーザープロビジョニングというとIDPでアカウントを作成するとSP(service provider)側にもアカウントが作成され同期されるという認識でしたが、AWSにおいてはSSOするときにそのセッションにロールを付与し、仮想のIAMユーザーを作成し、接続させることをプロビジョニングとしています(と私は思っています)。SSOするIAMユーザーは実際に作成されることはありませんので、セッションが切れればIAMも情報も消えます。当然、IDPでアカウント削除した後、IAMユーザーの削除し忘れも発生しません。
因みにAWS CloudTrailに証跡は残ります。
前提
- AWSアカウント作成済み(IAM ユーザー、ロール、ポリシー、IDプロバイダーの作成権限が必要です。)
- Oktaアカウント作成済み
Oktaにアプリケーションを追加
Oktaの管理画面から「Applications」>「Applications」>「Browse App Catalog」をクリックします。
検索ボックスに「aws」などと入力し「AWS Account Federation」を選択します。
「Add」をクリックします。
そのまま「Next」をクリックします。「Application Label」や「Login URL」はあとで変更可能です。
「SAML 2.0」を選択します。
その他はとりあえずそのままで「Done」をクリックします。
これでOktaにアプリケーションが作成されました。
AWSのIDプロバイダ登録に使用するためリンク先をxmlでダウンロードしておきます。
「Sign On」タブ > 「Identity Provider metadata」
AWS IAMリソース作成
IDプロバイダ作成
「IAM」 > 「アクセス管理」 > 「IDプロバイダ」 > 「プロバイダを追加」をクリックします。
「SAML」を選択
「プロバイダ名」に任意の名前(e.g. Okta)
「メタデータドキュメント」にOktaで先ほどダウンロードしたXMLメタデータをアップロードします。
「プロバイダを追加」をクリックします。
IDプロバイダにOktaが作成されました。
IAMロール作成
SSOした時の権限付与するロールを作成します。
「IAM」 > 「アクセス管理」 > 「ロール」 > 「ロールを作成」をクリックします。
「SAML 2.0 フェデレーション」を選択
「SAMLプロバイダー」に先ほど作成した__Okta__を選択
「プログラムによるアクセスと AWS マネジメントコンソールによるアクセスを許可する」を選択
「次のステップ:アクセス権限」をクリックします。
「次のステップ:タグ」をクリックします。
「次のステップ:確認」をクリックします。
任意の名前(e.g. OktaFederatedRole)を設定し、「ロールの作成」をクリックします。
IAMユーザー作成
OktaがAWSのロールをAPI参照するためのIAMユーザーを作成します。
「IAM」 > 「アクセス管理」 > 「ユーザー」 > 「ユーザーを追加」をクリックします。
「ユーザー名」に任意の名前(e.g. OktaSSOuser)を設定
「アクセスキー - プログラムによるアクセス」にチェック
「次のステップ:アクセス権限」をクリックします。
「既存のポリシーを直接アタッチ」を選択し、「ポリシーの作成」をクリックします。
ポリシー作成タブが開くので、JSONを以下のJSONで上書きします。「次のステップ:タグ」をクリックします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListRoles",
"iam:ListAccountAliases"
],
"Resource": "*"
}
]
}
「次のステップ:確認」をクリックします。
「名前」に任意の名前(e.g. OktaSSOCommandPolicy)を設定し、「ポリシーの作成」をクリックします。
ユーザー作成画面に戻り、作成したポリシーにチェックし「次のステップ:タグ」をクリックします。
「次のステップ:確認」をクリックします。
「ユーザーの作成」をクリックします。
「.csvのダウンロード」をクリックし、アクセスキーIDとシークレットアクセスキーをダウンロードします。
Okta SSO/プロビジョニング設定
SSO設定
AWSで先ほど作成したIDプロバイダのOktaのARNをコピーします。
Oktaのアプリ詳細画面で「Sign On」タブを開き、「Edit」をクリックします。
「Advanced Sign-on Settings」の「Identity Provider ARN (Required only for SAML SSO)」に先ほどのARNを設定し、「Save」をクリックします。
プロビジョニング設定
Oktaのアプリ詳細画面で「Provisioning」タブを開き、「Configure API Integration」をクリックします。
「Enable API integration」にチェックを入れ、「Access Key」「Secret Key」は先ほど作成したAWSユーザーのキーを設定します。「Save」をクリックします。
「Save」後、接続テストのようなものが行われ、問題なければ以下のような画面になります。「Edit」をクリックします。
「Create Users」と「Update User Attributes」にチェックをし「Save」をクリックします。
ユーザーのアサイン
Oktaのアプリ詳細画面で「Assignments」タブを開き、「Assign」 > 「Assign to People」をクリックします。
モーダルウィンドウが開くので、アサインしたいユーザーの「Assing」をクリックします。
「SAML User Roles」で先ほど作成したロール(e.g. OktaFederatedRole)にチェックを付け、「Save and Go Back」をクリックします。
「Done」をクリックします。
これでAWSコンソールにSSOできるようになります。
ログインするユーザーはIAMユーザーとしては追加されません。ログイン名はOktaFederatedRole/Oktaのname属性となります。AWSへのセッションにロールを紐付けてアクセスするイメージです。
Oktaの公式手順書
今回のSSOの設定手順はアプリの詳細画面から表示できます。「View Setup Instructions」をクリックすると、英語ですが、AWS側の設定も記述された丁寧な手順書が確認できます。この記事はこの手順書に沿っています。