Como criar credenciais de conta de serviço de curta duração

Nesta página, explicamos como criar credenciais de curta duração para representar as identidades das contas de serviço.

As contas de serviço podem usar credenciais de curta duração para autenticar chamadas a APIs do Google Cloud e outras APIs que não são do Google. As credenciais de curta duração têm uma vida útil limitada, com durações de apenas algumas horas ou menos. As credenciais de curta duração para contas de serviço são úteis quando você precisa atribuir acesso limitado a recursos para contas de serviço confiáveis. Elas também oferecem menos risco do que as credenciais de longa duração, como as chaves de conta de serviço.

Os tipos de credenciais aceitos incluem tokens de acesso do OAuth 2.0, tokens de ID do OpenID Connect, JSON Web Tokens (JWTs) autoassinados e objetos binários autoassinados (blobs). Os tipos de credenciais mais usados são os tokens de acesso do OAuth 2.0 e os tokens de ID do OpenID Connect (OIDC). Alguns cenários de exemplo:

  • Token de acesso do OAuth 2.0: um token de acesso do OAuth 2.0 é útil para autenticar o acesso de uma conta de serviço às APIs do Google Cloud. Considere o exemplo de caso de uso a seguir: para receber permissões elevadas em um projeto, um administrador de serviço pode representar uma conta de serviço para chamar APIs do Google Cloud criando um token de acesso do OAuth 2.0 pertencente a essa conta de serviço. O token tem uma vida útil curta, por isso as permissões elevadas são temporárias. O uso de tokens de curta duração ajuda a implementar o princípio de privilégio mínimo em todas as identidades e recursos. Isso também pode ser útil quando há uma emergência em um ambiente de produção, e um administrador de serviço precisa de uma autorização elevada de curto prazo para depuração.

  • Token de ID do OIDC: útil para autenticar a identidade de uma conta de serviço nos serviços que aceitam o OpenID Connect. Considere o seguinte caso de uso de exemplo: ao criar um token de ID OIDC pertencente a uma conta de serviço, um serviço em execução no Google Cloud pode se autenticar em outro serviço implantado em um provedor de nuvem terceirizado, como um job de pipeline de dados. Se o serviço de destino estiver configurado com OIDC, a autenticação será bem-sucedida.

Antes de começar

Como criar uma conta de serviço

Para começar, crie uma nova conta de serviço.

Como fornecer as permissões necessárias

Há dois fluxos diferentes que permitem que o autor da chamada crie credenciais de curta duração para uma conta de serviço. Cada fluxo requer as permissões adequadas:

  • Solicitação direta: o autor da chamada é autenticado como uma Conta do Google ou uma conta de serviço e faz uma solicitação direta para criar credenciais de curta duração. Duas identidades estão envolvidas nesse fluxo: o autor da chamada e a conta de serviço para quem a credencial é criada.
  • Solicitação delegada: o autor da chamada é autenticado como uma Conta do Google ou uma conta de serviço, mas delega a solicitação a uma ou mais contas de serviço em uma cadeia de delegação. Nesse fluxo, várias contas de serviço atuam como intermediárias entre o autor da chamada original e a conta de serviço para a qual a credencial é criada. Cada conta de serviço na cadeia de delegação precisa ter as permissões exigidas para passar a solicitação.

    Esse fluxo é útil em cenários onde um projeto contém camadas de contas de serviço com privilégios limitados, cada uma configurada para realizar uma função específica ou limitada em determinados recursos. Por exemplo, uma conta de serviço só tem permissões para recursos do Cloud Storage, outra apenas para recursos do Compute Engine e assim por diante. Para delegar com êxito uma solicitação nas contas de serviço, cada uma precisa estar listada na cadeia de delegação.

Permissões de solicitação direta

Conforme descrito em Como conceder as permissões necessárias nesta página, uma solicitação direta envolve apenas duas identidades: a do autor da chamada e da conta de serviço para a qual a credencial é criada. Nesse fluxo, considere as seguintes identidades:

  • Conta de serviço 1 (SA_1), o autor da chamada que emite a solicitação para as credenciais de curta duração.
  • Conta de serviço 2 (SA_2), a conta com privilégios limitados para a qual a credencial é criada.

Para dar permissões SA_1 para criar credenciais de curta duração, conceda o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator) em SA_2. Este é um exemplo da conta de serviço SA_2 que está sendo tratada como um recurso: quando você concede o papel em SA_2, você atualiza a política do IAM da mesma maneira que atualizaria qualquer outro recurso.

As etapas a seguir usam a API REST para conceder o papel. No entanto, também é possível usar o Console do Cloud ou a CLI gcloud.

API

