NetopsWIFAuth.psm1

<#
  .Synopsis
  Displays a message.
  
  .Description
  Displays a message. Supports a message parameter.
  Will use the default message if no parameter is given.
  
  .Parameter Message
  The message to display.
  
  .Outputs
  System.String
  
  .Example
  # Show the default message.
  Show-Message
  
  .Example
  # Display a specific message.
  Show-Message -Message "Hello World!"
#>

Function Show-Message
{
    param( [string] $Message = "Default Message" )

    $Message
}
# Export-ModuleMember -Function Show-Message

<#
  .Synopsis
  Outputs workload identity credentials files.

  .Description
  Outputs workload identity credentials files.
  Wrapper around the gcloud iam workload-identity-pools create-cred-config command.
  Supports an OutputFolderPath parameter.
  Writes an access token file and a json credentials file to the filesystem:
  - "$OutputFolderPath/access-token-file"
  - "$OutputFolderPath/credentials.json"

  .Parameter Username
  The client_id of the workload, provided as part of the client_credentials by the API marketplace.
  For example: cbe6172c-af90-4735-868e-4a6e20c57396

  .Parameter Password
  The client_secret of the workload, provided as part of the client_credentials by the API marketplace.
  For example: 64947168-d1f6-4a23-8a1b-f262c7a2dcfd6ba1c089-93ae-5a9e-8429-6b932a806ee8

  .Parameter ServiceAccount
  The email address of the GCP service account being authenticated through Workload Identity Federation.
  For example: automation@tu-nfv-svc-test-project-01-np.iam.gserviceaccount.com

  .Parameter OutputFolderPath
  The filesystem path to the folder where the access token file and the json credentials file will be written.
  For example: /artifacts/credentials

  .Example
  Out-WorkloadCredentials -Username "cbe6172c-af90-4735-868e-4a6e20c57396" `
                          -Password "64947168-d1f6-4a23-8a1b-f262c7a2dcfd6ba1c089-93ae-5a9e-8429-6b932a806ee8" `
                          -ServiceAccount "automation@tu-nfv-svc-test-project-01-np.iam.gserviceaccount.com" `
                          -OutputFolderPath "/artifacts/credentials"
  
#>

Function Out-WorkloadCredentials
{
    Param (
        [string] $Username,
        [string] $Password,
        [string] $ServiceAccount,
        [string] $OutputFolderPath
    )

    $SecurePassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
    $Credential = New-Object "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassword
    $Body = @{ grant_type='client_credentials'; }
    $Response = Invoke-WebRequest `
                -Uri https://apigw-st.telus.com/st/token `
                -Authentication Basic `
                -Credential $Credential `
                -Method POST `
                -Body $Body
    
    $AccessToken = $Response.Content | ConvertFrom-Json | Select-Object -ExpandProperty access_token
    $AccessToken | Out-File -FilePath "${OutputFolderPath}/access-token-file"

    $Audience="projects/1022893644241/locations/global/workloadIdentityPools/cdo-telus-idp-wif-its04/providers/cdo-telus-idp-its04"
    gcloud iam workload-identity-pools create-cred-config ${Audience} `
        --service-account=${ServiceAccount} `
        --service-account-token-lifetime-seconds=3600 `
        --output-file="${OutputFolderPath}/credentials.json" `
        --credential-source-file="${OutputFolderPath}/access-token-file"
}