【PipeCD】Amazon CognitoでPipeCDのSSOを設定してみる
PipeCDがOIDCによるSSOに対応したので、Amazon CognitoをIdPとしてSSOを設定してみます。
※ この機能は、プレリリース版である v0.49.0-rc0 としてリリースされています。
正式リリースであるv0.49.0は9月下旬の見込みです。
PipeCDのSSOとは
PipeCDでは、Web ConsoleへのログインにおいてSSOを行えます。
ログイン画面(v0.49.0-rc0以前)
先述のPRにより、GitHubだけでなくOIDCによるSSOも可能となりました。
全体像
全体像は下図のとおりです。(今回はIdPとしてAmazon Cognitoを使用します)
SSO全体像
IdPはOIDCに対応していればよく、KeyCloakやAuth0などでも構築可能です。
SSO設定においては、Piped(PipeCDのAgent)は登場しません。
ログイン画面は、この記事ではCognito標準のものを使用します。
設定手順
1. IdP(Cognito)の設定(IdPによってやり方は異なります)
1-1. ユーザプール、ユーザ、グループを作成
ここでは、下記のTerraformファイルをapplyします。
provider "aws" {
region = "ap-northeast-1"
}
# User Pool, Client, domain の設定 --------------------------------------------
resource "aws_cognito_user_pool" "example-pool" {
name = "pipecd-example-pool"
}
resource "aws_cognito_user_pool_client" "example-client" {
name = "example-client"
user_pool_id = aws_cognito_user_pool.example-pool.id
generate_secret = true
callback_urls = ["http://localhost:8080/auth/callback"] # http(s)://<pipecd-control-plane-address>/auth/callback
allowed_oauth_flows_user_pool_client = true
allowed_oauth_flows = ["code"]
allowed_oauth_scopes = ["openid", "profile"]
supported_identity_providers = ["COGNITO"]
}
data "aws_caller_identity" "self" {}
resource "aws_cognito_user_pool_domain" "example-domain" {
domain = format("%s-%v", "pipecd-example-pool", data.aws_caller_identity.self.account_id)
user_pool_id = aws_cognito_user_pool.example-pool.id
}
# User, Groupの設定 --------------------------------------------
resource "aws_cognito_user_group" "editor" {
name = "Editor"
user_pool_id = aws_cognito_user_pool.example-pool.id
}
resource "aws_cognito_user" "example-user" {
user_pool_id = aws_cognito_user_pool.example-pool.id
username = "example-user"
temporary_password = "Initial-password0"
attributes = {
email = "example-user@example.com"
}
lifecycle {
ignore_changes = [password]
}
}
resource "aws_cognito_user_in_group" "example-user-in-group" {
user_pool_id = aws_cognito_user_pool.example-pool.id
username = aws_cognito_user.example-user.username
group_name = aws_cognito_user_group.editor.name
}
# output --------------------------------------------
output "client-id" {
description = "ID of the client 'example-client'"
value = aws_cognito_user_pool_client.example-client.id
}
output "client-secret" {
description = "Secret of the client 'example-client'"
value = aws_cognito_user_pool_client.example-client.client_secret
sensitive = true
}
output "user-pool-id" {
description = "ID of the user pool 'example-pool'"
value = aws_cognito_user_pool.example-pool.id
}
1-2. 作成したユーザプールのID、クライアントID、クライアントシークレットを控える
1-1. のoutputとして出力されるので、それらを控えます。
クライアントシークレットはマスクされているので、下記コマンドで取得します。
terraform output -json
2. PipeCD Control Planeの設定・起動
2-1. Control Planeの設定ファイルの作成
docsを参考に、下記のようなファイルを作成します。stateKey
とsharedSSOConfigs
の項目が必要です。
<CLIENT_ID>
,<CLIENT_SECRET>
,<USER_POOL_ID>
は、1-2.で取得した値に書き換えてください。
apiVersion: "pipecd.dev/v1beta1"
kind: ControlPlane
spec:
datastore:
...
filestore:
...
# SSO関連の設定
stateKey: xxx # 任意の値
sharedSSOConfigs:
- name: myoidc
provider: OIDC
oidc:
clientId: <CLIENT_ID>
clientSecret: <CLIENT_SECRET>
issuer: https://cognito-idp.ap-northeast-1.amazonaws.com/<USER_POOL_ID>
redirect_uri: http://localhost:8080/auth/callback # http(s)://<PIPECD_CONTROL_PLANE_ADDRESS>/auth/callback
scopes:
- openid
- profile
2-2. Control Planeの起動
2-1で作成した設定ファイルを用いて、Control Planeを起動します。
ローカルでのControl Plane起動方法の例は こちら を参照してください。
バージョンは v0.49.0-rc0 以上を使用してください。
3. PipeCD ConsoleでProjectの作成
3-1. Ownerページにアクセス
ローカルで起動している場合は、http://localhost:9082/でアクセスできます。
Control Plane Owner ページ
Add Project
からプロジェクトを追加
3-2. 値は下記のように入力して、「送信」します。
- ID: 任意 (以下では"oidc-test"で説明します)
- Description: 任意
- Shared SSO: myoidc
3-3. 管理者のユーザ名とパスワードを取得
3-2.の結果、
Static Admin Username
とStatic Admin Password
が表示されるので、それをメモなどに一時保管します。
4. PipeCD ConsoleでProjectの設定
4-1. ログイン画面に遷移
ローカルに構築している場合は、http://localhost:8080/loginでログイン画面に遷移できます。
Project Nameとして、"oidc-test"を入力し、CONTINUE
を押下します。
ログイン画面(Project選択)
4-2. 管理者としてログイン
Username, Passwordは、3-3.で取得した Static Admin Username
とStatic Admin Password
を使用します。
ログイン(StaticAdmin)
4-3. Projectの設定画面に遷移
http://localhost:8080/settings/project?project=oidc-test
から、Project Settings画面に遷移します。
4-4. User Groupの作成
ページ下部の User Group
> +ADD
から、User Groupを作成します。
User Groupの追加
値は下記のように指定し、ADD
を押下します。
- Team/Group: Editor
- Role: Editor
Add User Group
動作確認
1. StaticAdminユーザからログアウト
ヘッダー右上のアイコンをクリックすると、ログアウトボタンが表示されるので、ログアウトします。
ログアウト
2. 再度Consoleにアクセスして、Project名を入力
Project Name: oidc-test
3. “LOGIN WITH OIDC”をクリック
LOGIN WITH OIDC
4. IdP側の認証画面に遷移するので、ログインする
- Username: example-user
- Password: Initial-password0
Cognito標準のログイン画面
5. Consoleにログインできれば成功
ログイン成功時
備考
ログアウト時の挙動について、PipeCDはprompt=consent
で設定していますが、IdPによって対応状況が異なります。
Discussion