Extrair credenciais/segredos do Secret Manager do Google Cloud com o ABAP SDK for Google Cloud

1. Introdução

Neste codelab, listamos as etapas para recuperar credenciais ou secrets da API Google Cloud Secret Manager usando o ABAP SDK for Google Cloud.

Os seguintes serviços do Google Cloud são usados neste codelab:

  • Secret Manager
  • Cloud Shell

O que você vai criar

Você vai fazer o seguinte:

  • Ative a API Secret Manager em um projeto do Google Cloud.
  • criar um segredo;
  • Adicione uma versão do secret.
  • Acessar/recuperar um secret usando o ABAP SDK for Google Cloud.

Neste codelab, as etapas para criar um secret e adicionar uma versão dele seriam feitas com comandos gcloud, mas também podem ser realizadas usando a biblioteca de cliente do Secret Manager fornecida com o SDK ABAP para Google Cloud.

2. Requisitos

  • Um navegador, como o Chrome ou o Firefox
  • Um projeto do Google Cloud com o faturamento ativado ou crie uma conta de teste sem custo financeiro de 90 dias para o Google Cloud Platform.
  • A GUI do SAP (Windows ou Java) instalada no seu sistema. Se a GUI do SAP já estiver instalada no seu notebook, conecte-se ao SAP usando o endereço IP externo da VM como o IP do servidor de aplicativos. Se você estiver usando um Mac, também poderá instalar a GUI do SAP para Java disponível neste link.

3. Antes de começar

6757b2fb50ddcc2d.png

  • Execute os comandos a seguir para autenticar sua conta e definir o projeto padrão como abap-sdk-poc. A zona us-west4-b é usada como exemplo. Se necessário, mude o projeto e a zona nos comandos a seguir de acordo com sua preferência.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Visão geral

Confira uma visão geral rápida de algumas das entidades do Secret Manager com que você vai trabalhar neste codelab:

  • Secret: um secret é um objeto global do projeto que contém uma coleção de metadados e versões de secrets.
  • Versão do secret: uma versão do secret armazena os dados reais do secret, como chaves de API, senhas ou certificados.

5. Ativar o Secret Manager no projeto do Google Cloud

  1. Acesse seu projeto do Google Cloud e clique em Ativar o Cloud Shell no canto superior direito.

8d15f753321c53e6.png

  1. Execute o comando a seguir para ativar a API Cloud Secret Manager no seu projeto do Google Cloud.
gcloud services enable secretmanager.googleapis.com

Agora a API Secret Manager está ativada no seu projeto do Google Cloud.

6. Criar uma conta de serviço com papéis de usuário do Secret Manager

Para criar uma conta de serviço com os papéis necessários, siga estas etapas:

  1. Execute o seguinte comando no terminal do Cloud Shell:
gcloud iam service-accounts create abap-sdk-secretmanager-tester \
--display-name="Service Account for Secret Manager"
  1. Adicione os papéis necessários à conta de serviço criada na etapa anterior para criar, adicionar e acessar uma versão do secret.
gcloud endpoints services add-iam-policy-binding secretmanager.googleapis.com \ --member='serviceAccount:abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/secretmanager.secrets.create'
gcloud endpoints services add-iam-policy-binding secretmanager.googleapis.com \ --member='serviceAccount:abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/secretmanager.versions.add'
gcloud endpoints services add-iam-policy-binding secretmanager.googleapis.com \ --member='serviceAccount:abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/secretmanager.versions.access'

Os comandos acima usam abap-sdk-poc como marcador de posição para o projeto do Google Cloud. Substitua abap-sdk-poc pelo ID do projeto.

  • Para verificar se a função foi adicionada, acesse a página IAM. A conta de serviço criada vai aparecer com a função atribuída a ela.

7. Criar um secret

  • No Cloud Shell, execute o comando a seguir para criar uma chave secreta com o nome "demo-secret" para este codelab:
gcloud secrets create demo-secret \
    --replication-policy="automatic"

Você vai conseguir ver um secret criado no seu projeto do Google Cloud, conforme mostrado abaixo.

99a318dbdd37af4e.png

8. Adicionar uma versão do secret

  1. No Cloud Shell, execute o comando a seguir para adicionar uma versão da chave secreta "demo-secret".
echo -n "This is my super secret data" | \
    gcloud secrets versions add demo-secret --data-file=-

Uma versão do secret é criada. Para ver os detalhes, clique em "demo-secret" .

bbf6b9f2f9c4340a.png

  1. Clique nos três pontos à direita e selecione Ver valor do secret. O secret armazenado vai aparecer.

