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=employeeNumberhttps://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を追加し、保存をクリック - 対象ユーザでログインしダッシュボードを開くと以下のように表示されます。
 
以上





























