1Password EnvironmentsでAWSのAccessKeyを安全に使うためのCLI Toolを作ってみた

1Password EnvironmentsでAWSのAccessKeyを安全に使うためのCLI Toolを作ってみた

2026.04.14

こんばんは、情報システム部の夏目です。

昨年からローカルの環境に平文でアクセスキーなどを置くの危ないよねって感じがあります。

そのため、今回は1Password EnvironmentsでAWSのAccess Keyを安全に使うためのCLI Toolを作ってみました。

1Password Enviornments

https://developer.1password.com/docs/environments/

https://dev.classmethod.jp/articles/1password-environments-env-management/#1password-environments%25E3%2581%25A8%25E3%2581%25AF

https://dev.classmethod.jp/articles/1password-environments-env-management/#1password-environments%25E3%2581%25A8%25E3%2581%25AF

1Password EnvironmentsではAPI Keyなどのシークレットなどを1Password Vaultに暗号化して保存しつつ必要なタイミングでアプリケーションやCLIに安全に渡すことができます。

今回はその中の .env ファイルマウント機能を使います。
この機能ではディスクに書き込みが行われず、読み取りアクセスがあったときにプロセスへ直接データが渡されます。

aws-credential-process-provider-from-dotenv

https://github.com/sinofseven/aws-credential-process-provider-from-dotenv

今回作ったのは、AWS CLIの credential_process で使用するCLI Toolです。
AWS CLIの機能ではありますが、AWSのSDK等でも動きます。

指定した .env ファイルを読み取り、 credential_process用のJSONを出力するCLI Toolです。

Githubのリリースページから対応するバイナリをダウンロードして使います。

使い方

.envファイルを用意する

ツールが読み取る .env ファイルは、以下のような形式です。

AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
AWS_SESSION_TOKEN=FwoGZX...
EXPIRATION=2024-01-01T00:00:00Z

SessionTokenExpiration はオプションです。一時的な認証情報(AssumeRole 等)でない場合は省略できます。

.env ファイルのキー名は、よく使われる複数の命名規則に対応しています。PascalCase、SCREAMING_SNAKE_CASE、snake_case、そしてそれぞれの Aws / AWS_ / aws_ プレフィックス付きの形式をすべて認識します。

認証情報フィールド 認識されるキー名
Access Key ID AccessKeyIdACCESS_KEY_IDaccess_key_idAwsAccessKeyIdAWS_ACCESS_KEY_IDaws_access_key_id
Secret Access Key SecretAccessKeySECRET_ACCESS_KEYsecret_access_keyAwsSecretAccessKeyAWS_SECRET_ACCESS_KEYaws_secret_access_key
Session Token SessionTokenSESSION_TOKENsession_tokenAwsSessionTokenAWS_SESSION_TOKENaws_session_token
Expiration ExpirationEXPIRATIONexpiration

上の順番で検索し、最初に見つかったものを使います。既存の .env ファイルがどんな命名規則を使っていても、たいていそのまま動きます。

そのまま使ってみる

コマンドラインから直接実行すると、認証情報の JSON が標準出力に出力されます。

aws-credential-process-provider-from-dotenv /path/to/credentials.env

出力はこのような形式です。

{
  "Version": 1,
  "AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
  "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "SessionToken": "FwoGZX...",
  "Expiration": "2024-01-01T00:00:00Z"
}

.env ファイルに存在しないフィールドは、JSON から省略されます(null にはなりません)。

AWS CLIのShared Credentialに設定する

このツールの本来の使いどころは、AWS CLI の credential_process との連携です。~/.aws/config に以下を追記するだけで設定完了です。

[profile my-profile]
credential_process = /path/to/aws-credential-process-provider-from-dotenv /path/to/credentials.env

あとは通常の AWS CLI コマンドに --profile オプションをつけるだけで、.env ファイルの認証情報が透過的に使われます。

動かしてみる

1Password Environmentsで環境を用意する

7121ae30-b3b3-4a25-b0e0-073cbb6dd205

アクセスキーを保存しました。

次は保存先でローカル.envファイルを作成します。

7f4e5747-4cf0-4048-a4c8-e1dd5e7c188f

23bd72b2-dcd7-4c14-9b24-8b1ff0346d83

ファイルパスを選択します。

91663136-38e0-41eb-a1aa-26e0bf061b35

ここでは ~/.envs/credential_process_test.env とします。

6c11c5b4-e66a-4bef-8da3-808854b209a4

ファイルパス選択だけでは使えないので、 .envファイルをマウントします。

b480106a-e0b9-4527-91ee-dd1959fbc92c

これでマウント完了です。

少し見てみます。

$ file ~/.envs/credential_process_test.env
/Users/yuta/.envs/credential_process_test.env: fifo (named pipe)

テキストファイルでないことがわかります。

Shared Credentialを設定する

~/.aws/config
[profile credential_process_test]
credential_process = /Users/yuta/space/bin/aws-credential-process-provider-from-dotenv /Users/yuta/.envs/credential_process_test.env
region = ap-northeast-1

これで設定完了です。

aws sts get-caller-identity --profile credential_process_testを実行してみる

$ aws sts get-caller-identity --profile credential_process_test

実行してみると、

d7824df4-4e9d-4866-a743-78e70d3e6d94

1Passwordのデスクトップアプリから認証を求められます。
Touch IDが使えるので、使うと問題なく動きました。

3b2d4062-c33e-446b-95c0-707aa0d04f83

まとめ

credential_processを使って1Password Environmentsの.envからアクセスキーを得るためのCLI Toolを作ってみました。

https://github.com/sinofseven/aws-credential-process-provider-from-dotenv

今回紹介はしませんでしたが、1つの.envファイルで複数アカウントを区別できるようにするための機能もあります。
(1Password Environmentsの.envファイルは10個しかマウントできない)

良かったら使ってみてください。

この記事をシェアする

関連記事