Help us understand the problem. What is going on with this article?

OpenAMのSAML認証でAWSへログインするまでの設定

More than 1 year has passed since last update.

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)

設定オプション

image.png

  • 新しい設定の作成 をクリック

image.png

  • I accept the license agreement をチェックし、Continue をクリック

一般

image.png

  • デフォルトのAdministratorユーザ(amAdmin)のパスワードを設定し次へをクリック

サーバー設定

image.png

  • サーバーURL、Cookieドメイン、プラットフォームロケール、設定ディレクトリを指定しますが、デフォルトでも問題ないので、デフォルトで進めます。次へをクリック

設定データストア設定

image.png

  • デフォルトのまま最初のインスタンスを選択したまま、設定ストアの詳細を設定
  • 設定データストアは OpenAM のまま、ポートを 50389、管理者ポートを 4444、JMXポートを 1689 と指定します。
  • 暗号化鍵とルートサフィックスはデフォルトのままです。次へをクリック

ユーザーデータストア設定

image.png

  • OpenAMのユーザーデータストア を選択し、次へをクリック

サイト設定

image.png

  • ロードバランサは今の段階では利用しないので、いいえのままで。次へをクリック

デフォルトのポリシーエージェントユーザー

image.png

  • デフォルトのポリシーエージェント(UrlAccessAgent)のパスワードを設定し次へをクリック

設定ツールの概要と詳細

image.png

  • 設定の作成をクリック

image.png

  • 設定完了後、ログインへ進む

image.png

  • ユーザとパスワードは、デフォルトのAdministratorユーザ(amAdmin)と設定したパスワードで。

SAML認証機能の設定

IDP(IDプロバイダ)の設定

image.png

  • Top Level Realm をクリック

image.png

  • Create SAMLv2 Providers をクリック

image.png

  • Create Hosted Identity Provider をクリック

image.png

  • メタデータ
    • 名前は任意ですが、ホスト名を入力
    • 署名鍵はテスト目的なのでデフォルトの test
  • トラストサークル
    • 新しいトラストサークルの名称は任意ですが、 aws と入力
  • 設定をクリック

SP(サービスプロバイダ)の設定

image.png

  • IDPの設定を完了すると、そのままSPの登録へ誘導する画面が表示されます。サービスプロバイダを登録するをクリック

image.png

  • メタデータファイルは AWSのURLから取得させます。URLを選択し、URLに https://signin.aws.amazon.com/static/saml-metadata.xml を入力
  • 設定をクリック

サービスプロバイダ側(AWS)の設定

プロバイダの設定

サービスプロバイダにIdPの登録を行います

image.png

  • AWSマネージドコンソールにログインし、IAM > ID プロバイダー で プロバイダの作成をクリック
    • プロバイダーのタイプ: SAML
    • プロバイダ名: OpenAM(任意)
    • メタデータドキュメント: http://${DOMAIN}/openam/saml2/jsp/exportmetadata.jsp からメタデータをダウンロードし、ファイル選択で指定
  • 次のステップをクリック

image.png

  • 登録内容を確認して、作成をクリック

ロールの設定

SSOでログインした際のユーザに付与される権限を設定します。

image.png

  • IAM > ロール で ロールの作成 をクリック
    • 信頼されたエンティティの種類を選択: SAML2.0フェデレーション
    • SAML2.0プロバイダを選択:
      • SAMLプロバイダー: OpenAM(上記で設定したプロバイダ名)
      • プログラムによるアクセスとAWSマネジメントコンソールによるアクセスを許可するを選択
      • 属性、値は自動入力されるのでそのままで
  • 次のステップ:アクセス権限をクリック

image.png

  • どの権限を付与するかを指定します。AdinistratorAccess を設定していますが、特に何も設定しなくても、マネージドコンソールへログインすることは可能なので任意で。
  • 次のステップ:タグをクリック

image.png

  • タグも必要であれば設定。次のステップ:確認をクリック

image.png

  • 任意のロール名を入力し、ロールを作成をクリック。サービスプロバイダの設定は以上です。

SAML連携の設定

連携の設定

image.png

image.png

  • OpenAMにアドミニストレータでログインします。
  • FEDERAION > エンティティープロバイダ > urn:amazon:webservices > 表明処理
  • 属性マップに以下の値を追加
    • https://aws.amazon.com/SAML/Attributes/Role=employeeNumber
    • https://aws.amazon.com/SAML/Attributes/RoleSessionName=uid

この値ですが、AWSのメタデータを見てみましょう。

saml-metadata.xml
<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連携するユーザの作成

image.png

  • TOP LEVEL REALM > Subjects > 新規 でユーザ情報を入力し、了解 をクリック

image.png

  • ユーザ情報の編集で先ほどの連携する情報を設定します。
    • 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を表示させる

image.png

  • 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 (拾ってきた。任意)
  • 追加をクリック

image.png

  • Subjects > 対象ユーザ > サービス > ダッシュボード
  • ユーザー属性に AWS Console を追加し、保存をクリック
  • 対象ユーザでログインしダッシュボードを開くと以下のように表示されます。

image.png

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした