Nicolas Couture - Linux, BASH, Python, JS, TS, Cloud, DevOps, SRE, Network, Security IAM/PAM

Nicolas Couture - Linux, BASH, Python, JS, TS, Cloud, DevOps, SRE, Network, Security IAM/PAM

Skills & Expertise

Highly self-driven, highly organized expert with 20 years of professional experience working primarily on systems and infrastructures powered by Linux since 2001 and infratructures, experienced with Window in the context of Identity, Access, and Privileged Access management (AD, Azure AD, LDAP, SAML), worked with on-premises up to hybrid cloud environments, contributed to developing and streamlining DevOps and SRE practices in the enterprise. Specialized in UNIX-like OSes, system administration, infrastructure automation, configuration management, and security. Proven ability to design, implement, and automate cloud solutions for improved efficiency, security, and scalability. Eager to leverage expertise in Azure, Google Cloud, OCI, and AWS to contribute to innovative cloud initiatives. Have been on the fron-line of innovation surronding Linux occupying roles directly involved in developing and working with the new tools of the trade as they became stremline, all the way to container orchestration I understand every step necessary to execute a single step in a CI/CD pipeline, all the way down to the Kernel functionalities and Linux software and tools required to execute them.

Preferred method of contact is <a href="tel:+1-514-688-7124">by phone</a>.

Cloud Service Providers

  • Google Cloud Platform
  • Azure
  • AWS

DevOps & SRE

  • CI/CD pipelines
  • Infrastructure automation
  • BASH, Python, HCL
  • Docker, Podman, Containers
  • Terraform, Infrastructure as Code (IaC)
  • ARM, Bicep, Vault, Packer
  • PowerShell, YAML, ELisp

Security

  • Identity and Access Management (IAM)
  • Privileged Access Management (PAM)
  • Secret Management

Linux Administration

  • Linux Kernel
  • Packaging (DEBs, RPMs)
  • Managing Standard Internet Services
  • Networking
  • Database Administration
  • Debian, RHEL
  • Security / Hardening
  • Configuration Automation
  • Deployment Automation
  • Containerization
    • Docker, Podman
    • Compose, Swarm, Kubernetes
  • Orchestration

Monitoring & Troubleshooting

  • Proactive approach to system health and performance

Professional Experience

Founding CTO - Stormvault Networks

  • Offering expert services in building resilient teams
  • Implementing automation tools for small and medium businesses
  • Develop workshops on my latest deliveries
  • Increase team expertise by developing and presenting workshops
  • Serious about performance and strong team player
  • Building, optimizing, and troubleshooting:

Technologies: Software development, Terraform IaaC, BASH, Github Actions CI/CD pipelines, Google Cloud, Architecting Asynchrounous Event-Driven Workflows, IAM, PAM, WIF, ABAC, RBAC, Secret Management, OAuth2 Client and Provider, OpenID Connect, MFA, Certificate Management, Single Sign-On (SSO), Identity Federation, and Privileged Access Management

Senior Hybrid-Cloud Infrastructure Engineer, Ubisoft Canada | 2023-2024

  • Designed and implemented robust hybrid cloud solutions for Ubisoft's game development environment, leveraging Azure expertise
  • Automated provisioning, configuration management, and application deployments using Azure DevOps pipelines across a hybrid multi-cloud Dotnet microservices infrastructure
  • Managed infrastructure as code (IaC) with Bicep and Terraform, ensuring consistent, scalable deployments across on-premises, Azure, Google Cloud, and AWS environments
  • Collaborated with senior development managers to integrate Azure, GCP, AWS, and Alibaba Cloud services, enhancing security and performance of game deployments
  • Configured MultiClusterIngress for GKE Services with Anthos Service Mesh, deploying both external and internal Google Load Balancers (GCLB/ILB) for efficient traffic management
  • Deployed Locust for comprehensive load testing across regions, simulating millions of user sessions to ensure game readiness, facilitated by ASM ingress gateways
  • Improved load-testing deployment processes, cutting deployment time by >50% and reducing errors through optimized CI/CD pipelines, utilizing CI/CD container automation in Gitlab, Hashicorp Vault, Artifact registries, etc.

Technologies: Linux, DevOps, Google Cloud, Google Kubernetes Engine, Python, Locust, E2E/End-to-End Load Tests, Advanced GitLab CI/CD pipelines, HashiCorp Vault, Writing Dockerfiles, Automating builds, Advanced CI/CD pipelines, GitLab, Secret Management, Alibaba Cloud, IAM, PAM, Azure DevOps, ARM Templates, Bicep, Anthos Service Mesh, Terraform, AWS, Hybrid Cloud Solutions, MCI, Google Load Balancers (GCLB/ILB)

Senior Developer Productivity Engineer, Invue Security Products | 2021-2023 (remote)

  • Joined Invue at a strategic time when the Software Engineering department was focused on converting a Node.js monolith into microservices
  • Migrated the monolith's legacy infrastructure from AWS to Google Cloud, transitioning from inefficient, costly Compute Engine instances to Kubernetes
  • Facilitated the migration of the microservice architecture running on Kubernetes to Microsoft Azure Cloud
  • Architected a streamlined microservice infrastructure by automating the build and containerization of existing microservices
  • Developed an MVP of the cluster's infrastructure using Docker Compose, which allowed developers to run the entire setup locally in a consistent and reproducible manner, thereby eliminating the need for shared, costly cloud-based development environments
  • Enhanced developer proficiency in DevOps practices as measured by a 100% increase in contributions to CI/CD pipelines skill use by developers after conducting workshops and training sessions
  • Implemented CI/CD pipeline processes to improve code quality, security, and automated tests
  • Modernized their DevOps practices by adopting sound CI/CD pipelines effectively replacing Ansible with Terraform and brought Terraform Cloud into the enterprise, as well as Hashicorp Vault, leading to significant reductions in manual interventions and enhanced consistency in provisioning
  • Elevated security as measured by improved secret management protocols and cloud IAM processes, enhancing the overall security posture

Technologies: JavaScript, TypeScript, Advanced Build Processes, Security, Secret Management, Identity and Access Management, Docker, Github, Github Actions, Kubernetes, Google Kubernetes Service, Azure Kubernetes Service, Amazon Kubernetes Services, Spinnaker, Automation, BASH, Terraform, Terraform Cloud, Hashicorp Vault, Linux, DevOps

GCP / Workspace Cloud Identity and Access Management Consultant / Google Cloud Integrator, Big Data & Artificial Intelligence, Innovation & AI Team, Desjardins | 2020-2021 (remote)

  • Collaborated within a multidisciplinary team to enhance security for Desjardins' Big Data solutions in Google Cloud Platform, Google Workspace, and Google Marketing solutions (Analytics, AdWords, Search Console, Maps)
  • Led a large-scale account and access management migration project, synchronizing Desjardins' user identities for Single Sign-On (SSO) and transitioning access from user-owned to corporate accounts, ensuring uninterrupted service for thousands of users
  • Developed a governance strategy for unmanaged accounts, eliminating consumer-type accounts with access to corporate resources and ensuring all corporate identities were securely managed
  • Automated data mining tasks for user data migration using advanced LDAP queries with Active Directory, enhancing efficiency and accuracy
  • Identified and disabled consumer-type accounts, securing Google Cloud resources owned by the firm
  • Created proof of concepts to evaluate Big Data solutions for marketing and analytics teams using Google Cloud technologies

Technologies: Google Cloud Identity, Active Directory, LDAP, SAML, Terraform, Vault, Linux, GitLab, BigQuery, BASH, Python, Cloud Operations, Apache Beam, Apache Airflow

E-commerce Information System Environment Manager, Decathlon | 2019-2020

  • Ensured e-commerce infrastructure availability around the clock
  • Maintained infrastructure-as-code and performed manual system administration on legacy infrastructures
  • Designed a multi-cloud solution used to facilitate the migration of the platform to a different cloud vendor
  • Centralized application logging and implemented log-based metrics used to create dashboards and visualize data
  • Implemented system monitoring and service health checks
  • Increased e-commerce average page load speed by >30%

Technologies: Terraform, Linux, Gitlab, Docker, Docker Compose, Kubernetes, AWS, GCP, Apache, NGINX, Python, PHP, BASH, Django, Redis, Github Actions, Slack API

Senior DevOps Engineer, Square-Enix | 2018-2019

  • Deployed and configured multi-regional Kubernetes clusters with Istio service mesh using Google Kubernetes Engine, and Helm
  • Implemented multi-regional, Spinnaker k8s clusters for continuous delivery and canary deployments with automated pipelines triggered by container image tags

Technologies: Google Kubernetes Engine (GKE), Istio Service Mesh, Helm, Spinnaker, NGINX Load Balancer, Istio RouteRules, Private Container Registry, Kubernetes, Continuous Delivery, Canary Deployments, Blue/Green Deployments, Automated Pipelines