6f3afd0ac25445bf.png

9. Criar configurações do SDK no SAP

Agora que você configurou os pré-requisitos no Google Cloud, podemos continuar com a configuração no SAP. Para a configuração relacionada à autenticação e conectividade, o ABAP SDK for Google Cloud usa a tabela /GOOG/CLIENT_KEY.

Para manter a configuração na tabela /GOOG/CLIENT_KEY, siga estas etapas:

  1. Na GUI do SAP, insira o código da transação SPRO.
  2. Clique em IMG de referência SAP.
  3. Clique em ABAP SDK for Google Cloud > Configurações básicas > Configurar chave do cliente.
  4. Mantenha os seguintes valores nos campos:

Campo

Descrição

Nome da chave do Google Cloud

SECRET_MANAGER_DEMO

Nome da conta de serviço do Google Cloud

abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com

Escopo do Google Cloud

https://www.googleapis.com/auth/cloud-platform

Identificador de projeto do Google Cloud

<<ID do seu projeto do Google Cloud>>

Classe de autorização

/GOOG/CL_AUTH_GOOGLE

Deixe os outros campos em branco.

10. Recuperar o secret usando o SDK

  1. Faça login no sistema SAP.
  2. Acesse o código de transação SE38 e crie um relatório com o nome "ZDEMO_ACCESS_SECRET".
  3. No pop-up que abrir, forneça os detalhes conforme mostrado abaixo e clique em Salvar.

b1ef7c7744ceb5ce.png

  1. No próximo pop-up, selecione Objeto local ou forneça um nome de pacote, conforme apropriado.
  • No Editor ABAP, adicione o seguinte código:
* Data declarations
 DATA:
   lv_p_projects_id TYPE string,
   lv_p_secrets_id  TYPE string,
   lv_p_versions_id TYPE string.

 TRY.
* Open HTTP Connection
     DATA(lo_client) = NEW /goog/cl_secretmgr_v1( iv_key_name = 'SECRET_MANAGER_DEMO' ).

* Populate relevant parameters
 lv_p_projects_id = lo_client->gv_project_id.
 lv_p_secrets_id = 'demo-secret'.
 lv_p_versions_id = 'latest'.

* Call API method: secretmanager.projects.secrets.versions.access
     lo_client->access_versions(
       EXPORTING
         iv_p_projects_id = lv_p_projects_id
         iv_p_secrets_id  = lv_p_secrets_id
         iv_p_versions_id = lv_p_versions_id
       IMPORTING
         es_output        = DATA(ls_output)
         ev_ret_code      = DATA(lv_ret_code)
         ev_err_text      = DATA(lv_err_text)
         es_err_resp      = DATA(ls_err_resp) ).
     IF lo_client->is_success( lv_ret_code ).
      cl_http_utility=>if_http_utility~decode_base64(
        EXPORTING
          encoded = ls_output-payload-data
        RECEIVING
          decoded = DATA(lv_decoded_secret) ).
       DATA(lv_msg) = 'Secret data fetched successfully, Decoded Secret: ' && lv_decoded_secret.
      cl_demo_output=>display( lv_msg ).
     ELSE.
       lv_msg = lv_ret_code && ':' && lv_err_text.
       cl_demo_output=>display( lv_msg ).

     ENDIF.

* Close HTTP Connection
     lo_client->close( ).

   CATCH /goog/cx_sdk INTO DATA(lo_exception).
     MESSAGE lo_exception->get_text( ) TYPE 'E'.

 ENDTRY.
  1. Salve e ative o programa de relatórios.
  2. Execute o relatório (pressione F8).

Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:

24acec0fc2d4d18b.png

11. Parabéns

Parabéns! Você recuperou um secret armazenado no Secret Manager do Google Cloud Platform usando o ABAP SDK for Google Cloud.

O Google Cloud Secret Manager também tem outros recursos, como:

  • Como fazer patch em um secret
  • Como destruir uma versão do secret
  • Como excluir um secret

É possível invocar esses recursos do Secret Manager usando o ABAP SDK for Google Cloud nos seus aplicativos SAP.

12. Limpar

Se você não quiser continuar com os outros codelabs relacionados ao ABAP SDK for Google Cloud, faça a limpeza.

Excluir o projeto

  • Exclua o projeto do Google Cloud:
gcloud projects delete abap-sdk-poc

Excluir recursos individuais

  1. Exclua a instância de computação:
gcloud compute instances delete abap-trial-docker
  1. Exclua as regras de firewall:
gcloud compute firewall-rules delete sapmachine
  1. Exclua a conta de serviço:
gcloud iam service-accounts delete \
 abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com