雑記帳
2018-12-07 (Fri) [長年日記]
■ GoogleのセキュアLDAPを使ってPingFederateによる認証をする
セキュアLDAPとは、つい先日リリースされたばかりの、GoogleのCloud Identityまたは、G Suiteに対して、LDAPプロトコルを使って接続できるサービスのこと。
Ping IdentityのIdP製品である、PingFederateから、セキュアLDAPが使えるか試してみる。
Cloud Identity
Cloud Identityとは、GoogleのIDaaSで、企業向けモバイル管理(EMM)サービスのこと。 FreeとPremiumがあり、セキュアLDAPを使うには、Premiumが必要となる。
Freeは、G Suiteを使わないユーザーを管理するのに使うことができる。 GCPを使う開発者向けに、IDを発行し、ID統制できるようになる。
また、G Suite Enterpriseを使っている場合も、セキュアLDAPを使うことができる。 セキュアLDAPを使いたい場合、Cloud Identityを使った方がコスト面では有利なので、このためだけにG Suite Enterpriseにする必要はない。
Cloud Identity Premiumを有効にする
今回は、すでにG Suiteを使っているドメインでPremiumを有効にする。まだFree版も利用していない。
G Suiteの管理コンソールの「お支払い」から、Cloud Identity Premiumの有効化を実施する。 14日間の無料試用ができるので、そちらを選ぶ。
有効化が完了したらライセンスの割り当てをする。割り当て方法については、下記のドキュメントを参照のこと。
LDAPクライアントを追加する
セキュアLDAPに接続するためのLDAPクライアントを、Googleに追加するする必要がある。
アクセス権限を設定する
LDAPクライアントが、どんな情報にアクセスできるのかの権限を設定する。 今回は、PingFederateが認証に使うData Storeとして利用する想定なので、全て許可する。
- ユーザー認証情報の確認
- ユーザー情報の読み取り
- グループ情報の読み取り
証明書をダウンロードする
自動的に証明書が生成されるので、ダウンロードする。
LDAPクライアントをオンにする
Googleの管理コンソールで、サービスをオンにする。
LDAPクライアントを設定する
PingFederateを使う場合は、証明書を使った認証が利用できない。そのため、stunnelを使う。
stunnelのインストールと設定
今回の環境は、CentOS 7を利用している。yumでインストールする。
# yum install stunnel psmisc
Googleから取得した証明書をサーバーの/etc/stunnel
に配置する。
それぞれ、google-ldap.crt
とgoogle-ldap.key
とする。
/etc/stunnel/stunnel.conf
として、下記の内容の設定ファイルを作成する。
[ldap] client = yes accept = 127.0.0.1:1636 connect = ldap.google.com:636 cert = /etc/stunnel/google-ldap.crt key = /etc/stunnel/google-ldap.key
stunnelをサービスとして、systemdに登録する。
/etc/stunnel/stunnel.conf
として、下記の内容のファイルを作成する。
[Unit] Description=SSL tunnel for network daemons After=network.target After=syslog.target [Install] WantedBy=multi-user.target Alias=stunnel.target [Service] Type=forking ExecStart=/usr/bin/stunnel /etc/stunnel/stunnel.conf ExecStop=/usr/bin/killall -TERM stunnel # Give up if ping don't get an answer TimeoutSec=600 Restart=always PrivateTmp=false
systemdに登録する。
# systemctl start stunnel.service # systemctl enable stunnel.service
PingFederateを設定する
PingFederateからstunnelを経由してセキュアLDAPに接続する設定をする。
Data Storeを作成する
Data Store
を作成して設定する。
- Hostname(s):
localhost:1636
- LDAP Type:
general
- Bind Anonymously: チェックする
設定を保存する。
LDAP PCVを作成する
LDAP Username Password Credential Validatorを作成し設定する。 設定値は、Googleのドキュメントを参考にする。
- LDAP Datastore: 作成したData Store
- Search Base:
DC=example,DC=com
- Search Filter:
mail=${username}
あとは、IdP AdapterでこのPCVを使うように設定すれば良い。
まとめ
テストしたところ、認証する際に気持ち時間がかかるか?という感じだが、特に問題なく利用できた。
今更LDAP?と思う向きは少なくないと思う。しかし、統合認証を実現しようとすると、LDAPが不要になる世界は、まだ来そうにないのが実情だ。
統合認証と言えば、ほとんどのケースでActive Directoryがデファクトスタンダードになっている。そして、昨今のスタートアップ企業は、今さらActive Directoryを管理・運用したくないという話はよく聞く(自分もそう思う)。そして、そういう企業は大抵の場合、G Suiteを契約してメールはGmailを使っているのだ。
そんな場合に、セキュアLDAPは有力な選択肢になる。
2018-03-13 (Tue) [長年日記]
■ [AWS] SAMLで認証しているユーザーの権限でAWS CLIを実行する
AWS Management ConsoleにFederated Userでログインを設定した場合には、IAM Userと違って、永続的なAccess Key Idを発行することができない。こういった場合には、STS (Security Token Service)を使って、一時的セキュリティ認証情報を取得する必要がある。
SAMLを使った場合は、AssumeRoleWithSAMLというAPIを使うのだが、そのままAWS CLIを使って手で実行するのは困難である。ということで、ツールを作ろうかと思ったのだが、さすがにすでに存在していたので、それを紹介する。
saml2aws
saml2aws は、いくつかのSAML IdPに対応したTemporary credentialsを取得するツールである。対応しているIdPは以下の通り。
- ADFS (2.x or 3.x)
- JumpCloud
- KeyCloak + (TOTP)
- Okta + (Duo, SMS, TOTP)
- PingFederate + PingID
それでは早速使ってみたい。
インストール
macOSの場合は、homebrewに対応している。
$ brew tap versent/homebrew-taps $ brew install saml2aws
設定
PingOneで実行したかったのだが、未対応なのでOktaでやってみる。
$ saml2aws configure Please choose the provider you would like to use: [ 0 ]: ADFS [ 1 ]: ADFS2 [ 2 ]: JumpCloud [ 3 ]: KeyCloak [ 4 ]: Okta [ 5 ]: Ping Selection: 4 URL []: https://<your_org>.okta.com/home/amazon_aws/deadbeaf/123 Username []: <your_account> Configuration saved for IDP account: default
ここで入力するURLは、Oktaの場合だと、UserHomeに表示されるAWSにサインインするためのURLで良い。 Usernameは、Oktaにサインインするときに使うものを入れる。
設定はこれだけ。
認証
では、認証トークンを得るために、AWSにサインインしてみよう。
$ saml2aws login Using IDP Account default to access Okta https://<your_org>.okta.com/home/amazon_aws/deadbeaf/123 To use saved password just hit enter. Username [<your_account>]: Password: *************** Authenticating as <your_account> ... 1) PUSH MFA authentication 2) UNSUPPORTED: OKTA TOKEN:SOFTWARE:TOTP Select which MFA option to use: 1 Waiting for approval, please check your Okta Verify app ............ Approved Selected role: arn:aws:iam::000000000000:role/<role> Requesting AWS credentials using SAML assertion Logged in as: arn:aws:sts::000000000000:assumed-role/<role>/<role_session_name> Your new access key pair has been stored in the AWS configuration Note that it will expire at 2018-03-12 19:25:04 +0900 JST To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
OktaでMFAを有効にしているため、MFA optionを選ぶように促される。ここでは、PUSH MFA authenticationである1を入力し、MFAを実行している。認証に成功すると、expireされる時刻が表示され、aws --profile samlと指定するとAPIが実行できると表示された。
AWS CLI実行
では、AWS CLIを実行してみよう。
$ aws --profile saml sts get-caller-identity { "UserId": "ABCDEFG12345ZXYW9876S:<role_session_name", "Account": "000000000000", "Arn": "arn:aws:sts::000000000000:assumed-role/<role>/<role_session_name>" }
assumed-roleの権限で、APIを実行していることが確認できた。
ここで、AWS CLIが利用している認証情報を確認してみる。
$ cat ~/.aws/credentials (snip) [saml] aws_access_key_id = ABCDEFG12345ZXYW9876S aws_secret_access_key = T5on5Z...1wJrtp aws_session_token = FQoDYX...dd1QU= aws_security_token = FQoDYX...dd1QU=
samlというprofileが自動的に更新されているのが確認できる。aws_access_key_id以外は長いので省略しているが、これがSTSのAPIである、AssumeRoleWithSAMLを実行して得られた認証情報である。
対応しているIdPが限られているが、これはかなり便利だと思う。
2018-01-28 (Sun) [長年日記]
■ [GTD] 今年登場するOmniFocus 3は刷新されるようなので新機能をまとめた
The Omni Blogで、2018年のロードマップが公開された。
中でも特に、OmniFocusはバージョン3で刷新されるとのことで、どのように変化するのかが詳しく書いてあった。自分も長く使っている中で、不満に思っていたことが、かなり解消されるようなので、超うれしい!ということで、ちょっとまとめてみた。
コンテキストからタグに変更
従来は、GTDで言うところのコンテキストは、一つのタスクに対して一つしか設定できなかった。OmniFocus 3では、コンテキストはタグに置き換わることで、一つのタスクに複数のタグを設定できる。
自分もこれまで、複数のコンテキストを設定したいと思っていたので、これは嬉しい。
手動での並び替え
コンテキスト内のタスクの並び順ついて、これまでは自動的に順番が決まっていて、並び替えはできなかった。タグごとのリストでは、任意に順番を変更できるようだ。
これも地味に嬉しい。コンテキストが一つしか使えなかったと同様に、これも使いづらかった要因だったかと思う。その辺りが理由でコンテキストをうまく使えていなかったので、ここが改善されたらさらに便利になりそう。
柔軟なスケジューリング
これについては、どう変わるのかがよく分からなかったんだけど、特に繰り返しに関するタスクのスケジューリングが柔軟にできるようになるようだ。
これまでは、タスクの開始と期限しか設定できなかった。これについては、実際に触ってみたら良さを実感するだろうと思う。
柔軟性のある通知
これまでは、期日に達した時と、位置情報に基づくコンテキストの通知がされていた。
また、複数のタスクが同時に通知された時には「他3件」のようにまとめて通知されていた。この場合は、いちいち詳細を確認する必要があった。
iOSの新しいリッチな通知をサポートするようになったため、位置情報に基づく場合に地図が表示されたり、複数のタスクがリストで表示されるようになった。
さらに細かい通知の設定ができるようなるようだ。
複数のタスクが通知される時に、リストが見られるようになったのが特に嬉しい。
デザイン
iOS 7からのフラットデザインに対応していたが、よりよくリデザインされたようだ。
また、ドラッグ&ドロップに対応して、iPadとかでもタスクの移動がやりやすくなったりするようである。
強力な自動化
JavaScriptに対応した自動化がサポートされる。フィルタリング、レポート作成、テンプレートを使ったコンテンツの作成などができるようだ。
これまで自動化は使ったことはなかったが、機会があれば使ってみようと思う。
コラボレーション
これまでは個人で使うことが前提になっていたため、タスクを共有するような機能はなかった。
OmniForcus 3では、それぞれ個別に所有している別々のデータベース間でのリンクする機能が追加される。タスクがリンクされていると、それぞれのタスクのステータスを確認できるとのとこ。
これも便利そうだ。自分は自分がやらないといけない家事のタスクを管理しているが、これを家族内で共有したいと思うことはよくあったので、ぜひ活用したい。
OmniFocus for The Web
簡易的なビューがWebブラウザで提供される。これはアプリ版のOmniFocusを使っている人向けに、Windowsなどの未対応デバイスでタスクを確認したりするのに使えるもの。 いざという時に使えそうだ。
以上、OmniFocus 3の新機能をざっとまとめてみた。TestFlightもされるようなので、積極的にフィードバックしたいと言う人は登録するのがいいと思う。