Founder, Kisscalls | 2016-2018

Technologies: Python, Django, REST framework, OAuth2, Dialogflow, Google Assistant, App Engine, Polymer, Material Design, WebRTC, Firebase Hosting, Firebase Database, Cloud Functions, Express.js, Twilio, GCP, Github, Google Data Studio, Sendgrid

IT and Medical Imaging Consultant, Dossier santé Québec M.S.S.S. | 2015

  • Acceptance testing of provincial-wide, multi-vendor, RIS, PACS, DIR solution
  • Installation and migration of large scale on-prem Oracle databases servers with replication across 3 central locations in the province of Quebec via private WAN
  • Automated asynchronous load and conformance tests
  • Developed a domain-specific language to automate end-to-end tests by writing YAML instead of a programming language

Technologies: Linux, DICOM, HL7, RIS, PACS, XDS, Python, BASH, Agfa IMPAX, dcm4chee

Enterprise Infrastructure Associate, Morgan Stanley | 2014-2016

  • Supported 5 enterprise web portals (50k daily users)
  • Performed manual production rollouts on the products I owned
  • Automated a subset of these production upgrades and progressive rollouts
  • Developed our groups' IAM strategy during the first firm-wide rollout of MS's proprietary Identity and Access Management system
  • Created a firm-wide wiki that lives on to this day and has had hundreads of daily users during my stay

Technologies: Linux, Organizaional skills, Self-driven, Read and wrote documentation, Tomcat, Java, PostgreSQL, Adobe Experience Manager, Oracle Database Server on-prem administration, Python, BASH, Identity and Access Management

IAM & PAM Solutions Architect, Hitachi ID Systems | 2012-2014

  • Tailored identity and access management solution for fortune 500 companies

Technologies: Windows Server, Active Directory, Database Management, Oracle Database <12, Lotus Notes, Solaris, Linux, AS/400, LDAP, Python, Twisted, Identity and Access Management, HTML, LaTeX, m4, BASH

Integration Specialist, Technidata Medical Software | 2009-2012

  • Deployed laboratory information systems

Technologies: Windows 2008 R2, RedHat Enterprise Linux, Solaris, AIX

Deployment Specialist and PACS Analyst, Intelerad | 2005-2008

  • Deployed and upgraded large scale digital radiology software (100+ servers, 300+ RPMs)
  • Investigated and documented system issues working closely with developers

Technologies: Linux, RHEL, BASH, Perl, Python, DICOM, HL7

Linux System Administrator Internship, Commission Scolaire de Montreal + other employments | 2002-2004

  • Installation, configuration, and administration of Linux servers, Linux Terminal Server (thinclients), shell scripting automation

Technologies: Debian, RedHat, Cyrus, LTSP, Sendmail, Popa3d, Courier-IMAP, Bind (DNS), Yellow Pages (NIS), Firewall (IPTables), Nagios, Postfix, PostgreSQL

Top Skills

  • Linux
  • BASH
  • Python
  • Security
  • Automation
  • Collaboration
  • Organization
  • DevOps Practices
  • SRE Practices
  • Containerization
  • Cloud Native Technologies

Regulatory Frameworks Experience

  • GDPR
  • ISO 27001
  • HIPAA
  • PCI DSS

Certifications

  • Linux Professional (Canonical)
  • Microsoft Security Professional Microsoft - January 2025
  • Microsoft Security: Concepts, Solutions, and AI-Powered Protection Microsoft - January 2025
  • GitHub Professional Certificate GitHub - December 2024
  • Docker Professional Certificate Docker - October 2024
  • Digital Marketing Fundamentals (Google) - Credential ID: MMZ UPE 2V8
  • Startup School (Y Combinator) - Credential ID: 10738466
  • Mobile Site Certification (Google) - Issued May 2017
  • Linux Security (Savoir-faire Linux) - Issued 2001
  • Linux Administration (Savoir-faire Linux) - Issued 2001
  • Linux Basics (Savoir-faire Linux) - Issued 2001

