俺です。
組織運営をしていると、チーム単位などでパスワード情報を管理したいということがあるとおもいます。
そんな時はスプレッドシートに書いて共有設定仕掛けて安全だぜ。
という付箋紙にパスワードを書いてデスクに貼っておくレベルのITでしか仕事できない俺たちのために1Passwordというパスワードマネージャサービスがあります
パスワードマネージャを導入する上で面倒なのがユーザープロビジョニングです。
入退社、異動や休職、復職に合わせてアカウントを管理するのは重要です。
退職したけどパスワード閲覧できてます。ああ声に出して読みたい。を防ぐため、
この1PasswordではSCIMを用いたプロビジョニングが提供されています。
ユーザープロビジョニングがあると組織で1Passwordを活用しやすくなりますね。
ってことで今回は1Password SCIM Bridge Okta Integrationを実現した記録を残します。
ただし、1PasswordがSAML対応してないのでログインパスワードやMFAの設定は利用者自身で設定しなければならないのが悲しいところです。
前提
- 環境構築前に1Passwordは組織アカウントを開設済みです。
- 14日無償利用期間中に環境構築を実施しました。
official document
infrastructure code
terraform(EC2), docker-compose, k8sのサンプルが提供されています。
特にterraformは非常に読みやすくかかれており、学習素材としても活かせると思います。
今回の環境構築にはterraform exampleを使いました。
SCIM Bridgeの構築準備
1Passwordにプロビジョニング専用のアカウントを登録する
- プロビジョニング専用アカウントを1Passwordに登録します。
- Oktaに登録されていないユーザー名(メーリングリストなど)を登録します。
プロビジョニングアカウントのパラメータ
- プロビジョニング用ユーザー: admin-1password@domain
- プロビジョニンググループを作成する: Provision Managers
dockerのインストール
- scimsessionファイルの生成にdockerが必要です
- 環境構築する端末にdockerをインストールします
op-cliのインストール
- op-cliをインストールします
プロビジョニングユーザーでのサインイン
$ op signin oretachinoteam admin-1password@<domain> <1Password Secret Keyを指定>
Enter the password for admin-1password@<domain> at oretachinoteam.1password.com:
export OP_SESSION_oretachinoteam="<セッション情報>"
# This command is meant to be used with your shell's eval function.
# Run 'eval $(op signin oretachinoteam)' to sign into your 1Password account.
# If you wish to use the session token itself, pass the --output=raw flag value.
$ export OP_SESSION_oretachinoteam="<セッション情報>"
$ op edit group "provisioning" --addpermissions=ProvisionPeople
sessionファイル生成スクリプトの作成
SCIM BridgeのIntegrationに必要なsessionファイルを生成します
$ cat >> create-session-file.sh << EOF
# !/bin/bash
mkdir session
docker run -it -v $PWD/session:'/op-scim/session' 1password/scim /op-scim/create-session-docker.sh
cp ./session/scimsession ./scimsession
rm -rf ./session
EOF
sessionファイルの生成
- scimsessionファイルを生成します
- scimsessionファイル生成時に出力されるbearer tokenはOkta Integration設定画面で入力が必要になるので記録しておきます
- infraをgitで管理している場合は、このファイルをgitに含めないようにします
$ bash create-session-file.sh
Enter your sign-in address (example.1password.com): oretachinoteam.1password.com
Enter the email address for your provisioning account on oretachinoteam: admin-1password@<domain>
Enter the Secret Key for admin-1password@<domain> on oretachinoteam: <Secret Key>
Enter the password for admin-1password@<domain> at oretachinoteam.1password.com:
[LOG] [0.6.3] 2018/10/10 14:10:18 (INFO) generating scimsession file for admin-1password@<domain> at https://oretachinoteam.1password.com
[LOG] [0.6.3] 2018/10/10 14:10:18 (INFO) scimsession file was written to the current directory
[LOG] [0.6.3] 2018/10/10 14:10:18 (INFO) bearer token: <ベアラートークンが表示される> ( これは記録しておこと)
SecretManagerへのアップロード
- Bridge用EC2はAutoScaling GroupからLaunchされます
- user-data内でSecretManagerからscimsessionファイルを取得する処理が実行されます
- そのためscimsessionファイルを予めSecretManagerへアップロードしておく必要があります
$ export AWS_PROFILE=scim
$ export AWS_DEFAULT_REGION=ap-northeast-1
$ aws secretsmanager create-secret --name oretachinoteam-op-scim/scimsession-20181010 --secret-binary file:///<path>/<to>/scimsession
{
"ARN": "XXXXXXXXXXXXXXXXXXXXXXXX",
"Name": "XXXXXXXXXXXXXXXXXXXXXXXX",
"VersionId": "XXXXXXXXXXXXXXXXXXXXXXXX"
}
SCIM Bridge用SSL証明書の作成
- terraformでALBにSSL証明書をプロビジョニングします
- 予めACMでSSL証明書を作成しておきます
- SSL証明書のドメイン名はSCIM Bridgeを構成するエンドポイント名にします(例えばscim.example.com)
terraformのtfファイルを修正する
- example_envをリネームまたはコピーします
-
variables.tfの
// CHANGE_IT
行を自AWSアカウントの設定にあわせて修正します - provider.tfを自環境に合わせて適切なS3 Backend設定に修正します
SCIM Bridge環境構築
applyが通れば無事環境構築完了です。やったね
$ export AWS_PROFILE=scim
$ export AWS_DEFAULT_REGION=ap-northeast-1
$ terraform init
$ terraform plan
$ terraform apply -auto-approve
Okta 1Password Integration設定
Okta Application管理画面から1Password Integration設定を行います.
API Integration
ドキュメントの例では https://scim.example.com のような表記になってますが
正しくはパスhttps://scim.example.com/scim
を指定する必要があります。
/scim
を指定しないとTestが通りません。
クソハマったけどすぐ教えてくれた1Password Support愛してる
※Supportから丁寧な回答を頂いた。eigoがyomenai俺でも理解できて最高
Thank you for reaching out! I will try to help you getting your SCIM bridge set up and running.
Could you please try using following Base URL within Okta:
https://XXXXXX/scim
Please let me know if that worked for you.
- integration設定
Provisioning Setting(To App)
- EditをクリックしてCreate Users, Update User Attributes, Deactive UsersをEnableにします
後は同期を開始してOkta上のユーザーが1Passwordへ同期されたらOKです。
メンバーへメールが送信されています。
メンバーの初回ログイン完了には管理者による承認が必要です。
1PasswordがSAML未対応なのでSSOできないのが超絶辛いところですが、アカウントの制御はできるようになりました。やったね
おわり