OpenAMの環境構築とSAML認証機能を利用するための初期設定。
いくつかのページで書かれてはいるが、備忘録として。
OpenAMの環境構築
環境構築はCloudFormationのテンプレートにまとめました。
前提として
- aws-cli がインストールされ、プロファイルの設定がされていること
- HostedZoneに ドメイン が登録されていること
- 対象のRegionに キーペア が作成されていること
- 実行するIAMユーザに十分な権限があること
- OpenAMは事前にForgeRockからダウンロードします(要アカウント登録)
- CloudFormation でwarファイルをダウンロードするため、ダウンロード可能な場所に配置して下さい
- 以下の手順でS3へパブリックな環境を構築することも可能です
# Warを配置するS3バケットを作成
aws cloudformation create-stack \
--stack-name public-bucket \
--template-body file://public-bucket-template.yml
# バケット名を取得
BUCKET_NAME=$(aws cloudformation describe-stacks \
--stack-name public-bucket \
--query 'Stacks[].Outputs[?OutputKey==`BucketName`].OutputValue' \
--output text)
echo ${BUCKET_NAME}
#
# OpenAMのwarファイルをS3にアップロード
aws s3 cp OpenAM-13.0.0.war s3://${BUCKET_NAME}/
# アップロードしたWarファイルのURIを取得
DONWLOD_URI=$(aws cloudformation describe-stacks \
--stack-name public-bucket \
--query 'Stacks[].Outputs[?OutputKey==`DownloadUri`].OutputValue' \
--output text)
echo ${DONWLOD_URI}
#
準備が出来たら環境変数を指定
# 例)
KEY_NAME=openam-key
HOSTED_ZONE_NAME=example.com.
OPENAM_WAR_URI=${DONWLOD_URI}/OpenAM-13.0.0.war
環境構築
aws cloudformation create-stack \
--stack-name openam \
--capabilities CAPABILITY_IAM \
--parameters ParameterKey=KeyName,ParameterValue=${KEY_NAME} \
ParameterKey=HostedZoneName,ParameterValue=${HOSTED_ZONE_NAME} \
ParameterKey=OpenamWarUri,ParameterValue=${OPENAM_WAR_URI} \
--template-body file://openam-template.yml
スタックの実行が完了したら以下でURLを取得できます。
ブラウザでアクセスし、OpenAMの設定を行います。
DOMAIN=$(aws cloudformation describe-stacks \
--stack-name openam \
--query 'Stacks[].Outputs[?OutputKey==`PublicDns`].OutputValue' \
--output text)
echo http://${DOMAIN}/openam
#
OpenAMのSAML認証機能設定(AWS)
設定オプション
-
新しい設定の作成
をクリック
-
I accept the license agreement
をチェックし、Continue
をクリック
一般
- デフォルトのAdministratorユーザ(
amAdmin
)のパスワードを設定し次へ
をクリック
サーバー設定
- サーバーURL、Cookieドメイン、プラットフォームロケール、設定ディレクトリを指定しますが、デフォルトでも問題ないので、デフォルトで進めます。
次へ
をクリック
設定データストア設定
- デフォルトのまま
最初のインスタンス
を選択したまま、設定ストアの詳細を設定 - 設定データストアは
OpenAM
のまま、ポートを50389
、管理者ポートを4444
、JMXポートを1689
と指定します。 - 暗号化鍵とルートサフィックスはデフォルトのままです。
次へ
をクリック
ユーザーデータストア設定
-
OpenAMのユーザーデータストア
を選択し、次へ
をクリック
サイト設定
- ロードバランサは今の段階では利用しないので、
いいえ
のままで。次へ
をクリック
デフォルトのポリシーエージェントユーザー
- デフォルトのポリシーエージェント(
UrlAccessAgent
)のパスワードを設定し次へ
をクリック
設定ツールの概要と詳細
-
設定の作成
をクリック
- 設定完了後、
ログインへ進む
。
- ユーザとパスワードは、デフォルトのAdministratorユーザ(
amAdmin
)と設定したパスワードで。
SAML認証機能の設定
IDP(IDプロバイダ)の設定
-
Top Level Realm
をクリック
-
Create SAMLv2 Providers
をクリック
-
Create Hosted Identity Provider
をクリック
- メタデータ
- 名前は任意ですが、ホスト名を入力
- 署名鍵はテスト目的なのでデフォルトの
test
で
- トラストサークル
- 新しいトラストサークルの名称は任意ですが、
aws
と入力
- 新しいトラストサークルの名称は任意ですが、
-
設定
をクリック
SP(サービスプロバイダ)の設定
- IDPの設定を完了すると、そのままSPの登録へ誘導する画面が表示されます。
サービスプロバイダを登録する
をクリック
- メタデータファイルは AWSのURLから取得させます。
URL
を選択し、URLにhttps://signin.aws.amazon.com/static/saml-metadata.xml
を入力 -
設定
をクリック
サービスプロバイダ側(AWS)の設定
プロバイダの設定
サービスプロバイダにIdPの登録を行います
- AWSマネージドコンソールにログインし、IAM > ID プロバイダー で
プロバイダの作成
をクリック- プロバイダーのタイプ: SAML
- プロバイダ名: OpenAM(任意)
- メタデータドキュメント:
http://${DOMAIN}/openam/saml2/jsp/exportmetadata.jsp
からメタデータをダウンロードし、ファイル選択で指定
-
次のステップ
をクリック
- 登録内容を確認して、
作成
をクリック
ロールの設定
SSOでログインした際のユーザに付与される権限を設定します。
- IAM > ロール で
ロールの作成
をクリック- 信頼されたエンティティの種類を選択: SAML2.0フェデレーション
- SAML2.0プロバイダを選択:
- SAMLプロバイダー: OpenAM(上記で設定したプロバイダ名)
-
プログラムによるアクセスとAWSマネジメントコンソールによるアクセスを許可する
を選択 - 属性、値は自動入力されるのでそのままで
-
次のステップ:アクセス権限
をクリック
- どの権限を付与するかを指定します。
AdinistratorAccess
を設定していますが、特に何も設定しなくても、マネージドコンソールへログインすることは可能なので任意で。 -
次のステップ:タグ
をクリック
- タグも必要であれば設定。
次のステップ:確認
をクリック
- 任意のロール名を入力し、
ロールを作成
をクリック。サービスプロバイダの設定は以上です。
SAML連携の設定
連携の設定
- OpenAMにアドミニストレータでログインします。
- FEDERAION > エンティティープロバイダ >
urn:amazon:webservices
> 表明処理 - 属性マップに以下の値を追加
https://aws.amazon.com/SAML/Attributes/Role=employeeNumber
https://aws.amazon.com/SAML/Attributes/RoleSessionName=uid
この値ですが、AWSのメタデータを見てみましょう。
<AttributeConsumingService index="1">
<ServiceName xml:lang="en">AWS Management Console Single Sign-On</ServiceName>
<RequestedAttribute isRequired="true" Name="https://aws.amazon.com/SAML/Attributes/Role" FriendlyName="RoleEntitlement"/>
<RequestedAttribute isRequired="true" Name="https://aws.amazon.com/SAML/Attributes/RoleSessionName" FriendlyName="RoleSessionName"/>
</AttributeConsumingService>
メタデータの一部を抜粋していますが、このメタデータを見ると、<RequestedAttribute isRequired="true">
となって項目があります。
これはSAMLリクエストに https://aws.amazon.com/SAML/Attributes/Role
および https://aws.amazon.com/SAML/Attributes/RoleSessionName
を渡す必要があることを意味します。
設定内容は「認証レスポンスの SAML アサーションを設定する」を確認してみてください。
この設定で、RoleにemployeeNumber(社員番号)?と思われた方もいると思いますが、実際はOpenAMのユーザ情報のemployeeNumberにRole情報を設定してあげることで、その値(社員番号)をRoleとしてSAMLレスポンスとして返すようにしています。
SAML連携するユーザの作成
- TOP LEVEL REALM > Subjects > 新規 でユーザ情報を入力し、
了解
をクリック
- ユーザ情報の編集で先ほどの連携する情報を設定します。
-
uid
: ユーザ作成時のIDになるので設定は不要 -
employeeNumber
: ロールARN,プロバイダARNを設定(例: arn:aws:iam::123456789012:role/openam-user-role,arn:aws:iam::123456789012:saml-provider/OpenAM)
-
- 設定したら
保存
をクリック
AWSへOpenAMユーザでログイン
設定は以上になります。
${OPENAM_URL}/saml2/jsp/idpSSOInit.jsp?metaAlias=/idp&spEntityID=urn:amazon:webservices
をブラウザから叩くとAWSへログイン出来ることが確認できます。(OpenAMへ未ログインの場合は、OpenAMのログイン画面を挟み、ログインするとAWSのポータル画面へリダイレクトされます。)
以下は別に必須ではありません。次の設定をすれば、OpenAMへログインしOpenAMのポータル画面からAWSへログインすることも可能になります。
必要であれば設定します。
参考: OpenAMのダッシュボードにAWSマネジメントコンソールを表示させる方法
ダッシュボードにAWS Consoleを表示させる
- CONFIGURATION > グローバル > ダッシュボード > セカンダリ設定インスタンス > 新規
- 名前: AWS Console (任意)
- Dashboard Class Name: SAML2ApplicationClass
- Dashboard Display Name: AWS Management Console
- Dashboard Login:
${OPENAM_URL}/saml2/jsp/idpSSOInit.jsp?metaAlias=/idp&spEntityID=urn:amazon:webservices
(**${OPENAM_URL}**は自身の環境に合わせて) - Dashboard Name: AWS Management Console(任意)
- ICF Identifier:
- dashboard Icom:
https://pbs.twimg.com/profile_images/917497289710505984/pR-1qA0D_400x400.jpg
(拾ってきた。任意)
-
追加
をクリック
- Subjects > 対象ユーザ > サービス > ダッシュボード
- ユーザー属性に
AWS Console
を追加し、保存
をクリック - 対象ユーザでログインしダッシュボードを開くと以下のように表示されます。
以上