Google Cloud

  • Google Developer Profile
  • Developing a Google SRE Culture Coursera
  • Reliable Google Cloud Infrastructure: Design and Process (Coursera)
  • Google Cloud Fundamentals: Core Infrastructure (Coursera)
  • Preparing for your Professional Cloud Architect Journey (Google) - Jun. 2024
  • Generative AI with the Vertex AI Gemini API (Google) - Jun. 2024
  • Developing a Google SRE Culture (Google) - Feb. 2024
  • Managing Cloud Infrastructure with Terraform (Google) - Jan. 2024
  • Google Cloud Fundamentals: Core Infrastructure (Google) - Feb. 2024
  • Kubernetes in Google Cloud ((Google)) - Feb. 2020
  • Baseline: Data, ML, AI (Google) - Feb. 2020

Education - Continuous Learning Journey

  • Education: IT Management and Computer Science foundations with focus on UNIX-like operaring systems
  • Professional Development: 20+ industry certifications spanning cloud architecture, security, and engineering excellence
  • Self-Directed Learning: Consistent investment in emerging technologies through hands-on exploration
  • Knowledge Exchange: Regular contributor to technical communities and open-source initiatives

Volunteer Experience

  • PyCon US (Python Software Foundation) - 2015 & 2016
  • Linux-Québec / Facil - 2003-2004
  • M.LU.G. - 1999-2004

Contact Information

Google Cloud Command-line Examples

Google Cloud Commands

All Google Cloud commands are self-documented, most ship with Bash and Zsh auto-completion profiles.

Their official documentation is available online at https://cloud.google.com/sdk/gcloud/reference/.

gcloud

You can use gcloud to create and manage:

  • Google Compute Engine virtual machine instances and other resources
  • Google Cloud SQL instances
  • Google Container Engine clusters
  • Google Cloud Dataproc clusters and jobs
  • Google Cloud DNS managed zones and record sets
  • Google Cloud Deployment manager deployments
  • Deploy App Engine applications
  • Perform other tasks against Alpha and Beta Cloud Platform services

gsutil

You can use gsutil to:

  • Create and manage Cloud Storage buckets
  • Upload objects to buckets, and download and delete them
  • Move, copy and rename objects
  • Manage access to stored data

bq

You can use bq to manage datasets, tables and other entities in BigQuery, as well as run queries on your data.

appcfg.py

Manage App Engine instances.

dev_appserver.py

Local App Engine development server.

Configuration

Install Google Cloud SDK

   curl https://sdk.cloud.google.com | bash

Warning: You can verify the SSL certificate using curl –cacert <certificate> and this root CA:

   # Operating CA: Symantec (GeoTrust)
   # Issuer: CN=GeoTrust Global CA O=GeoTrust Inc.
   # Subject: CN=GeoTrust Global CA O=GeoTrust Inc.
   # Label: "GeoTrust Global CA"
   # Serial: 144470
   # MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5
   # SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12
   # SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a
   -----BEGIN CERTIFICATE-----
   MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
   MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
   YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
   EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
   R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
   9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
   fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
   iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
   1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
   bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
   MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
   ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
   uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
   Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
   tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
   PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
   hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
   5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
   -----END CERTIFICATE-----

Install App Engine Python Standard Environment

gcloud components install app-engine-python

List Available Components

gcloud components list

Your current Cloud SDK version is: 123.0.0
The latest available version is: 123.0.0

┌──────────────────────────────────────────────────────────────────────────────────────────┐
│                                        Components                                        │
├───────────────┬───────────────────────────────────┬──────────────────────────┬───────────┤
│     Status    │                Name               │            ID            │    Size   │
├───────────────┼───────────────────────────────────┼──────────────────────────┼───────────┤
│ Not Installed │ App Engine Go Extensions          │ app-engine-go            │  46.3 MiB │
│ Not Installed │ Cloud Datastore Emulator          │ cloud-datastore-emulator │  16.1 MiB │
│ Not Installed │ Cloud Datastore Emulator (Legacy) │ gcd-emulator             │  38.1 MiB │
│ Not Installed │ Cloud Pub/Sub Emulator            │ pubsub-emulator          │  16.3 MiB │
│ Not Installed │ gcloud Alpha Commands             │ alpha                    │   < 1 MiB │
│ Not Installed │ gcloud Beta Commands              │ beta                     │   < 1 MiB │
│ Not Installed │ gcloud app Java Extensions        │ app-engine-java          │ 135.6 MiB │
│ Not Installed │ gcloud app Python Extensions      │ app-engine-python        │   7.2 MiB │
│ Not Installed │ kubectl                           │ kubectl                  │  11.4 MiB │
│ Installed     │ BigQuery Command Line Tool        │ bq                       │   < 1 MiB │
│ Installed     │ Cloud SDK Core Libraries          │ core                     │   4.1 MiB │
│ Installed     │ Cloud Storage Command Line Tool   │ gsutil                   │   2.8 MiB │
│ Installed     │ Default set of gcloud commands    │ gcloud                   │           │
└───────────────┴───────────────────────────────────┴──────────────────────────┴───────────┘
To install or remove components at your current SDK version [123.0.0], run:
  gcloud components install COMPONENT_ID
  gcloud components remove COMPONENT_ID