Primeiro, leia a política de permissão para SA_2:

O método serviceAccounts.getIamPolicy recebe a política de permissão de uma conta de serviço

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_2: o nome da conta de serviço 2.
  • POLICY_VERSION: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

Corpo JSON da solicitação:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:[email protected]"
      ]
    }
  ]
}

Se você não atribuiu um papel à conta de serviço, a resposta conterá apenas um valor etag. Inclua esse valor etag na próxima etapa.

Em seguida, modifique a política para atribuir a SA_1 o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator).

Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role": "roles/iam.serviceAccountTokenCreator",
      "members": [
        "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
      ]
    }
  ]
}

Por fim, escreva a política de permissão atualizada:

O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_2: o nome da conta de serviço 2.
  • POLICY: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.

    Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua POLICY pelo seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:[email protected]"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

Corpo JSON da solicitação:

{
  "policy": POLICY
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política de permissão atualizada.

Permissões de solicitação delegada

Conforme descrito em Como conceder as permissões necessárias nesta página, uma solicitação delegada envolve mais de duas identidades: o autor da chamada, uma ou mais contas de serviço em uma cadeia de delegação e, por fim, a conta de serviço. Nesse fluxo, considere as seguintes identidades:

  • Conta de serviço 1 (SA_1), o autor da chamada que emite a solicitação para as credenciais de curta duração.
  • Conta de serviço 2 (SA_2), uma conta de serviço intermediária que delegará a solicitação inicial a SA_3.
  • Conta de serviço 3 (SA_3), a conta com privilégios limitados para a qual a credencial é criada.

Para permitir a delegação, cada conta precisa conceder o papel Criador do token da conta de serviço (roles/iam.serviceAccountTokenCreator) à conta anterior na cadeia.

Neste exemplo específico, é necessário atribuir a SA_1 o papel de "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator) em SA_2. Este é um exemplo da conta de serviço SA_2 que está sendo tratada como um recurso: quando você concede o papel em SA_2, você atualiza a política do IAM da mesma maneira que atualizaria qualquer outro recurso.

Nesse fluxo de exemplo, há apenas uma conta de serviço intermediária. Para delegar acesso por mais de uma conta de serviço, você também precisa atribuir esse papel a qualquer outra conta de serviço na cadeia.

Em seguida, SA_2 também precisa receber o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator) em SA_3. Isso permite que SA_2 crie credenciais de curta duração para SA_3.

As etapas a seguir usam a API REST para conceder os papéis. No entanto, também é possível usar o Console do Cloud ou a CLI gcloud.

API

Primeiro, veja a política do IAM para SA_2 (a conta de serviço intermediária):

O método serviceAccounts.getIamPolicy recebe a política do IAM de uma conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_2: o nome da conta de serviço 2.
  • POLICY_VERSION: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

Corpo JSON da solicitação:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:[email protected]"
      ]
    }
  ]
}

Se você não tiver concedido um papel à conta de serviço, a resposta conterá apenas um valor etag. Inclua esse valor etag na próxima etapa.

Em seguida, modifique a política para atribuir a SA_1 o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator).

Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role": "roles/iam.serviceAccountTokenCreator",
      "members": [
        "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
      ]
    }
  ]
}

Depois, escreva a política de permissão atualizada para SA_2:

O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_2: o nome da conta de serviço 2.
  • POLICY: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.

    Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua POLICY pelo seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:[email protected]"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

Corpo JSON da solicitação:

{
  "policy": POLICY
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política de permissão atualizada.

Agora, veja a política do IAM para SA_3 (a conta de serviço para quem a credencial é criada):

O método serviceAccounts.getIamPolicy recebe a política do IAM de uma conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_3: o nome da conta de serviço 3.
  • POLICY_VERSION: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_3@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

Corpo JSON da solicitação:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:[email protected]"
      ]
    }
  ]
}

Se você não atribuiu um papel à conta de serviço, a resposta conterá apenas um valor etag. Inclua esse valor etag na próxima etapa.

Em seguida, modifique a política para atribuir a SA_2 o papel "Criador de token da conta de serviço" (roles/iam.serviceAccountTokenCreator).

Por exemplo, para modificar a resposta de amostra da etapa anterior, adicione o seguinte:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:[email protected]"
      ]
    },
    {
      "role": "roles/iam.serviceAccountTokenCreator",
      "members": [
        "serviceAccount:SA_2@PROJECT_ID.iam.gserviceaccount.com"
      ]
    }
  ]
}

Por fim, escreva a política de permissão atualizada:

O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_3: o nome da conta de serviço 3.
  • POLICY: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.

    Por exemplo, para definir a política de permissão mostrada na etapa anterior, substitua POLICY pelo seguinte:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:[email protected]"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SA_2@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_3@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

