グループおよびポリシーを構成する
HashiCorp VaultをOktaと統合するの手順を完了すると、グループとポリシーを作成できるようになります。
Oktaでグループを構成する
HCP Vaultへのアクセス権を必要とするユーザーのタイプ(管理者や開発者など)ごとにグループを作成します。
- 作成するOktaソースのグループごとに、グループを作成するの手順を実行します。各グループ名にokta-group-vaultのプレフィックスが使用されていることを確認します。たとえば、管理者ユーザーにはokta-group-vault-admins、開発者ユーザーにはokta-group-vault-developerです。
- ユーザーをグループに手動で割り当て(またはユーザーをグループに一括で割り当て)を実行して、詳細なアクセスレベルをユーザーに付与します。
HCP Vaultでポリシーを構成する
前のセクションで作成したユーザーグループごとにポリシーを作成します。ポリシーによって、さまざまなユーザーペルソナおよび機能がHCP Vaultに保存されているシークレットにアクセスできるようになります。詳細については、「ポリシーへの導入」を参照してください。ポリシーを構成するには、CLIコマンドを使用するまたはAPIを使用するの2つの方法があります。
CLIコマンドを使用する
- このコマンドを実行して、vault-policy-developer-read.hclというポリシーファイルを作成します。#!/bin/bash tee vault-policy-developer-read.hcl <<EOF # Read permission on the k/v secrets path "/secret/*" { capabilities = ["read", "list"] } EOF
- このコマンドを実行して、vault-policy-developer-readというポリシーを作成します。ポリシーは、前の手順で作成したファイルを使用します。#!/bin/bash vault policy write vault-policy-developer-read vault-policy-developer-read.hcl
- このコマンドを実行して、vault-policy-admin.hclというポリシーファイルを作成します。#!/bin/bash tee vault-policy-admin.hcl <<EOF # Admin policy path "*" { capabilities = ["sudo","read","create","update","delete","list","patch"] } EOF
- このコマンドを実行して、vault-policy-adminというポリシーを作成します。ポリシーは、前の手順で作成したファイルを使用します。#!/bin/bash vault policy write vault-policy-admin vault-policy-admin.hcl
- 次のコマンドを実行して、作成したポリシーとデフォルトのHCP Vaultポリシーを表示します。#!/bin/bash vault policy list
APIを使用する
HCP Vault DedicatedまたはHCP Vaultのいずれかで次の手順を完了します。
HCP Vault Dedicated
- JSON形式のvault-policy-developer-readポリシーが含まれるAPIリクエストを送信します。#!/bin/bash tee vault-policy-developer-read.json <<EOF { "policy": "path \"/secret/*\" {\n\tcapabilities = [\"read\", \"list\"]\n}\n" } EOF
- vault-policy-developer-read.jsonで定義されたポリシーを使用するvault-policy-developer-readというポリシーを作成します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request PUT \ --data @vault-policy-developer-read.json \ $VAULT_ADDR/v1/sys/policies/acl/vault-policy-developer-read
- JSON形式のvault-policy-adminポリシーが含まれるAPIリクエストを作成します。#!/bin/bash tee vault-policy-admin.json <<EOF { "policy": "path \"/secret/*\" {\n\tcapabilities = [\"read\", \"list\", \"sudo\", \"create\", \"update\", \"delete\", \"patch\"]\n}\n" } EOF
- vault-policy-admin.jsonで定義されたポリシーを使用するvault-policy-adminというポリシーを作成します。 curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request PUT \ --data @vault-policy-admin.json \ $VAULT_ADDR/v1/sys/policies/acl/vault-policy-admin
- このコマンドを実行して、作成したポリシーとデフォルトのHCP Vault Dedicatedポリシーを表示します。 curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ $VAULT_ADDR/v1/sys/policy | jq '.data | .policies'
HCP Vault
- JSON形式のvault-policy-developer-readポリシーが含まれるAPIリクエストを送信します。#!/bin/bash tee vault-policy-developer-read.json <<EOF { "policy": "path \"/secret/*\" {\n\tcapabilities = [\"read\", \"list\"]\n}\n" } EOF
- vault-policy-developer-read.jsonで定義されたポリシーを使用するvault-policy-developer-readというポリシーを作成します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request PUT \ --data @vault-policy-developer-read.json \ $VAULT_ADDR/v1/sys/policies/acl/vault-policy-developer-read
- JSON形式のvault-policy-adminポリシーが含まれるAPIリクエストを作成します。#!/bin/bash tee vault-policy-admin.json <<EOF { "policy": "path \"/secret/*\" {\n\tcapabilities = [\"read\", \"list\", \"sudo\", \"create\", \"update\", \"delete\", \"patch\"]\n}\n" } EOF
- vault-policy-admin.jsonで定義されたポリシーを使用するvault-policy-adminというポリシーを作成します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request PUT \ --data @vault-policy-admin.json \ $VAULT_ADDR/v1/sys/policies/acl/vault-policy-admin
- このコマンドを実行して、作成したポリシーとデフォルトのHCP Vaultポリシーを表示します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ $VAULT_ADDR/v1/sys/policy | jq '.data | .policies'
HCP Vaultでグループを構成する
Oktaで作成したグループと一致するグループをHCP Vaultで作成します。ポリシーを構成するには、CLIコマンドを使用するまたはAPIを使用するの2つの方法があります。
CLIコマンドを使用する
- このコマンドを実行して、vault-role-okta-group-vault-developerというロールを作成します。このアクションは、デフォルトのポリシーをロールに割り当てます。#!/bin/bash vault write auth/oidc/role/vault-role-okta-group-vault-developer \ bound_audiences="$OKTA_CLIENT_ID" \ allowed_redirect_uris="$VAULT_ADDR/ui/vault/auth/oidc/oidc/callback" \ allowed_redirect_uris="http://localhost:8250/oidc/callback" \ user_claim="sub" \ token_policies="default" \ oidc_scopes="groups" \ groups_claim="groups"
- このコマンドを実行して、okta-group-vault-developerというグループを作成してvault-policy-developer-read policyに割り当てます。#!/bin/bash vault write identity/group name="okta-group-vault-developer" type="external" \ policies="vault-policy-developer-read" \ metadata=responsibility="okta-group-vault-developer"
- このコマンドを実行して、GROUP_IDという変数を作成します。変数には先ほど作成したグループのIDが含まれます。#!/bin/bash GROUP_ID=$(vault read -field=id identity/group/name/okta-group-vault-developer)
- このコマンドを実行して、OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成します。#!/bin/bash OIDC_AUTH_ACCESSOR=$(vault auth list -format=json | jq -r '."oidc/".accessor')
- このコマンドを実行して、okta-group-vault-developerというグループエイリアスを作成します。エイリアスは、OIDC認証方法と先ほど作成したグループをvault-policy-developer-readポリシーに接続します。#!/bin/bash vault write identity/group-alias name="okta-group-vault-developer" \ mount_accessor="$OIDC_AUTH_ACCESSOR" \ canonical_id="$GROUP_ID"
- このコマンドを実行して、開発者としてokta-group-vault-developerロールでサインインします。#!/bin/bash
vault login -method=oidc role="vault-role-okta-group-vault-developer"
成功メッセージとキー値ペアのリストが表示されます。okta-group-vault-developerは割り当てられたOktaグループに一致するため、返されるトークンではvault-policy-developer-readが使用されます。
- Oktaからサインアウトします。
- このコマンドを実行して、vault-role-okta-group-vault-adminsというロールを作成します。#!/bin/bash vault write auth/oidc/role/vault-role-okta-group-vault-admins \ bound_audiences="$OKTA_CLIENT_ID" \ allowed_redirect_uris="$VAULT_ADDR/ui/vault/auth/oidc/oidc/callback" \ allowed_redirect_uris="http://localhost:8250/oidc/callback" \ user_claim="sub" \ token_policies="default" \ oidc_scopes="groups" \ groups_claim="groups"
- このコマンドを実行して、vault-policy-adminポリシーを使用するokta-group-vault-adminsグループを作成します。#!/bin/bash vault write identity/group name="okta-group-vault-admins" type="external" \ policies="vault-policy-admin" \ metadata=responsibility="okta-group-vault-admins"
- このコマンドを実行して、okta-group-vault-adminsグループIDを保存するGROUP_ID変数を作成します。#!/bin/bash GROUP_ID=$(vault read -field=id identity/group/name/okta-group-vault-admins)
- このコマンドを実行して、OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成します。 #!/bin/bash OIDC_AUTH_ACCESSOR=$(vault auth list -format=json | jq -r '."oidc/".accessor')
- このコマンドを実行して、okta-group-vault-adminsというグループエイリアスを作成します。エイリアスは、OIDC認証方法と先ほど作成したグループをvault-policy-adminポリシーに接続します。#!/bin/bash vault write identity/group-alias name="okta-group-vault-admins" \ mount_accessor="$OIDC_AUTH_ACCESSOR" \ canonical_id="$GROUP_ID"
- このコマンドを実行して、okta-group-vault-adminsロールでサインインします。#!/bin/bash
vault login -method=oidc role="vault-role-okta-group-vault-admins"
成功メッセージとキー値ペアのリストが表示されます。okta-group-vault-adminsは割り当てられたOktaグループに一致するため、返されるトークンではvault-policy-adminが使用されます。
APIを使用する
HCP Vault DedicatedまたはHCP Vaultのいずれかで次の手順を完了します。
HCP Vault Dedicated
- okta-group-vault-developerロールのリクエストを送信します。#!/bin/bash tee vault-role-okta-group-vault-developer.json <<EOF { "bound_audiences": "$OKTA_CLIENT_ID", "allowed_redirect_uris": [ "$VAULT_ADDR/ui/vault/auth/oidc/oidc/callback", "http://localhost:8250/oidc/callback" ], "user_claim": "sub", "token_policies": ["default"], "oidc_scopes": "groups", "groups_claim": "groups" } EOF
- vault-role-okta-group-vault-developerというロールを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request POST \ --data @vault-role-okta-group-vault-developer.json \ $VAULT_ADDR/v1/auth/oidc/role/vault-role-okta-group-vault-developer
- vault-policy-developer-readポリシーをokta-group-vault-developerグループに割り当てるリクエストを送信します。#!/bin/bash tee okta-group-vault-developer.json <<EOF { "name": "okta-group-vault-developer", "policies": ["vault-policy-developer-read"], "type": "external", "metadata": { "responsibility": "okta-group-vault-developer" } } EOF
- okta-group-vault-developer.jsonグループ定義が含まれるグループを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request POST --data @okta-group-vault-developer.json \ $VAULT_ADDR/v1/identity/group | jq
- okta-group-vault-developerグループのGROUP_ID変数を作成するリクエストを送信します。#!/bin/bash GROUP_ID=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request GET \ $VAULT_ADDR/v1/identity/group/name/okta-group-vault-developer | jq '.data | .id' -r)
- OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成するリクエストを送信します。#!/bin/bash OIDC_AUTH_ACCESSOR=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ $VAULT_ADDR/v1/sys/auth | jq '.data | ."oidc/".accessor' -r)
- このコマンドを使用して、okta-group-vault-developerというグループエイリアスを作成します。#!/bin/bash tee alias-okta-group-vault-developer.json <<EOF { "canonical_id": "$GROUP_ID", "mount_accessor": "$OIDC_AUTH_ACCESSOR", "name": "okta-group-vault-developer" } EOF
- okta-group-vault-developerエイリアスをHCP Vaultと共有するリクエストを送信します。#!/bin/bash curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request POST -s \ --data @alias-okta-group-vault-developer.json \ $VAULT_ADDR/v1/identity/group-alias | jq
- このリクエストを送信して、開発者としてokta-group-vault-developerロールでサインインします。#!/bin/bash
vault login -method=oidc role="vault-role-okta-group-vault-developer"
成功メッセージとキー値ペアのリストが表示されます。okta-group-vault-developerは割り当てられたOktaグループに一致するため、返されるトークンではvault-policy-developer-readが使用されます。
- Oktaからサインアウトします。
- okta-group-vault-adminsロールのリクエストを送信します。#!/bin/bash tee vault-role-okta-group-vault-admins.json << EOF { "bound_audiences": "$OKTA_CLIENT_ID", "allowed_redirect_uris": [ "$VAULT_ADDR/ui/vault/auth/oidc/oidc/callback", "http://localhost:8250/oidc/callback" ], "user_claim": "sub", "token_policies": ["default"], "oidc_scopes": "groups", "groups_claim": "groups" } EOF
- vault-role-okta-group-vault-adminsというロールを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request POST \ --data @vault-role-okta-group-vault-admins.json \ $VAULT_ADDR/v1/auth/oidc/role/vault-role-okta-group-vault-admins
- vault-policy-adminポリシーに割り当てられたokta-group-vault-adminsグループを定義するリクエストを送信します。#!/bin/bash tee okta-group-vault-admins.json <<EOF { "name": "okta-group-vault-admins", "policies": ["vault-policy-admin"], "type": "external", "metadata": { "responsibility": "okta-group-vault-admins" } } EOF
- okta-group-vault-admins.jsonでグループ定義のあるグループを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request POST \ --data @okta-group-vault-admins.json $VAULT_ADDR/v1/identity/group | jq
- okta-group-vault-adminsグループIDが含まれたGROUP_ID変数を作成するリクエストを送信します。#!/bin/bash GROUP_ID=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request GET \ $VAULT_ADDR/v1/identity/group/name/okta-group-vault-admins | jq '.data | .id' -r)
- OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成するリクエストを送信します。#!/bin/bash OIDC_AUTH_ACCESSOR=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ $VAULT_ADDR/v1/sys/auth | jq '.data | ."oidc/".accessor' -r)
- okta-group-vault-adminsエイリアスを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --header "X-Vault-Namespace: $VAULT_NAMESPACE" \ --request POST -s \ --data @alias-okta-group-vault-admins.json \ $VAULT_ADDR/v1/identity/group-alias | jq
- このリクエストを送信し、vault-role-okta-group-vault-adminロールでサインインします。#!/bin/bash
vault login -method=oidc role="vault-role-okta-group-vault-admins"
成功メッセージとキー値ペアのリストが表示されます。okta-group-vault-adminsは割り当てられたOktaグループに一致するため、返されるトークンではvault-policy-adminが使用されます。
HCP Vault
- okta-group-vault-developerロールのAPIリクエストを送信します。#!/bin/bash tee vault-role-okta-group-vault-developer.json << EOF { "bound_audiences": "$OKTA_CLIENT_ID", "allowed_redirect_uris": [ "$VAULT_ADDR/ui/vault/auth/oidc/oidc/callback", "http://localhost:8250/oidc/callback" ], "user_claim": "sub", "token_policies": ["default"], "oidc_scopes": "groups", "groups_claim": "groups" } EOF
- vault-role-okta-group-vault-developerというロールを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request POST \ --data @vault-role-okta-group-vault-developer.json \ $VAULT_ADDR/v1/auth/oidc/role/vault-role-okta-group-vault-developer
- okta-group-vault-developer.jsonグループ定義が含まれるグループを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request POST \ --data @okta-group-vault-developer.json \ $VAULT_ADDR/v1/identity/group | jq
- okta-group-vault-developerIDが含まれるGROUP_ID変数を作成するリクエストを送信します。#!/bin/bash GROUP_ID=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request GET \ $VAULT_ADDR/v1/identity/group/name/okta-group-vault-developer | jq '.data | .id' -r)
- OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成するリクエストを送信します。#!/bin/bash OIDC_AUTH_ACCESSOR=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ $VAULT_ADDR/v1/sys/auth | jq '.data | ."oidc/".accessor' -r)
- このコマンドを使用して、okta-group-vault-developerのエイリアスを作成します。#!/bin/bash tee alias-okta-group-vault-developer.json <<EOF { "canonical_id": "$GROUP_ID", "mount_accessor": "$OIDC_AUTH_ACCESSOR", "name": "okta-group-vault-developer" } EOF
- okta-group-vault-developerエイリアスをHCP Vaultと共有するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request POST -s \ --data @alias-okta-group-vault-developer.json \ $VAULT_ADDR/v1/identity/group-alias | jq
- このリクエストを送信し、vault-role-okta-group-vault-developerロールでサインインします。#!/bin/bash
vault login -method=oidc role="vault-role-okta-group-vault-developer"
成功メッセージとキー値ペアのリストが表示されます。okta-group-vault-developerは割り当てられたOktaグループに一致するため、返されるトークンではvault-policy-developer-readが使用されます。
- Oktaからサインアウトします。
- okta-group-vault-adminsロールのリクエストを送信します。#!/bin/bash tee vault-role-okta-group-vault-admins.json << EOF { "bound_audiences": "$OKTA_CLIENT_ID", "allowed_redirect_uris": [ "$VAULT_ADDR/ui/vault/auth/oidc/oidc/callback", "http://localhost:8250/oidc/callback" ], "user_claim": "sub", "token_policies": ["default"], "oidc_scopes": "groups", "groups_claim": "groups" } EOF
- vault-role-okta-group-vault-adminsというロールを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request POST \ --data @vault-role-okta-group-vault-admins.json \ $VAULT_ADDR/v1/auth/oidc/role/vault-role-okta-group-vault-admins
- vault-policy-adminポリシーをokta-group-vault-adminsグループに割り当てるリクエストを送信します。#!/bin/bash tee okta-group-vault-admins.json <<EOF { "name": "okta-group-vault-admins", "policies": ["vault-policy-admin"], "type": "external", "metadata": { "responsibility": "okta-group-vault-admins" } } EOF
- okta-group-vault-admins.jsonグループ定義が含まれるグループを作成するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request POST \ --data @okta-group-vault-admins.json \ $VAULT_ADDR/v1/identity/group | jq
- okta-group-vault-adminsグループが含まれるGROUP_ID変数を作成するリクエストを送信します。#!/bin/bash GROUP_ID=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request GET \ $VAULT_ADDR/v1/identity/group/name/okta-group-vault-admins | jq '.data | .id' -r)
- OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成するリクエストを送信します。#!/bin/bash OIDC_AUTH_ACCESSOR=$(curl --header "X-Vault-Token: $VAULT_TOKEN" \ $VAULT_ADDR/v1/sys/auth | jq '.data | ."oidc/".accessor' -r)
- このコマンドを使用して、okta-group-vault-adminsエイリアスを作成します。#!/bin/bash tee alias-okta-group-vault-admins.json <<EOF { "canonical_id": "$GROUP_ID", "mount_accessor": "$OIDC_AUTH_ACCESSOR", "name": "okta-group-vault-admins" } EOF
- okta-group-vault-adminsエイリアスをHCP Vaultと共有するリクエストを送信します。curl --header "X-Vault-Token: $VAULT_TOKEN" \ --request POST -s \ --data @alias-okta-group-vault-admins.json \ $VAULT_ADDR/v1/identity/group-alias | jq
- このリクエストを送信し、vault-role-okta-group-vault-adminsロールでサインインします。#!/bin/bash
vault login -method=oidc role="vault-role-okta-group-vault-admins"
成功メッセージとキー値ペアのリストが表示されます。okta-group-vault-adminsは割り当てられたOktaグループに一致するため、返されるトークンではvault-policy-adminが使用されます。