To update your SDK installation to the latest version [123.0.0], run:
  gcloud components update

Update Components

gcloud components update

Install App Engine Components

gcloud components install app-engine-python gcd-emulator pubsub-emulator cloud-datastore-emulator


Your current Cloud SDK version is: 123.0.0
Installing components from version: 123.0.0

┌──────────────────────────────────────────────────────────────┐
│             These components will be installed.              │
├───────────────────────────────────┬───────────────┬──────────┤
│                Name               │    Version    │   Size   │
├───────────────────────────────────┼───────────────┼──────────┤
│ Cloud Datastore Emulator          │         1.1.1 │ 16.1 MiB │
│ Cloud Datastore Emulator (Legacy) │ v1beta3-1.0.0 │ 38.1 MiB │
│ Cloud Pub/Sub Emulator            │    2016.08.19 │ 16.3 MiB │
│ gcloud app Python Extensions      │        1.9.40 │  7.2 MiB │
└───────────────────────────────────┴───────────────┴──────────┘

[...]

GCloud Authentication

Project-level authentication:

gcloud auth login --project=<project ID>

Configure Default Command Line Project

gcloud config set project <project ID>

Cloud Storage

Create a Cloud Storage bucket

gsutil mb gs://<bucket name>

List files in a Cloud Storage bucket

gsutil ls gs://<bucket>

Synchronize buckets and directories files

gsutil -m rsync --help

Cloud Storage ACL with gsutil

Make bucket files world-readable:

gsutil acl ch -u AllUsers:R gs://<bucket>/<object>

Compute Engine

Copy files to/from a Compute Engine instance

gcloud compute copy-files [LOCAL_FILE_PATH] [INSTANCE_NAME]:~/

List Compute Engine Instances

gcloud compute instances list

Connect via SSH

gcloud compute ssh <instance name>

Create an instance with a GPU

gcloud beta compute instances create gpu-instance-1 \
    --machine-type n1-standard-2 --zone us-east1-d \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud \
    --maintenance-policy TERMINATE --restart-on-failure \
    --metadata startup-script='#!/bin/bash
    echo "Checking for CUDA and installing."
    if ! dpkg-query -W cuda; then
      curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      apt-get update
      apt-get install cuda -y
    fi'

App Engine

Deploy Application

gcloud app 
appcfg.py update -A <project ID> -V <version> <src>

Run Python App Engine application locally

dev_appserver.py <src>

with application debug log level:

dev_appserver.py --log_level debug <src>

with application server debug logging:

dev_appserver.py --dev_appserver_log_level debug <src>

with both:

dev_appserver.py --log_level debug --dev_appserver_log_level debug <src>

List App Engine Instances

gcloud app instances list

Read App Engine Logs

gcloud app logs read

Stop App

gcloud compute instances stop <instance-name> <instance-name> ...

Spawn a remote Python shell

In order to have access to the remoteapi, it must first be deployed with the option enabled1:

builtins:
  - remote_api: on
remote_api_shell.py -s <project-id>.appspot.com

ref: https://cloud.google.com/appengine/docs/python/tools/remoteapi

Describe a service version

gcloud app versions describe -s default v1

Stackdriver Logging

Errors within last 10 minutes

gcloud beta logging read --freshness="10m" "severity>=ERROR"

Cloud DNS

List Managed Zones

gcloud dns managed-zones list

output:

NAME              DNS_NAME           DESCRIPTION
example-zone      example.com.

Describe Existing Zone

gcloud dns managed-zones describe <zone-name>

Add DNS Record

Here is an example of creating a CNAME record named my-cname.example.com that points to cname.value.example.org

$ gcloud dns record-sets transaction start -z <zone-name>
Transaction started [transaction.yaml]
$ gcloud dns record-sets transaction add -z <zone-name> --ttl <seconds> --type CNAME --name my-cname.example.com cname.value.example.org.
Record addition appended to transaction at [transaction.yaml]
$ gcloud dns record-sets transaction describe -z <zone-name>
additions:
- kind: dns#resourceRecordSet
  name: example.com
  rrdatas:
  - ns-cloud-e1.googledomains.com. cloud-dns-hostmaster.google.com. 3 21600 3600 259200
    <ttl seconds>
  ttl: 21600
  type: SOA
