-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b0353ac
commit e5cafc7
Showing
2 changed files
with
130 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
#!/usr/bin/env bash | ||
|
||
TENANT_ID="XXXXXXXX" | ||
|
||
# Login to 1Password. | ||
# Assumes you have installed the OP CLI and performed the initial configuration | ||
# For more details see https://support.1password.com/command-line-getting-started/ | ||
eval "$(op signin ${TENANT_ID})" | ||
|
||
# put our search string into a var | ||
string="${1}" | ||
|
||
# build a filter we can use to output our list of items that match. | ||
#filter=".[] | .overview.title as \$t | select(\$t | index(\"${string}\")) | [\$t, .uuid] | @csv" | ||
filter=".[] | .overview.title as \$t | select(\$t | index(\"${string}\")) | [\$t, .uuid] | @csv" | ||
|
||
# create our empty associative array. | ||
declare -A myitems | ||
|
||
# prepare to read in in our key and value pairs from the op output | ||
while IFS="," read -r key value | ||
do | ||
# now we need to lose the preceding and trailing double-quotes (") from our VARs | ||
key="${key%\"}" | ||
key="${key#\"}" | ||
|
||
value="${value%\"}" | ||
value="${value#\"}" | ||
myitems[$key]="$value" | ||
done < <(op list items | jq -r -c "${filter}") | ||
|
||
# DEBUG display the list of entries we stored in the array | ||
#echo "" | ||
#echo "[DEBUG] - Step through associative array elements and display them." | ||
#for key in "${!myitems[@]}" | ||
#do | ||
# echo "[DEBUG] - \"$key\" = \"${myitems[$key]}\"" | ||
#done | ||
#echo "" | ||
|
||
# now we create and present the operator with a list of choices to select the env var they're wanting. | ||
echo "Please select an entry:" | ||
select key in "${!myitems[@]}"; do | ||
[[ -n ${key} ]] || { echo "Invalid choice. Please try again." >&2; continue; } | ||
break # valid choice was made; exit prompt. | ||
done | ||
|
||
# uncomment if debugging. | ||
#echo "" | ||
#echo "[DEBUG] - The following item was selected." | ||
#echo "[DEBUG] - title: [$key]; uuid: [${myitems[$key]}]" | ||
#echo "" | ||
|
||
# Now that the ops has selected the record we're interested in, lets pull the item | ||
ev=`op get item ${myitems[$key]}` | ||
|
||
# Convert to base64 for multi-line secrets. | ||
# The schema for the 1Password type 'Password' uses t as the label, and v as the value. | ||
for row in $(echo ${ev} | jq -r -c '.details.sections[1].fields[] | @base64'); do | ||
_envvars() { | ||
echo ${row} | base64 --decode | jq -r ${1} | ||
} | ||
echo "Setting environment variable $(_envvars '.t')" | ||
export $(echo "$(_envvars '.t')=$(_envvars '.v')") | ||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,66 @@ | ||
# 1password-env-vars | ||
A small Bash script that will help you use 1password data to manage your Cloud provider CLI credentials | ||
|
||
A Bash script that will help you use 1password data to manage your Cloud provider CLI credentials. | ||
|
||
--- | ||
|
||
First up, HT and thanks to [Grant Orchard](https://github.com/grantorchard) & [Anthony Burke](https://github.com/pandom). Grant because he wrote [this thing here](https://grantorchard.com/securing-environment-variables-with-1password/) which I was able to use to give me a head-start making this thing. Anthony because he introduced me to Grant's widget. | ||
|
||
I've had a task in my personal project queue for a long time to write something like this. I was sick of having to manually key in my Cloud CLI credentials and chop and change them as I moved between various Cloud Platforms and tenancies. | ||
|
||
--- | ||
|
||
## introduction | ||
|
||
This script will accept a search string (enclosed in double-quotes) and list matching entries in your selected 1password vault. | ||
|
||
```bash | ||
😀 abest@BARMIX2:~ $ source ./.import_envvars.sh "Env Vars" | ||
Enter the password for [email protected] at XXXXXXXX.1password.com: | ||
Please select an entry: | ||
1) Env Vars - AWS - Example | ||
2) Env Vars - AWS - NAME0 - ENV | ||
3) Env Vars - Azure - Company.com - Dev - SP | ||
#? | ||
``` | ||
You can then select the entry you want to insert the credentials for into your current CLI session. | ||
```bash | ||
😀 abest@BARMIX2:~ $ source ./.import_envvars.sh "Env Vars" | ||
Enter the password for [email protected] at XXXXXXXX.1password.com: | ||
Please select an entry: | ||
1) Env Vars - AWS - Example | ||
2) Env Vars - AWS - NAME0 - ENV | ||
3) Env Vars - Azure - Company.com - Dev - SP | ||
#? 2 | ||
Setting environment variable VAULT_ADDR | ||
Setting environment variable AWS_REGION | ||
Setting environment variable AWS_ACCESS_KEY_ID | ||
Setting environment variable AWS_SECRET_ACCESS_KEY | ||
``` | ||
## requirements | ||
* You need a [1password](https://1password.com/) account. | ||
* You need the [1password CLI](https://support.1password.com/command-line-getting-started/) installed and configured. | ||
* A bash shell that supports Associate Arrays. Bash v4 and newer iirc. | ||
## setup | ||
* satisfy the requirements | ||
* grab the bash script | ||
* modify the `TENANT_ID` variable and enter your 1password tenant name. | ||
* make sure the script is executable `chmod 700 .import_envvars.sh` | ||
## usage | ||
* see the example in the intro | ||
* have a look at Grant's page for some information about the formatting and contents of the 1password item. | ||
## caveats | ||
* No warranties | ||
* Dont come to me if it blows up your stuff | ||
* Take it as is | ||
* be kind |