Corpo JSON da solicitação:

{
  "policy": POLICY
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política de permissão atualizada.

Como solicitar credenciais de curta duração

Depois de conceder os papéis apropriados a cada identidade, solicite credenciais de curta duração para a conta de serviço pretendida. Os seguintes tipos de credenciais são aceitos:

Para entender como especificar uma cadeia de delegação para essas solicitações, consulte a seção Como especificar uma cadeia de delegação nesta página.

Como gerar um token de acesso do OAuth 2.0

Por padrão, os tokens de acesso do OAuth 2.0 são válidos por no máximo uma hora (3.600 segundos). No entanto, é possível estender o ciclo de vida máximo desses tokens para 12 horas (43.200 segundos). Para fazer isso, identifique as contas de serviço que precisam de um ciclo de vida estendido para tokens e adicione essas contas de serviço a uma política da organização que inclua a restrição de lista constraints/iam.allowServiceAccountCredentialLifetimeExtension. É possível especificar um ciclo de vida de até 43.200 segundos ao criar um token para essas contas de serviço.

Para gerar um token de acesso do OAuth 2.0 para uma conta de serviço, faça o seguinte:

API

O método serviceAccounts.generateAccessToken da API Service Account Credentials gera um token de acesso do OAuth 2.0 para uma conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • SA_NAME: o nome da conta de serviço para a qual você quer criar um token.
  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • DELEGATES: se você estiver usando um fluxo de solicitação delegada, consulte Como especificar uma cadeia de delegação nesta página. Se você estiver usando um fluxo de solicitação direta sem delegação, omita o campo delegates no corpo da solicitação.
  • LIFETIME: o tempo até o token de acesso expirar, em segundos. Por exemplo, 300s.

    Por padrão, o ciclo de vida máximo do token é de uma hora (3,600 segundos). Para aumentar o ciclo de vida máximo desses tokens para 12 horas (43.200 segundos), adicione a conta de serviço a uma política da organização que inclua a restrição de lista constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Método HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateAccessToken

Corpo JSON da solicitação:

{
  "delegates": [
    DELEGATES
  ],
  "scope": [
    "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "LIFETIME"
}

Para enviar a solicitação, expanda uma destas opções:

Se a solicitação generateAccessToken for bem-sucedida, o corpo da resposta conterá um token de acesso do OAuth 2.0 e um prazo de validade. O accessToken poderá ser usado para autenticar uma solicitação em nome da conta de serviço até que o expireTime seja atingido.

{
  "accessToken": "eyJ0eXAi...NiJ9",
  "expireTime": "2020-04-07T15:01:23.045123456Z"
}

Como gerar tokens Connect ID do OpenID

Os tokens de ID do OpenID Connect são válidos por 1 hora (3.600 segundos). Para gerar um token de ID para uma conta de serviço, faça o seguinte:

API

O método serviceAccounts.generateIdToken da API Service Account Credentials gera um token de ID do OpenID Connect para uma conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • SA_NAME: o nome da conta de serviço para a qual você quer criar um token.
  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • AUDIENCE_NAME: o público-alvo do token, geralmente o URL do aplicativo ou serviço que o token será usado para acessar.

Método HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateIdToken

Corpo JSON da solicitação:

{
  "audience": "AUDIENCE_NAME",
  "includeEmail": "true"
}

Para enviar a solicitação, expanda uma destas opções:

Se a solicitação generateId for bem-sucedida, o corpo da resposta conterá um token de ID válido por 1 hora: O token pode ser usado para autenticar uma solicitação em nome da conta de serviço:

{
  "token": "eyJ0eXAi...NiJ9"
}

Como criar um JSON Web Token (JWT) autoassinado

Os JSON Web Tokens (JWTs) autoassinados são úteis em vários cenários, como:

  • Autenticar uma chamada para uma API Google, conforme descrito no Guia de autenticação do Google.
  • Comunicações seguras entre o Google Cloud ou serviços que não são do Google, como aplicativos do App Engine. Nesse cenário, um aplicativo pode assinar um token a ser verificado por outro aplicativo para fins de autenticação.
  • Tratar uma conta de serviço como provedor de identidade assinando um JWT que contenha declarações arbitrárias sobre um usuário, uma conta ou um dispositivo.

Para gerar um JWT autoassinado para uma conta de serviço, faça o seguinte:

API

O método serviceAccounts.signJwt da API Service Account Credentials assina um JWT usando uma chave privada da conta de serviço gerenciada pelo sistema.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • SA_NAME: o nome da conta de serviço para a qual você quer criar um token.
  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • DELEGATES: se você estiver usando um fluxo de solicitação delegada, consulte Como especificar uma cadeia de delegação nesta página. Se você estiver usando um fluxo de solicitação direta sem delegação, omita o campo delegates no corpo da solicitação.
  • JWT_PAYLOAD: o payload de JWT a ser assinado, que é um objeto JSON contendo um conjunto de declarações do JWT. Inclua as declarações necessárias para o caso de uso pretendido e para atender aos requisitos de validação do serviço que você está chamando. Se você estiver chamando uma API do Google, consulte o Guia de autenticação do Google para conhecer os requisitos da declaração.

    A declaração exp (prazo de validade) precisa ser definida como, no máximo, 12 horas no futuro. Se você estiver chamando uma API do Google, a declaração exp precisará ser definida como, no máximo, uma hora.

    O payload de exemplo a seguir contém declarações para chamar uma API do Google, em que EXP é um carimbo de data/hora inteiro que representa o prazo de validade:

    { \"iss\": \"SA_NAME@PROJECT_ID.iam.gserviceaccount.com\", \"sub\": \"SA_NAME@PROJECT_ID.iam.gserviceaccount.com\", \"aud\": \"https://firestore.googleapis.com/\", \"iat\": 1529350000, \"exp\": EXP }

Método HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:signJwt

Corpo JSON da solicitação:

{
  "delegates": [
    DELEGATES
  ],
  "payload": "JWT_PAYLOAD"
}

Para enviar a solicitação, expanda uma destas opções:

Se a solicitação signJwt for bem-sucedida, o corpo da resposta conterá um blob assinado e o ID da chave de assinatura que foi usada para assiná-lo. Use o valor signedJwt como um token do portador para autenticar diretamente uma solicitação em nome da conta de serviço. O token será válido até o tempo de expiração especificado na solicitação:

{
  "keyId": "42ba1e...fc0a",
  "signedJwt": "eyJ0eXAi...NiJ9"
}

Como criar um blob autoassinado

Os blobs autoassinados são úteis em cenários em que você precisa transmitir com segurança dados binários arbitrários, geralmente para fins de autenticação. Por exemplo, se você quiser usar um protocolo/tipo de token personalizado (não JWT), inclua esses dados em um blob assinado para uso por um serviço downstream.

Para gerar um blob autoassinado para uma conta de serviço, faça o seguinte:

API

O método serviceAccounts.signBlob da API Service Account Credentials assina um blob usando uma chave privada da conta de serviço gerenciada pelo sistema.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • SA_NAME: o nome da conta de serviço para a qual você quer criar um token.
  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • DELEGATES: se você estiver usando um fluxo de solicitação delegada, consulte Como especificar uma cadeia de delegação nesta página. Se você estiver usando um fluxo de solicitação direta sem delegação, omita o campo delegates no corpo da solicitação.
  • BLOB_PAYLOAD: uma string de bytes codificada em base64. Por exemplo, VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu.

Método HTTP e URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:signBlob

Corpo JSON da solicitação:

{
  "delegates": [
    DELEGATES
  ],
  "payload": "BLOB_PAYLOAD"
}

Para enviar a solicitação, expanda uma destas opções:

Se a solicitação signBlob for bem-sucedida, o corpo da resposta conterá um blob assinado e o ID da chave de assinatura que foi usada para assiná-lo. Use o valor signedBlob como um token do portador para autenticar diretamente uma solicitação em nome da conta de serviço. O token será válido até que a chave privada da conta de serviço gerenciada pelo sistema expire. O ID dessa chave é o valor do campo keyId na resposta.

{
  "keyId": "42ba1e...fc0a",
  "signedBlob": "eyJ0eXAi...NiJ9"
}

Como especificar uma cadeia de delegação

Ao usar um fluxo de solicitações delegadas para criar credenciais de conta de serviço de curta duração, o corpo da solicitação de cada API precisa especificar a cadeia de delegação da conta de serviço na ordem correta e no seguinte formato:

projects/-/serviceAccounts/SA_ID

Substitua SA_ID pelo ID numérico exclusivo da conta de serviço ou pelo endereço de e-mail da conta de serviço.

Por exemplo, em uma cadeia de delegação que flui de SA_1 (autor da chamada) para SA_2 (delegada) para SA_3 (delegada) para SA_4, o campo delegates[] conteria SA_2 e SA_3 na seguinte ordem:

{
  "delegates": [
    "projects/-/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com",
    "projects/-/serviceAccounts/SA_3@PROJECT_ID.iam.gserviceaccount.com"
  ]
}

O autor da chamada e a conta de serviço para a qual a credencial é criada não são incluídos na cadeia de delegação.