0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloudflare Zero Trust で SaaS アプリ登録をテストする (SimpleSAMLphp)

Last updated at Posted at 2022-07-21

概要

大まかな流れは、以下の記事と同様です。

今回は SimpleSAMLphp を使います。

Cloudflare Zero Trust で SaaS アプリ登録をテストする (SAML Test Service Provider) - Qiita

SimpleSAMLphp インストール

CentOS を使います。

$ cat /etc/redhat-release 
CentOS Stream release 8

事前に必要なパッケージをインストールし、サービスを起動します。

sudo dnf install -y httpd php php-xml php-json php-mbstring jq wget
sudo systemctl --now enable httpd
sudo systemctl --now enable php-fpm

SimpleSAMLphp をダウンロードします。

curl -s https://api.github.com/repos/simplesamlphp/simplesamlphp/releases/latest | jq '.assets[] | select(.name|match(".tar.gz$")) | .browser_download_url' | tr -d \" |  wget -qi -

ダウンロードしたファイルを確認します。

$ ls
simplesamlphp-1.19.6.tar.gz

ファイルを解凍し、中身を /var/www/simplesamlphp にコピーします。

tar xvzf simplesamlphp-1.19.6.tar.gz
sudo mv simplesamlphp-1.19.6/ /var/www/simplesamlphp

以下のように設定ファイルを変更します。

example.com は、自身でホストするドメインに変更してください。

sed -i "
  s/'auth.adminpassword' => '123'/'auth.adminpassword' => 'secret'/;
  s/'enable.saml20-idp' => false/'enable.saml20-idp' => true/;
  s/'baseurlpath' => 'simplesaml\/'/'baseurlpath' => 'https:\/\/simplesamlphp.example.com\/simplesaml\/'/;
  s/'language.default' => 'en'/'language.default' => 'ja'/;
  " /var/www/simplesamlphp/config/config.php

SP(サービスプロバイダ)の設定を以下のように変更します。

example.com<org_name> は、環境に合わせて変更してください。

sed -i "
  s/'entityID' => null/'entityID' => 'https:\/\/simplesamlphp.example.com'/;
  s/'idp' => null/'idp' => 'https:\/\/<org_name>.cloudflareaccess.com'/;
  s/'discoURL' => null/'RelayState' => 'https:\/\/simplesamlphp.example.com\/simplesaml\/module.php\/core\/authenticate.php\?as=default-sp'/;
  " /var/www/simplesamlphp/config/authsources.php

httpd に SimpleSAMLphp 用の設定ファイルを追加します。

cat << EOS | sudo tee /etc/httpd/conf.d/simplesamlphp.conf
Alias /simplesaml /var/www/simplesamlphp/www

<Directory /var/www/simplesamlphp/www>
   Require all granted
</Directory>
EOS

httpd を再起動し、SELinux を一時的に無効化します。

sudo systemctl restart httpd
sudo setenforce 0

Cloudflare Tunnel インストール

以下のドキュメントを参考にセットアップします。

Set up your first tunnel · Cloudflare Zero Trust docs

image-20220722005638629

セットアップが完了すると、https://simplesamlphp.example.com/simplesaml にアクセスできます。
example.com が Cloudflare でホストされている必要があります。)

image-20220603230741235

Cloudflare Access ポリシー作成

https://simplesamlphp.example.com/simplesaml/module.php/saml/sp/metadata.php/default-sp?output=xhtml から確認できる SP メタデータを入力します。

image-20220722010338432

Cloudflare Access に SimpleSAMLphp を SaaS として登録します。

  • Entity ID = https://simplesamlphp.example.com
  • ACS URL = https://simplesamlphp.example.com/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp

image-20220722010559719

SP (SimpleSAMLphp) に IdP (Cloudflare Access) を登録

Cloudflare Access ポリシー作成後、SP (SimpleSAMLphp) に IdP (Cloudflare Access) を登録するための情報が得られます。

  • SSO endpoint
  • Public key
  • Access Entity ID or Issuer

image-20220722010854046

IdPメタデータ作成ツール https://www.samltool.com/idp_metadata.php に入力し、生成された XML をコピーします。

image-20220603004101777
image-20220603004243939

https://simplesamlphp.example.com/simplesaml/admin/metadata-converter.php から、生成した XML を PHP ファイルで登録可能なメタデータに変換し、以下のような内容で保存します。

vi /var/www/simplesamlphp/metadata/saml20-idp-remote.php
saml20-idp-remote.php
$metadata['https://<org_name>.cloudflareaccess.com'] = [
    'entityid' => 'https://<org_name>.cloudflareaccess.com',
    'contacts' => [],
    'metadata-set' => 'saml20-idp-remote',
    # 'expire' => 1658590113, 後で失効しないようにコメントアウトしておきます。
    'SingleSignOnService' => [
        [
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://<org_name>.cloudflareaccess.com/cdn-cgi/access/sso/saml/xxx',
        ],
    ],
    'SingleLogoutService' => [
        [
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://<org_name>.cloudflareaccess.com/cdn-cgi/access/logout',
        ],
    ],
    'ArtifactResolutionService' => [],
    'NameIDFormats' => [
        'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
    ],
    'keys' => [
        [
            'encryption' => false,
            'signing' => true,
            'type' => 'X509Certificate',
            'X509Certificate' => 'xxx',
        ],
        [
            'encryption' => true,
            'signing' => false,
            'type' => 'X509Certificate',
            'X509Certificate' => 'xxx',
        ],
    ],
];

その後、https://simplesamlphp.example.com/simplesaml/module.php/core/frontpage_federation.php から「SAML 2.0 IdP Metadata (Trusted)」として確認できます。

image-20220722011853180

認証テスト

https://simplesamlphp.example.com/simplesaml/module.php/core/frontpage_auth.php から認証テストをおこなえます。

image-20220722000334403

default-sp を選択します。

image-20220722000657323

IdP (Cloudflare Access) にリダイレクトされます。

(SP から見ると Cloudflare Access が IdP に見えますが、実際に認証をおこなうのは Cloudflare Access に連携された IdP です。Cloudflare Access は IdP プロキシのように振る舞います。)

image-20220722012135776

認証されると、デモページに遷移し、認証データが確認できます。

image-20220722012720158

以上です。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?