Impostare un gruppo di broker di dati per utilizzare un archivio HashiCorp esterno
Quando si crea una relazione di sincronizzazione che richiede credenziali Amazon S3, Azure o Google Cloud, è necessario specificare tali credenziali tramite l'interfaccia utente o l'API di copia e sincronizzazione BlueXP. Un'alternativa è impostare il gruppo di broker di dati per accedere alle credenziali (o secrets) direttamente da un vault HashiCorp esterno.
Questa funzionalità è supportata tramite l'API di copia e sincronizzazione BlueXP con relazioni di sincronizzazione che richiedono credenziali Amazon S3, Azure o Google Cloud.
Preparare il vault per fornire le credenziali al gruppo di broker di dati impostando gli URL. Gli URL dei segreti nel vault devono terminare con Creds.
Preparare il gruppo di broker di dati a recuperare le credenziali dal vault esterno modificando il file di configurazione locale per ogni broker di dati nel gruppo.
Una volta configurato tutto, è possibile inviare una chiamata API per creare una relazione di sincronizzazione che utilizzi il vault per ottenere i segreti.
Preparare il vault
È necessario fornire una copia BlueXP e sincronizzarla con l'URL con i segreti nel vault. Preparare il vault impostando questi URL. È necessario impostare gli URL in base alle credenziali per ciascuna origine e destinazione nelle relazioni di sincronizzazione che si intende creare.
L'URL deve essere impostato come segue:
/<path>/<requestid>/<endpoint-protocol>Creds
- Percorso
-
Il percorso del prefisso per il segreto. Questo può essere un valore qualsiasi per te.
- ID richiesta
-
ID richiesta da generare. Quando si crea la relazione di sincronizzazione, è necessario fornire l'ID in una delle intestazioni della richiesta API POST.
- Protocollo endpoint
-
Uno dei seguenti protocolli, come definito "nella documentazione post-relationship v2": S3, AZURE o GCP (ciascuno deve essere in maiuscolo).
- Credi
-
L'URL deve terminare con Creds.
Esempi
Gli esempi seguenti mostrano gli URL per i segreti.
- Esempio di URL completo e percorso per le credenziali di origine
-
http://example.vault.com:8200/my-path/all-secrets/hb312vdasr2/S3Creds
Come si può vedere nell'esempio, il percorso del prefisso è /my-path/all-secrets/, l'ID della richiesta è hb312vdasr2 e l'endpoint di origine è S3.
- Esempio di URL completo e percorso per le credenziali di destinazione
-
http://example.vault.com:8200/my-path/all-secrets/n32hcbnejk2/AZURECreds
Il percorso del prefisso è /my-path/all-secrets/, l'ID della richiesta è n32hcbnejk2 e l'endpoint di destinazione è Azure.
Preparare il gruppo di broker di dati
Preparare il gruppo di broker di dati a recuperare le credenziali dal vault esterno modificando il file di configurazione locale per ogni broker di dati nel gruppo.
-
SSH a un broker di dati del gruppo.
-
Modificare il file local.json che risiede in /opt/netapp/databroker/config.
-
Impostare enable su true e i campi dei parametri di configurazione in external-integrations.hashicorp come segue:
- attivato
-
-
Valori validi: Vero/falso
-
Tipo: Booleano
-
Valore predefinito: False
-
Vero: Il data broker ottiene segreti dal tuo vault HashiCorp esterno
-
Falso: Il data broker memorizza le credenziali nel proprio vault locale
-
- url
-
-
Digitare: String
-
Valore: L'URL del vault esterno
-
- percorso
-
-
Digitare: String
-
Valore: Inserire il percorso del segreto con le credenziali
-
- Rifiuta-non autorizzato
-
-
Determina se si desidera che il data broker rifiuti un vault esterno non autorizzato
-
Tipo: Booleano
-
Predefinito: Falso
-
- authod
-
-
Il metodo di autenticazione che il data broker deve utilizzare per accedere alle credenziali dal vault esterno
-
Digitare: String
-
Valori validi: "aws-iam" / "role-app" / "gcp-iam"
-
- nome-ruolo
-
-
Digitare: String
-
Nome del tuo ruolo (nel caso in cui utilizzi aws-iam o gcp-iam)
-
- Secretid e rootid
-
-
Digitare: String (se si utilizza app-role)
-
- Namespace
-
-
Digitare: String
-
Spazio dei nomi (intestazione X-Vault-namespace, se necessario)
-
-
Ripetere questa procedura per tutti gli altri broker di dati del gruppo.
Esempio di autenticazione con ruolo aws
{
“external-integrations”: {
“hashicorp”: {
“enabled”: true,
“url”: “https://example.vault.com:8200”,
“path”: ““my-path/all-secrets”,
“reject-unauthorized”: false,
“auth-method”: “aws-role”,
“aws-role”: {
“role-name”: “my-role”
}
}
}
}
Esempio di autenticazione gcp-iam
{
"external-integrations": {
"hashicorp": {
"enabled": true,
"url": http://ip-10-20-30-55.ec2.internal:8200,
"path": "v1/secret",
"namespace": "",
"reject-unauthorized": true,
"auth-method": "gcp-iam",
"aws-iam": {
"role-name": ""
},
"app-role": {
"root_id": "",
"secret_id": ""
},
"gcp-iam": {
"role-name": "my-iam-role"
}
}
}
}
Impostare le autorizzazioni quando si utilizza l'autenticazione gcp-iam
Se si utilizza il metodo di autenticazione gcp-iam, il data broker deve disporre della seguente autorizzazione GCP:
- iam.serviceAccounts.signJwt
Creazione di una nuova relazione di sincronizzazione utilizzando i segreti del vault
Una volta configurato tutto, è possibile inviare una chiamata API per creare una relazione di sincronizzazione che utilizzi il vault per ottenere i segreti.
Pubblicare la relazione utilizzando la copia BlueXP e l'API REST di sincronizzazione.
Headers: Authorization: Bearer <user-token> Content-Type: application/json x-account-id: <accountid> x-netapp-external-request-id-src: request ID as part of path for source credentials x-netapp-external-request-id-trg: request ID as part of path for target credentials Body: post relationship v2 body
-
Per ottenere un token utente e l'ID dell'account BlueXP, "fare riferimento a questa pagina nella documentazione".
-
Per costruire un corpo per la tua relazione post, "Fare riferimento alla chiamata all'API Relarcitazioni v2".
Esempio
Esempio per la richiesta POST:
url: https://api.cloudsync.netapp.com/api/relationships-v2
headers:
"x-account-id": "CS-SasdW"
"x-netapp-external-request-id-src": "hb312vdasr2"
"Content-Type": "application/json"
"Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik…"
Body:
{
"dataBrokerId": "5e6e111d578dtyuu1555sa60",
"source": {
"protocol": "s3",
"s3": {
"provider": "sgws",
"host": "1.1.1.1",
"port": "443",
"bucket": "my-source"
},
"target": {
"protocol": "s3",
"s3": {
"bucket": "my-target-bucket"
}
}
}