- kind: dns#resourceRecordSet
  name: mycname.example.com
  rrdatas:
  - cname.value.example.org.
  ttl: <ttl seconds>
  type: CNAME
deletions:
- kind: dns#resourceRecordSet
  name: example.com
  rrdatas:
  - ns-cloud-e1.googledomains.com. cloud-dns-hostmaster.google.com. 2 21600 3600 259200
    <ttl seconds>
  ttl: 21600
  type: SOA

$ gcloud dns record-sets transaction execute -z <zone-name>
Executed transaction [transaction.yaml] for managed-zone [<zone-name>].
Created [https://www.googleapis.com/dns/v1/projects/<project id>/managedZones/<zone-name>/changes/1].
ID  START_TIME                STATUS
1   2016-06-16T13:10:50.051Z  pending

Plain commands list:

gcloud dns record-sets transaction start -z <zone-name>
gcloud dns record-sets transaction add -z <zone-name> --name my-cname.example.com --ttl 300 --type CNAME cname.value.example.org.
gcloud dns record-sets transaction describe -z <zone-name>
gcloud dns record-sets transaction execute -z <zone-name>

BigQuery

bq help includes a lot of great info, the official documentation is available at https://cloud.google.com/bigquery/bq-command-line-tool.

Default Configuration

cat > ~/.bigqueryrc <<EOF
> project_id = <project-id>
> dataset_id = <dataset-id>
> EOF

Interactive Shell

bq shell

List common flags

bq --format=json ls -d

Configure Yubikey NEO with GPG and Pass

Environment configuration

Debian stable (bookworm).

Software dependencies

Install requirements and configure gpg2 to be the default gpg:

sudo apt install libpam-yubico libyubikey-dev libyubikey0 python-yubico-tools yubikey-personalization gnupg gnupg-agent gnupg2 gpgv openssh-client gpgsm pcscd libccid pass

Uninstall gnome-keyring:

sudo apt remove libpam-gnome-keyring gnome-keyring

Xorg environment

This is a matter of preferences, I do no use a display manager and if you do you may want to tweak this to be used in your .xsession file instead.

Warning: this configuration allows a single state for your gpg-agent and ssh-agent (which is gpg-agent) throughout your window manager. This means that all applications may be able to access resources available using some keys after you have provided sufficient information for gpg-agent to use these keys. If you're not sure of what you're doing do not use my Xorg configuration. .xinitrc

pkill -9 -u "$USER" -x gpg-agent
pkill -9 -u "$USER" -x ssh-agent
pkill -9 -u "$USER" -x xss-lock
pkill -9 -u "$USER" -x xscreensaver

xscreensaver -nosplash &> /dev/null &
xss-lock -- xscreensaver-command -lock  &> /dev/null &
setxkbmap us                    # kbd layout preset
xmodmap ~/.Xmodmap              # kbd styling
xrdb -merge ~/.Xresources       # X styling
#xhost +SI:localuser:$USER       # Disable access control
xsetroot -cursor_name left_ptr  # Fallback cursor
xset r rate 200 60              # Keyboard repeat rate

# start the `notion' window manager
gpgconf --kill gpg-agent

exec dbus-launch --exit-with-session \
     eval "$(gpg-agent \
                       --daemon \
                       --max-cache-ttl 720 \
                       --enable-ssh-support \
                       --max-cache-ttl-ssh 720 notion)"

.bashrc

export GNUPGHOME="$HOME"/.gnupg

if [ -f "${HOME}/.gnupg/gpg-agent.env" ]; then
    source "${HOME}/.gnupg/gpg-agent.env"
    export GPG_AGENT_INFO
    export SSH_AUTH_SOCK
fi

GPG_TTY=$(tty)
export GPG_TTY
export GNUPGHOME="$HOME/.gnupg"

Make yourself the owner of the Yubikey

eval $(lsusb -v | grep Yubi -A1  | egrep 'idVend|idProd' | awk '{ print $1"="$2 }')
echo SUBSYSTEM=="usb", ATTR{idVendor}=="$idVendor", ATTR{idProduct}=="$idProduct", OWNER="$USER" > /tmp/tmptmp
sudo cp -v /tmp/tmptmp /etc/udev/rules.d/50-yubikey.rules
sudo chown root.root /etc/udev/rules.d/50-yubikey.rules
rm /tmp/tmptmp

At this point you should restart Xorg:

pkill -u $USER

[...]

startx

Review gpg programs:

gpgconf --check-programs

Validate configuration

Smart card access

Verify you have sufficient privs to access the yubikey through gpg:

gpg --card-status
Gnupg agent wrapping

With this configuration your gpg-agent wraps your entire window manager.

This means that if you do add an ssh key to the agent from "$GPG_TTY", you will be able to access it from "$GPG_TTY" if this respects the way you've configured your agent.

To test this behavior:

  1. Open a terminal
  2. Add an ssh key to the agent
ssh-add -i ~/.ssh/somekey
<feed password prompt>
  1. Verify you can use the key
ssh user@somehost-allowing-somekey-logins
  1. Open a second terminal
  2. Verify you can use the key without being prompted for password
ssh user@somehost-allowing-somekey-logins

Create GPG keys

Generate master key:

gpg --expert --gen-key

gpg (GnuPG) 2.0.26; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
Your selection? 4


[...]

Generate sub-keys for Encryption, Signing, and Authentication:

gpg --expert --edit-key

gpg> addkey
Key is protected.

[...]

gpg> save

Optionally add your picture

gpg --edit-key <key-id>
addphoto

[...]

save

Configure your Yubikey

Resetting defaults

Optionally you may reset the status of your yubikey by doing this:

cat > /tmp/reset_yubikey<<EOF
/hex
scd serialno
scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40
scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40
scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40
scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40
scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40
scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40
scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40
scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40
scd apdu 00 e6 00 00
scd apdu 00 44 00 00
/echo Card has been successfully reset.
EOF

gpg-connect-agent -r /tmp/reset_yubikey

Test

List devices

ykneomgr -l

Configuration

Configure for HID/CCID with touch eject

ykneomgr -M 82

Configure key for OTP/U2F/CCID composite device with touch eject.

ykpersonalize -m 86

Default PINs

The default PIN is 123456 and the default admin PIN is 12345678.

To change the default admin PIN perform the following:

gpg --card-edit
admin
passwd
3
12345678
<confirm new admin PIN>
<confirm new admin PIN>

To change the default PIN

gpg --card-edit
admin
passwd
1
123456
<confirm new PIN>
<confirm new PIN>

Identification details

Your key stores personal information, to customize it follow these steps:

gpg --card-edit
admin
name
sex
lang
url
list
quit

Upload keys to GPG card

Backup keys

Backup keychain, primary keys, subkeys, and generate a revocation certificate for them:

mkdir -p ~/gpg_backup/{primary_keys,sub_keys,laptop_keys}
cp -r ~/.gnupg ~/gpg_backup/dot-gnupg-backup
gpg --armor --export <key-id> > ~/gpg_backup/primary_keys/public_key.gpg
gpg --armor --export-secret-key <key-id> > ~/gpg_backup/primary_keys/secret_key.gpg
gpg -a --export-secret-subkeys <key-id> > ~/gpg_backup/sub_keys/secret_subkeys.gpg
gpg --armor --gen-revoke <key-id> > ~/gpg_backup/primary_keys/recovation_cert.gpg

Upload your keys

gpg --expert --edit-key <key-id>
gpg> toggle
gpg> key 1
gpg> keytocard
Your selection? 1
gpg> key 1
gpg> key 2
gpg> keytocard
gpg> key 2
gpg> key 3
gpg> keytocard
gpg> save

Send your public key to keyserver

gpg --send-key <key-id>

Remove new keys from keyring

gpg --delete-secret-keys <key-id>
gpg --delete-key <key-id>

Import laptop keys:

gpg --import laptop_keys_public.gpg
gpg --import laptop_keys_secret.gpg

Trust your encryption key:

gpg --edit-key <key-id>
gpg> trust
5

Configure `pass'

pass init <key-id>

Google IRC Channels on Freenode

There are a few official Google channels on the Freenode network but it can be a bit hard to find which ones. Hopefully this list will help people looking for help with Google technologies on freenode.

Note: the recognized official support channels for Google products do not include IRC channels, for example refer to https://cloud.google.com/support/ for a list of Google Cloud related resources.

#google

#android

#android-dev

#chromium-extensions

#chromium-os-users

#chromium-support

#googleglass

#googlemaps

#google-at-home

#kubernetes-ui

previously #google-containers-ui

#googleajaxapis

#googleapis

#googleio

#googlemaps

#ubuntu-google

PlantUML Org-Mode Tests

http://plantuml.com/PlantUML_Language_Reference_Guide.pdf

Sequence diagram

@startuml
'
' everything that starts with a single quote is a comment
'
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response

nil

Participants

@startuml
actor Foo1
boundary Foo2
control Foo3
entity Foo4
database Foo5
Foo1 -> Foo2 : To boundary
Foo1 -> Foo3 : To control
Foo1 -> Foo4 : To entity
Foo1 -> Foo5 : To database
@enduml

Colors

@startuml
actor Bob #red
' The only difference between actor
'and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99FF99
/' You can also declare:
participant L as "I have a really\nlong name" #99FF99
'/
Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml

Special characters in participant names

@startuml
Alice -> "Bob()" : Hello
"Bob()" -> "This is very\nlong" as Long
' You can also declare:
' "Bob()" -> Long as "This is very\nlong"
Long --> "Bob()" : ok
@enduml

Self-Addressed Message

@startuml
Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml

Arrow styles

@startuml
Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <->o Alice
@enduml

Arrow colors

@startuml
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
@enduml

Message sequence numbering

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
@enduml

autonumber arguments

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml

autonumber HTML properties

@startuml
autonumber "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15 "<b>(<u>##</u>)"
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10 "<font color=red><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml

Title

@startuml
title Simple communication example
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml

Caption

@startuml
caption fig. 1
Alice <-> Bob: Swap position
Bob --> Alice: Who is who?
@enduml

Legend

@startuml
Alice -> Bob : Hello
legend right
Short
legend
endlegend
@enduml

Splitting diagram

@startuml
Alice -> Bob : message 1
Alice -> Bob : message 2
newpage
Alice -> Bob : message 3
Alice -> Bob : message 4
newpage A title for the\nlast page
Alice -> Bob : message 5
Alice -> Bob : message 6
@enduml

Grouping sequences

@startuml
Alice -> Bob: Authentication Request
alt successful case
Bob -> Alice: Authentication Accepted
else some kind of failure
Bob -> Alice: Authentication Failure
group My own label
Alice -> Log : Log attack start
loop 1000 times
Alice -> Bob: DNS Attack
end
Alice -> Log : Log attack end
end
else Another type of failure
Bob -> Alice: Please repeat
end
@enduml

Notes

@startuml
Alice->Bob : hello
note left: this is a first note
Bob->Alice : ok
note right: this is another note
Bob->Bob : I am thinking
note left
a note
can also be defined
on several lines
end note
@enduml

Google I/O 2016 Web Application Installation Steps

My personal notes on installing the I/O 2016 Web Application (in March 2016).

goapp deploy -application <app-id> -version <v> dist/backend/.

Configure Firebase

You must use the legacy Firebase dashboard. Do not use the gcloud console. –2016-05-30

  1. Create firebase.com legacy application (<app>.firebaseio.com)
  2. Get application secret from https://<app ID>.firebaseio.com/?page=Admin
  3. Insert secret in backend/server.config.<env>
"firebase": {
  "secret": "<secret key>",
  "shards": [
    "https://<app ID>.firebaseio.com/"
  ]
},
  1. Enable Google Plus API
  2. Configure credentials

CANCELLED Google Cloud Firebase Console does not work   CANCELLED

https://github.com/GoogleChrome/ioweb2016/pull/514#issuecomment-205866122

  • https://console.firebase.google.com/project/<project name>/settings/database
  • Database
  • Database secrets
    • Show existing legacy token
    • Create custom database authentication tokens using a legacy Firebase token generator. At least one secret must exist at all times.

Deploy

These are my personal notes. Tested on Debian stretch.

See https://github.com/GoogleChrome/ioweb2016 for more detailed instructions.

Download Google App Engine SDK for Go

unzip go_appengine_sdk_linux_<arch>_<version>.zip

Configure

mv go_appengine ~/.go_appengine
export PATH=~/.go_appengine:"$PATH"
export GOPATH=~/.go_appengine/gopath
export GOROOT=~/.go_appengine/goroot

Install node dependencies

npm install

Build

gulp serve:dist --env prod

Deploy

gulp deploy:firebaserules --env prod
goapp deploy -application <application ID> -version <version number> dist/backend/.

Temporary API

Enable in dist

After building the app:

cp -r app/temporary_api/ dist/app/