AWS EC2 Amazon LinuxでPythonのSAML2サービスプロバイダライブラリpysaml2のexampleを実行するサンプル

AWS,EC2,Programming,Python

AWS Lambdaにおいてプログラム言語Pythonが使用出来るようになり、今まで世界的には広く使われていた一方で日本ではあまり使用されて来なかったPythonによる開発が活発化するような気がする今日このごろです。

AWS Lambda Pythonを使用して実現できることはサーバレスシステム(完全インフラマネージドシステム)をはじめ様々ですが、AWS Lambda Pythonと親和性の高い認証システムを構築することを考えた際にPythonで構築されたオープンソースの認証系ライブラリを選択することは今後多くなるのかもしれません。

認証の方式もOpenID Connect、SAML2と様々ですが今回はPythonのSAML2のライブラリpysaml2のexampleをAmazon Linux上で実行する方法について備忘録として記載したいと思います。

Pythonで使用出来るSAML2サービスプロバイダのライブラリpysaml2のexampleのサンプル実行例

pysaml2の必要モジュールのインストール

yumでLinuxの必要モジュールをインストールし、pipでpythonモジュールをインストール

[root@localhost ~]# yum install -y gcc make libffi-devel openssl-devel libxml2-devel libtool-ltdl libtool-ltdl-devel openldap-devel
[root@localhost ~]# pip install pip --upgrade
[root@localhost ~]# pip install pysaml2 cherrypy python-ldap mako

pysaml2に必要なyumで取得できないモジュールのインストール

xmlsec1、xmlsec1-opensslは現時点でAmazon Linuxのyumリポジトリにもepelのリポジトリにも存在しないため、CentOS6系に該当するモジュールをダウンロードしインストールする

[root@localhost ~]# curl -L -O ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/bdauvergne:/rhel6/CentOS_CentOS-6/x86_64/xmlsec1-1.2.16-2.2.x86_64.rpm
[root@localhost ~]# rpm -ivh xmlsec1-1.2.16-2.2.x86_64.rpm
[root@localhost ~]# curl -L -O ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/bdauvergne:/rhel6/CentOS_CentOS-6/x86_64/xmlsec1-openssl-1.2.16-2.2.x86_64.rpm
[root@localhost ~]# rpm -ivh xmlsec1-openssl-1.2.16-2.2.x86_64.rpm

xmlsec1、xmlsec1-opensslはインストールするだけではAmazon Linuxにライブラリとして読み込まれないため、/usr/lib64/に移動しシンボリックリンクを貼る

[root@localhost ~]# cd /usr/lib64/
[root@localhost lib64]# ln -s libxmlsec1.so.1 libxmlsec1.so
[root@localhost lib64]# ln -s libxmlsec1-openssl.so.1 libxmlsec1-openssl.so

pysaml2本体のダウンロードとセットアップ

githubからpysaml2本体をダウンロードし、適当なところへ展開する

[root@localhost lib64]# cd ~
[root@localhost ~]# curl -L -O https://github.com/rohe/pysaml2/archive/master.zip
[root@localhost ~]# unzip master.zip

exampleを動作させるため該当ディレクトリへ移動する。
そのまま実行するとAmazon Linuxの場合はエラーが発生するため、sp-wsgi配下のsp.pyについて下記のように該当箇所をコメントアウトする。

[root@localhost ~]# cd pysaml2-master/example
[root@localhost example]# vim sp-wsgi/sp.py
#173行目付近の下記の行をコメントアウト
#cookie = cookie.decode("UTF-8")

exampleを起動させる。

[root@localhost example]# ./all.sh start
Reference: Tech Blog citing related sources