グループおよびポリシーを構成する

HashiCorp Cloud Platform VaultをOktaと統合するの手順を完了すると、グループとポリシーを作成できるようになります。

Oktaでグループを構成する

HCP Vaultへのアクセス権を必要とするユーザーのタイプ(管理者や開発者など)ごとにグループを作成します。

  1. 作成するOktaソースのグループごとに、グループを作成するの手順を実行します。各グループ名にokta-group-vaultのプレフィックスが使用されていることを確認します。たとえば、管理者ユーザーにはokta-group-vault-admins、開発者ユーザーにはokta-group-vault-developerです。
  2. ユーザーをグループに手動で割り当て(またはユーザーをグループに一括で割り当て)を実行して、詳細なアクセスレベルをユーザーに付与します。

HCP Vaultでポリシーを構成する

前のセクションで作成したユーザーグループごとにポリシーを作成します。ポリシーによって、さまざまなユーザーペルソナおよび機能がHCP Vaultに保存されているシークレットにアクセスできるようになります。詳細については、「ポリシーへの導入」を参照してください。ポリシーを構成するには、CLIコマンドを使用するまたはAPIを使用するの2つの方法があります。

CLIコマンドを使用する

  1. このコマンドを実行して、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
  2. このコマンドを実行して、vault-policy-developer-readというポリシーを作成します。ポリシーは、前の手順で作成したファイルを使用します。
    #!/bin/bash
    vault policy write vault-policy-developer-read vault-policy-developer-read.hcl
    
  3. このコマンドを実行して、vault-policy-admin.hclというポリシーファイルを作成します:
    #!/bin/bash 
    tee vault-policy-admin.hcl <<EOF
    # Admin policy
    path "*" {
    	capabilities =
    ["sudo","read","create","update","delete","list","patch"]
    }
    EOF
  4. このコマンドを実行して、vault-policy-adminというポリシーを作成します。ポリシーは、前の手順で作成したファイルを使用します。
    #!/bin/bash
    vault policy write vault-policy-admin vault-policy-admin.hcl
    
  5. 次のコマンドを実行して、作成したポリシーとデフォルトのHCP Vaultポリシーを表示します。
    #!/bin/bash
    vault policy list

APIを使用する

HCP Vault DedicatedまたはHCP Vaultのいずれかで次の手順を完了します。

HCP Vault Dedicated

  1. 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		
  2. 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	
  3. 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
  4. 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	
  5. このコマンドを実行して、作成したポリシーとデフォルトの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

  1. 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			
  2. 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
  3. 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		
  4. 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
  5. 次のコマンドを実行して、作成したポリシーとデフォルトの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コマンドを使用する

  1. このコマンドを実行して、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"
    
  2. このコマンドを実行して、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"
  3. このコマンドを実行して、GROUP_IDという変数を作成します。変数には先ほど作成したグループのIDが含まれます。
    #!/bin/bash
    GROUP_ID=$(vault read -field=id 
    identity/group/name/okta-group-vault-developer)	
  4. このコマンドを実行して、OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成します:
    #!/bin/bash
    OIDC_AUTH_ACCESSOR=$(vault auth list -format=json  | jq -r '."oidc/".accessor')
  5. このコマンドを実行して、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"
  6. このコマンドを実行して、開発者として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が使用されます。

  7. Oktaからサインアウトします。
  8. このコマンドを実行して、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"
  9. このコマンドを実行して、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"		
  10. このコマンドを実行して、okta-group-vault-adminsグループIDを保存するGROUP_ID変数を作成します:
    #!/bin/bash
    	GROUP_ID=$(vault read -field=id identity/group/name/okta-group-vault-admins)		
  11. このコマンドを実行して、OIDC認証方法のOIDC_AUTH_ACCESSOR変数を作成します:
    #!/bin/bash
    OIDC_AUTH_ACCESSOR=$(vault auth list -format=json  | jq -r '."oidc/".accessor')
  12. このコマンドを実行して、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"
  13. このコマンドを実行して、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

  1. 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		
  2. 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	
  3. 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		
  4. 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			
  5. 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)
  6. 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)
  7. このコマンドを使用して、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		
  8. 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
    
  9. このリクエストを送信して、開発者として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が使用されます。

  10. Oktaからサインアウトします。
  11. 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			
  12. 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
  13. 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		
  14. 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
  15. 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)
  16. 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)
  17. 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	
  18. このリクエストを送信し、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

  1. 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			
  2. 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
  3. 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
  4. 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)
  5. 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)
  6. このコマンドを使用して、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	
  7. 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
  8. このリクエストを送信し、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が使用されます。

  9. Oktaからサインアウトします。
  10. 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		
  11. 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
  12. 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			
  13. 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
  14. 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)
  15. 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)
  16. このコマンドを使用して、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			
  17. 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
  18. このリクエストを送信し、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が使用されます。

次の手順

統合をテストする