<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Grace on Medium]]></title>
        <description><![CDATA[Stories by Grace on Medium]]></description>
        <link>https://medium.com/@gracenng?source=rss-139d18da0db2------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Stories by Grace on Medium</title>
            <link>https://medium.com/@gracenng?source=rss-139d18da0db2------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 13:34:54 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@gracenng/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Adding retries to EAS Webhooks]]></title>
            <link>https://blog.expo.dev/adding-retries-to-eas-webhooks-45caacb1e0e5?source=rss-139d18da0db2------2</link>
            <guid isPermaLink="false">https://medium.com/p/45caacb1e0e5</guid>
            <category><![CDATA[react-native-development]]></category>
            <category><![CDATA[expo-application-services]]></category>
            <category><![CDATA[expo]]></category>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Grace]]></dc:creator>
            <pubDate>Tue, 28 Mar 2023 18:03:37 GMT</pubDate>
            <atom:updated>2023-03-30T21:54:54.120Z</atom:updated>
            <content:encoded><![CDATA[<p>Did you know that you can be alerted as soon as your EAS Build or Submit is done via webhooks? Now, we’re making webhooks more robust with retries, starting Monday, March 27th.</p><p>All webhooks will automatically be retried on failed delivery with exponential backoff. We hope this will increase the success rate of the requests reaching their destinations and offer higher reliability to your services. However, this does not guarantee the delivery of the webhook requests.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4q6vxKe8ChGG05V0N80eGw.png" /></figure><p>You can read more about <a href="https://docs.expo.dev/eas/webhooks/">Expo EAS webhooks in our docs</a>. If you have unexpected problems with your webhooks, please <a href="https://expo.dev/contact">get in touch with us</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45caacb1e0e5" width="1" height="1" alt=""><hr><p><a href="https://blog.expo.dev/adding-retries-to-eas-webhooks-45caacb1e0e5">Adding retries to EAS Webhooks</a> was originally published in <a href="https://blog.expo.dev/">Exposition</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kubecon in the Motor City]]></title>
            <link>https://medium.com/@gracenng/kubecon-in-the-motor-city-4e23e0446751?source=rss-139d18da0db2------2</link>
            <guid isPermaLink="false">https://medium.com/p/4e23e0446751</guid>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[kubernetes]]></category>
            <dc:creator><![CDATA[Grace]]></dc:creator>
            <pubDate>Mon, 14 Nov 2022 08:02:16 GMT</pubDate>
            <atom:updated>2022-11-14T08:02:16.864Z</atom:updated>
            <content:encoded><![CDATA[<p>My very first Kubecon was two years ago. I just finished first year of university and working my first Kubernetes-related internship. It was virtual and I was nothing close to being a contributor back then.</p><p>I’m now on my fourth Kubernetes release team and the conference is more managable. Virtual or in-person, it’s as hectic as ever with up to 20 talks happening at the same time (I counted) and everyone leaves with their own version of the conference, here is mine.</p><pre><strong>Glossary</strong><br>CNCF = &quot;Cloud Native Computing Foundation&quot;<br>SIG = significant interest group, a Kubernetes subgroup<br>TAG = technical advisory group, a CNCF subgroup</pre><p><strong>New Release Process Reflections (Contributor Summit)<br></strong>The Contributor Summit is my favorite event as I get to meet with folks I’ve been working with for the past year. I hosted a round-table discussion in the Contributor Summit discussing an initiative I’m part of, the <a href="https://www.kubernetes.dev/blog/2022/09/09/enhancements-opt-in/">migration of enhancements collection</a> from sheets to Github project board. We’ve received good feedback from the community and are working to maintain this traction.</p><figure><img alt="a conference room donut-shaped desks in a discussion" src="https://cdn-images-1.medium.com/max/1024/1*Tj2s-hhclS5oorltp_Rc-Q.jpeg" /><figcaption>Session I hosted on new release process</figcaption></figure><p><strong>Prow Github Actions (Contributor Summit)<br></strong><a href="https://docs.prow.k8s.io/docs/">Prow</a> is a job-based service cluster project. A popular feature from prow is powering Github tasks through/foo commands. Robert is working on a proof-of-concept for a Github Actions version of prow, aptly named <a href="https://github.com/cncf-infra/mock-project-repo">prow Github Actions</a>, that would make it faster for other projects to adopt this feature in their repo. The project is in its infancy (don’t mind the repo name) and is looking for help.</p><p><strong>ContribFest (in-toto)</strong><br>This is the first time Kubecon introduced ContribFest and I thoroughly enjoyed it. ContribFest is a sub-event throughout the week of Kubecon where CNCF projects would host 1.5 hours contribution sessions. I went to <a href="https://in-toto.io/">in-toto</a> sessions and submitted two documentations pull requests, one of which improves the security policy. However, my favourite part of it was to say hi to the core maintainers of the project and received guidance on how to start. Being reminded that they are lovely humans who are ready to help made it a lot less intimidating.</p><p><strong>Security<br></strong>Most of the talks I attended was security related, on top of attending the first ever <a href="https://events.linuxfoundation.org/sigstorecon-north-america/">sigstorecon</a> (their swag is very soft.) Here’s a few quick recap:</p><ul><li><a href="https://kccncna2022.sched.com/event/182Mr/staring-into-the-abyss-with-the-security-technical-advisory-group-andrew-martin-controlplane-ragashree-shekar-carnegie-mellon-university-marina-moore-nyu">Security TAG</a>: checkout the <a href="https://github.com/cncf/tag-security/blob/main/security-whitepaper/v2/CNCF_cloud-native-security-whitepaper-May2022-v2.pdf">Cloud Native security whitepaper v2</a> and the TAG’s <a href="https://github.com/cncf/tag-security/blob/main/roadmap.md">roadmap</a>.</li><li><a href="https://kccncna2022.sched.com/event/1Bh1M/the-def-con-code-of-conduct-lawsuit-lessons-learned-and-tips-for-managing-legal-risk-when-enforcing-codes-of-conduct-joanna-lee-partner-gesmerupdegrove-llp">DEFCON CoC lawsuit</a>: not security related at all, but I’ll chuck it in here since it’s about DEFCON. A legal take on managing communities with the case study of the DEFCON defamation lawsuit.</li><li><a href="https://kccncna2022.sched.com/event/182OS/sig-security-empowerment-through-autonomy-ala-dewberry-vmware-savitha-raghunathan-red-hat-tabitha-sable-datadog">SIG-security deep dive</a>: an <a href="https://kubernetes.io/docs/reference/issues-security/official-cve-feed/">official CVE feed</a> is live! Cluster-api was the first subproject security assessment and vSphere CSI driver is next.</li><li><a href="http://Sig Auth Deep Dive - Rita Zhang &amp; Mo Khan, Microsoft; Tim Allclair, Google 321">SIG-auth deep dive</a>: <a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-auth/3299-kms-v2-improvements">KMSv2</a> is in alpha as of the 1.25 release. They are looking for help with test coverage and cleanups for stable features.</li><li><a href="https://kccncna2022.sched.com/event/1BvfI/fuzzing-session-finding-bugs-and-vulnerabilities-automatically-david-korczynski-adam-korczynski-ada-logics">Fuzzing integration</a>: an introduction into coverage-guided <a href="https://github.com/cncf/cncf-fuzzing">fuzzing</a> currently undergone by many CNCF projects.</li></ul><p><strong>No One Is Saving Us But Us<br></strong>My personal favorite. A serious and hearty conversation about the sustainability and intentionality of open-source, or more specifically, open-source maintainers. Paris and Tabitha offered parallels to running a mutual aid project (and <a href="https://www.versobooks.com/books/3713-mutual-aid">a book recs</a>.) We are <em>the</em> community, we have to take care of each other. This talk reminded me of <a href="https://www.youtube.com/watch?v=UIU8qZWL3Io&amp;ab_channel=CNCF%5BCloudNativeComputingFoundation%5D">one that Savitha and Divya did about burn-out in open-source</a> at Kubecon EU 2022 (I’m a serial skipper with Netflix shows. I watched this whole thing end to end.) If you are interested in the anthropology of open-source, I also recommend Nadia Eghbal’s whitepaper <a href="https://www.fordfoundation.org/work/learning/research-reports/roads-and-bridges-the-unseen-labor-behind-our-digital-infrastructure/">“Roads and Bridges: The Unseen Labor Behind Our Digital Infrastructure”</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vYL5bZsXjKCAGaL5BjjTYQ.jpeg" /><figcaption>This year’s scholarship receipients</figcaption></figure><p>I owe it to the CNCF’s Dan Kohn Scholarship to be able to attend this Kubecon, unite with my fellow contributors, and meet new folks.</p><p>That’s a wrap! Talks recordings will be up sometimes in late November. If you found this helpful, I’d appreciate a like. You can find me on Twitter <a href="https://twitter.com/gracenng">@gracenng</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4e23e0446751" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Automated Kubernetes secret injection with 1Password Secret Automation and HashiCorp Vault]]></title>
            <link>https://medium.com/@gracenng/automated-kubernetes-secret-injection-with-1password-secret-automation-and-hashicorp-vault-8db826c50c1d?source=rss-139d18da0db2------2</link>
            <guid isPermaLink="false">https://medium.com/p/8db826c50c1d</guid>
            <category><![CDATA[hashicorp-vault]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[1password]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Grace]]></dc:creator>
            <pubDate>Wed, 18 Aug 2021 20:24:09 GMT</pubDate>
            <atom:updated>2021-08-31T21:13:25.037Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introduction</h3><p>Riskfuel trains neural network models on datasets consisting of hundreds of millions of data points. Running at such a scale presents its own set of unique challenges. We have more and more pods which need to access tokens for storage, metrics, you name it. Previously, we already have our secrets in 1password but to use them in deployments, we had to manually include them as plaintext in our YAMLs. This slowed our developers’ efficiency and posed a potential security flaw.</p><p>In April 2021, 1password rolled out its <a href="https://support.1password.com/secrets-automation/">Secret Automation workflow</a> to address its CLI limited capability in distributed systems. This workflow includes plugins into backend systems like Hashicorp Vault, Kubernetes operator, Ansible collection and more. This allows Riskfuel to expand our existing usage of 1password and utilize it as a single source of truth for our Hashicorp Vault secrets. We are now able to automatically inject secrets into our deployments with ease.</p><p>There is <a href="https://github.com/1Password/vault-plugin-secrets-onepassword">documentation</a> for this plugin with a manual Vault server workflow. This blog will be focusing a holistic deployment of the 1password-Vault plugin in Kubernetes with Helm.</p><p>For our scope, I’m going to assume the following:</p><ul><li>You have a 1password business account</li><li>You have a Kubernetes cluster ready</li><li>You are familiar with Vault, Kubernetes and Helm CLI</li></ul><h3>Getting Started</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UrUbLEvvkthL6DGI5MDWJg.png" /><figcaption>Overview</figcaption></figure><p><strong>Step 1. Obtain 1password-credentials.json and access token</strong></p><p>Each team plan will get 3 free credits for Secret Automation with a <a href="https://1password.com/secrets/#pricing">subscription</a> for more.</p><p>Only an owner or admin of the 1password business account can set up Secret Automation and obtain the configuration json and access token. Follow the on screen instruction <a href="https://1password.com/secrets/#pricing">here</a> to do so.</p><p><strong>Step 2. Deploy Connect server</strong></p><p>If you have used Helm before, this step is straightforward; use the credentials file you just obtained.</p><pre>helm repo add 1password <a href="https://1password.github.io/connect-helm-charts/">https://1password.github.io/connect-helm-charts/</a> </pre><pre>helm install connect 1password/connect --set-file connect.credentials=1password-credentials.json</pre><p><strong>Step 3. Configure plugin in Vault’s Helm chart</strong></p><p>We want to bake in this plugin, so let’s modify Vault’s Helm chart. We’re using /usr/local/libexec/vault in this example but this would be the path to your plugin binaries.</p><ul><li>If you are using <a href="https://github.com/hashicorp/vault-helm.git">vault-helm</a> default chart, in your values.yaml under standalone or ha depending on your mode, under config, add:</li></ul><pre>plugin_directory = “/usr/local/libexec/vault”</pre><ul><li>If you have a slimmed down vault Helm chart like we do, you would want to add this to the server-config-configmap.yaml under extraconfig-from-values.hcl</li></ul><p><strong>Step 4. Add plugin installation initContainer</strong></p><p>We will install the plugin binaries and designate a file to be the config file later, via an initContainer . Don’t forget to modify the <a href="https://github.com/1Password/vault-plugin-secrets-onepassword/releases">release version</a> to match with your system and create a volume match the volumeMount here. Similar from above:</p><ul><li>If you are using <a href="https://github.com/hashicorp/vault-helm.git">vault-helm</a> default chart, in the extraInitContainers in the values.yaml file, add:</li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcarbon.now.sh%2Fembed%3Fbg%3Drgba%2528255%252C255%252C255%252C1%2529%26t%3Dcobalt%26wt%3Dnone%26l%3Dyaml%26ds%3Dtrue%26dsyoff%3D10px%26dsblur%3D26px%26wc%3Dtrue%26wa%3Dtrue%26pv%3D82px%26ph%3D56px%26ln%3Dtrue%26fl%3D1%26fm%3DIBM%2BPlex%2BMono%26fs%3D14px%26lh%3D205%2525%26si%3Dfalse%26es%3D4x%26wm%3Dfalse%26code%3D-%252520name%25253A%252520op-connect%25250Aimage%25253A%252520alpine%25253Alatest%25250Acommand%25253A%252520%25255B%2527sh%2527%25252C%252520%2527-c%2527%25255D%25250Aargs%25253A%25250A%252520%252520-%252520%25253E%25250A%252520%252520%252520%252520cd%252520%25252Ftmp%25253B%25250A%252520%252520%252520%252520wget%252520-O%252520op-connect.zip%25250A%252520%252520%252520%252520https%25253A%25252F%25252Fgithub.com%25252F1Password%25252Fvault-plugin-secrets-onepassword%25252Freleases%25252Fdownload%25252Fv1.0.0%25252Fvault-plugin-secrets-onepassword_1.0.0_linux_amd64.zip%25253B%25250A%252520%252520%252520%252520unzip%252520op-connect.zip%25253B%25250A%252520%252520%252520%252520mv%252520vault-plugin-secrets-onepassword_v1.0.0%252520%25252Fusr%25252Flocal%25252Flibexec%25252Fvault%25252Fop-connect%25253B%25250A%252520%252520%252520%252520chmod%252520%25252Bx%252520%25252Fusr%25252Flocal%25252Flibexec%25252Fvault%25252Fop-connect%25253B%25250A%252520%252520%252520%252520touch%252520op-connect-config.json%25253B%25250A%252520%252520%252520%252520mv%252520op-connect-config.json%252520%25252Fusr%25252Flocal%25252Flibexec%25252Fvault%25253B%25250AvolumeMounts%25253A%25250A-%252520name%25253A%252520plugins%25250A%252520%252520mountPath%25253A%252520%25252Fusr%25252Flocal%25252Flibexec%25252Fvault&amp;display_name=Carbon&amp;url=https%3A%2F%2Fcarbon.now.sh%2F%3Fbg%3Drgba%252528255%25252C255%25252C255%25252C1%252529%26t%3Dcobalt%26wt%3Dnone%26l%3Dyaml%26ds%3Dtrue%26dsyoff%3D10px%26dsblur%3D26px%26wc%3Dtrue%26wa%3Dtrue%26pv%3D82px%26ph%3D56px%26ln%3Dtrue%26fl%3D1%26fm%3DIBM%2BPlex%2BMono%26fs%3D14px%26lh%3D205%252525%26si%3Dfalse%26es%3D4x%26wm%3Dfalse%26code%3D-%25252520name%2525253A%25252520op-connect%2525250Aimage%2525253A%25252520alpine%2525253Alatest%2525250Acommand%2525253A%25252520%2525255B%252527sh%252527%2525252C%25252520%252527-c%252527%2525255D%2525250Aargs%2525253A%2525250A%25252520%25252520-%25252520%2525253E%2525250A%25252520%25252520%25252520%25252520cd%25252520%2525252Ftmp%2525253B%2525250A%25252520%25252520%25252520%25252520wget%25252520-O%25252520op-connect.zip%2525250A%25252520%25252520%25252520%25252520https%2525253A%2525252F%2525252Fgithub.com%2525252F1Password%2525252Fvault-plugin-secrets-onepassword%2525252Freleases%2525252Fdownload%2525252Fv1.0.0%2525252Fvault-plugin-secrets-onepassword_1.0.0_linux_amd64.zip%2525253B%2525250A%25252520%25252520%25252520%25252520unzip%25252520op-connect.zip%2525253B%2525250A%25252520%25252520%25252520%25252520mv%25252520vault-plugin-secrets-onepassword_v1.0.0%25252520%2525252Fusr%2525252Flocal%2525252Flibexec%2525252Fvault%2525252Fop-connect%2525253B%2525250A%25252520%25252520%25252520%25252520chmod%25252520%2525252Bx%25252520%2525252Fusr%2525252Flocal%2525252Flibexec%2525252Fvault%2525252Fop-connect%2525253B%2525250A%25252520%25252520%25252520%25252520touch%25252520op-connect-config.json%2525253B%2525250A%25252520%25252520%25252520%25252520mv%25252520op-connect-config.json%25252520%2525252Fusr%2525252Flocal%2525252Flibexec%2525252Fvault%2525253B%2525250AvolumeMounts%2525253A%2525250A-%25252520name%2525253A%25252520plugins%2525250A%25252520%25252520mountPath%2525253A%25252520%2525252Fusr%2525252Flocal%2525252Flibexec%2525252Fvault&amp;image=https%3A%2F%2Fcarbon.now.sh%2Fstatic%2Fbrand%2Fbanner.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;scroll=auto&amp;schema=carbon" width="1024" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/1705d6093735b9095aec1d434cdcb62c/href">https://medium.com/media/1705d6093735b9095aec1d434cdcb62c/href</a></iframe><ul><li>If you are using your own Helm chart, add this under initContainer in server-statefulset.yaml.</li></ul><p><strong>Step 5. Configure plugin inside Vault pod</strong></p><p>Once the changes above are made, deploy the chart and exec into the vault-0 pod. We will then configure Vault for sidecar injection with <a href="https://learn.hashicorp.com/tutorials/vault/kubernetes-sidecar#configure-kubernetes-authentication">k8s auth</a>, register and enable the plugin.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcarbon.now.sh%2Fembed%3Fbg%3Drgba%2528255%252C255%252C255%252C1%2529%26t%3Dcobalt%26wt%3Dnone%26l%3Dapplication%252Fx-sh%26ds%3Dtrue%26dsyoff%3D10px%26dsblur%3D26px%26wc%3Dtrue%26wa%3Dtrue%26pv%3D82px%26ph%3D56px%26ln%3Dtrue%26fl%3D1%26fm%3DIBM%2BPlex%2BMono%26fs%3D14px%26lh%3D205%2525%26si%3Dfalse%26es%3D4x%26wm%3Dfalse%26code%3D%252524%252520kubectl%252520exec%252520-it%252520vault-0%252520--%252520%25252Fbin%25252Fsh%25250A%25252F%252520%252524%252520vault%252520auth%252520enable%252520kubernetes%25250A%25252F%252520%252524%252520vault%252520write%252520auth%25252Fkubernetes%25252Fconfig%252520%25255C%25250A%252520%252520%252520%252520token_reviewer_jwt%25253D%252522%252524%2528cat%252520%25252Fvar%25252Frun%25252Fsecrets%25252Fkubernetes.io%25252Fserviceaccount%25252Ftoken%2529%252522%252520%25255C%25250A%252520%252520%252520%252520kubernetes_host%25253D%252522https%25253A%25252F%25252F%252524KUBERNETES_PORT_443_TCP_ADDR%25253A443%252522%252520%25255C%25250Akubernetes_ca_cert%25253D%252540%25252Fvar%25252Frun%25252Fsecrets%25252Fkubernetes.io%25252Fserviceaccount%25252Fca.crt%25250A%25252F%252520%252524%25250A%25252F%252520%252524%252520vault%252520write%252520sys%25252Fplugins%25252Fcatalog%25252Fsecret%25252Fop-connect%252520%25255C%25250Asha_256%25253D%252522%252524%2528sha256sum%252520%25252Fusr%25252Flocal%25252Flibexec%25252Fvault%25252Fop-connect%252520%25257C%252520cut%252520-d%252520%252522%252520%252522%252520-f1%2529%252522%252520%25255C%25250Acommand%25253D%252522op-connect%252522%25250A%25252F%252520%252524%25250A%25252F%252520%252524%252520vault%252520secrets%252520enable%252520--plugin-name%25253D%2527op-connect%2527%252520--path%25253D%252522op%252522%252520plugin&amp;display_name=Carbon&amp;url=https%3A%2F%2Fcarbon.now.sh%2F%3Fbg%3Drgba%252528255%25252C255%25252C255%25252C1%252529%26t%3Dcobalt%26wt%3Dnone%26l%3Dapplication%25252Fx-sh%26ds%3Dtrue%26dsyoff%3D10px%26dsblur%3D26px%26wc%3Dtrue%26wa%3Dtrue%26pv%3D82px%26ph%3D56px%26ln%3Dtrue%26fl%3D1%26fm%3DIBM%2BPlex%2BMono%26fs%3D14px%26lh%3D205%252525%26si%3Dfalse%26es%3D4x%26wm%3Dfalse%26code%3D%25252524%25252520kubectl%25252520exec%25252520-it%25252520vault-0%25252520--%25252520%2525252Fbin%2525252Fsh%2525250A%2525252F%25252520%25252524%25252520vault%25252520auth%25252520enable%25252520kubernetes%2525250A%2525252F%25252520%25252524%25252520vault%25252520write%25252520auth%2525252Fkubernetes%2525252Fconfig%25252520%2525255C%2525250A%25252520%25252520%25252520%25252520token_reviewer_jwt%2525253D%25252522%25252524%252528cat%25252520%2525252Fvar%2525252Frun%2525252Fsecrets%2525252Fkubernetes.io%2525252Fserviceaccount%2525252Ftoken%252529%25252522%25252520%2525255C%2525250A%25252520%25252520%25252520%25252520kubernetes_host%2525253D%25252522https%2525253A%2525252F%2525252F%25252524KUBERNETES_PORT_443_TCP_ADDR%2525253A443%25252522%25252520%2525255C%2525250Akubernetes_ca_cert%2525253D%25252540%2525252Fvar%2525252Frun%2525252Fsecrets%2525252Fkubernetes.io%2525252Fserviceaccount%2525252Fca.crt%2525250A%2525252F%25252520%25252524%2525250A%2525252F%25252520%25252524%25252520vault%25252520write%25252520sys%2525252Fplugins%2525252Fcatalog%2525252Fsecret%2525252Fop-connect%25252520%2525255C%2525250Asha_256%2525253D%25252522%25252524%252528sha256sum%25252520%2525252Fusr%2525252Flocal%2525252Flibexec%2525252Fvault%2525252Fop-connect%25252520%2525257C%25252520cut%25252520-d%25252520%25252522%25252520%25252522%25252520-f1%252529%25252522%25252520%2525255C%2525250Acommand%2525253D%25252522op-connect%25252522%2525250A%2525252F%25252520%25252524%2525250A%2525252F%25252520%25252524%25252520vault%25252520secrets%25252520enable%25252520--plugin-name%2525253D%252527op-connect%252527%25252520--path%2525253D%25252522op%25252522%25252520plugin&amp;image=https%3A%2F%2Fcarbon.now.sh%2Fstatic%2Fbrand%2Fbanner.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;scroll=auto&amp;schema=carbon" width="1024" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/71fe80031d088029ae645b7b21f161a9/href">https://medium.com/media/71fe80031d088029ae645b7b21f161a9/href</a></iframe><p><strong>Step 6. Insert access tokens</strong></p><p>Staying inside the vault-0 pod, we now need to configure the plugin with the access token from step 1 to be able to make API request to the connect server. Let’s add to the /usr/local/libexec/vault/op-connect-config.json file we created in the initContainer the following:</p><pre>{<br>&quot;op_connect_host&quot;: &quot;http://&lt;IP_address_of_Connect_server_step_2&gt;:8080&quot;,<br>&quot;op_connect_token&quot;: &quot;&lt;access_token_from_step_1&gt;&quot;<br>}</pre><p>Be mindful of the http and <a href="https://github.com/1Password/connect#server-configuration">port number</a> here, it is important. Then write this file to Vault.</p><pre>vault write op/config @op-connect-config.json</pre><p><strong>Step 7. Test Connection</strong></p><p>Now that the plugin is set up, we should be able to send and retrieve data from 1password.</p><ul><li>Get a list of Vault your token has access to: vault list op/vaults</li><li>List items in a 1password vault: vault list op/vaults/&lt;1PW_vault_name&gt;/items</li><li>Read item: vault read op/vaults/&lt;1PW_vault_name&gt;/items/&lt;item_name&gt;</li></ul><p><strong>Step 8. Deployment Usage</strong></p><p>Before we can inject these secrets into our deployment, please ensure that your <a href="https://learn.hashicorp.com/tutorials/vault/kubernetes-sidecar#configure-kubernetes-authentication">Vault policy</a> is tied to your 1password path (i.e op/vaults/&lt;1PW_vault_name&gt;/items/*)and Vault role is configured with the proper service account and namespace.</p><p>In your deployment.yaml , under spec, add the annotation:</p><pre>spec:<br>  ...<br>  template:<br>    metadata:<br>      annotations:<br>        vault.hashicorp.com/agent-inject: &#39;true&#39;<br>        vault.hashicorp.com/role: &#39;&lt;Vault_role&gt;&#39;<br>        vault.hashicorp.com/agent-inject-secret-config: &#39;op/vaults/&lt;1PW_vault_name&gt;/items/&lt;item_name&gt;&#39;</pre><p><strong>Step 9. Profit</strong></p><p>If you made it this far, congratulations! Once the deployment with annotation is running, you can exec into the pod and go to /vault/secret/config to see the injected contents. You can also leverage the Consul <a href="https://github.com/hashicorp/consul-template/blob/master/docs/templating-language.md#secret">template</a> annotation to have your secrets as environment variables.</p><p>Voila!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I-IZoO0LgNdgFL8CFyLDqg.png" /></figure><h3>Conclusion</h3><p>While the product is in its infancy, it boasts a powerful pipeline to connect 1password’s reliability with Hashicorp Vault’s infrastructure integration.</p><p>If you are interested in furthering your secret workflow, I also recommend checking out IBM’s <a href="https://github.com/IBM/argocd-vault-plugin">argocd-vault-plugin</a>. This allows us to streamline Kubernetes secrets by setting desired secrets states and have ArgoCD manage them, without revealing the value of these secrets in Github.</p><p>A small plug, Riskfuel is innovating the capital markets industry using cutting-edge machine learning and hardware. If you like solving problems like this, check out our <a href="https://riskfuel.com/company-page/#careers">careers page</a>.</p><p>That’s it! Thanks for reading :)</p><h3>Reference</h3><ul><li><a href="https://support.1password.com/connect-deploy-kubernetes/#step-2-deploy-a-1password-connect-server">Deploy a 1Password Connect server on Kubernetes</a></li><li><a href="https://github.com/1Password/vault-plugin-secrets-onepassword">GitHub - 1Password/vault-plugin-secrets-onepassword: Hashicorp Vault plugin that allows for the retrieval, creation, and deletion of items stored in a 1Password vault accessed by use of the 1Password Connect.</a></li><li><a href="https://learn.hashicorp.com/tutorials/vault/kubernetes-sidecar">Injecting Secrets into Kubernetes Pods via Vault Agent Containers | Vault - HashiCorp Learn</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8db826c50c1d" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>