いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「AWSでAPIキーやデータベースのパスワードを安全に管理する方法を知りたい」とお考えではありませんか?
コード内や環境変数にAPIキーやパスワードを直接書いてしまい、漏えいのリスクが気になっている方へ。
Secrets Managerとboto3を組み合わせれば、Pythonのコードから安全にシークレット情報を扱えます。



サクッと解説します。
ということで、本記事ではSecrets ManagerをPythonのboto3で使う方法を解説します。



すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【AWS】Secrets ManagerをPythonのboto3で使う方法
早速ですが、Secrets ManagerをPythonのboto3で使う方法を解説します。
Secrets Managerとは
Secrets Managerは、APIキーやデータベースの認証情報などのシークレット情報を安全に保存・管理できるAWSのサービスです。
シークレット情報は保存時に自動的に暗号化されるため、コード内にパスワードを直接書く必要がなくなります。
ローテーション機能を使えば、シークレット情報を定期的に自動更新することも可能です。
事前準備
Secrets Managerを使う前に、IAMの権限設定とboto3のインストールを済ませておきます。
IAMユーザーまたはIAMロールに、secretsmanager:GetSecretValueとsecretsmanager:CreateSecretを含むポリシーをアタッチします。
最小権限の原則に従い、必要なシークレットのARNだけを許可範囲に指定するのがおすすめです。



権限を絞っておくと、万が一の事故発生時にも被害を抑えられます。
pipコマンドでboto3をインストールします。
pip install boto3バージョンを固定したい場合は、requirements.txtにboto3を追記しておきます。
シークレットを作成する
続いて、Secrets Manager上にシークレットを作成します。
AWS CLIを使うと、コマンド1つでシークレットを作成できます。
aws secretsmanager create-secret --name myapp/db-credentials --secret-string '{"username":"admin","password":"changeme"}'JSON形式で複数の値をまとめて保存できるので、データベースの接続情報のようなキーと値のペアを扱う場合に便利です。
import json
import boto3
from botocore.exceptions import ClientError
def create_secret(secret_name, secret_value):
client = boto3.client("secretsmanager", region_name="ap-northeast-1")
try:
client.create_secret(
Name=secret_name,
SecretString=json.dumps(secret_value),
)
except ClientError as e:
print(f"シークレットの作成に失敗しました: {e}")
raisecreate_secretメソッドのNameパラメータにシークレット名、SecretStringパラメータに保存したい値を指定します。



create_secretは、既に同名のシークレットが存在すると例外を返すので気をつけてください。
Pythonからシークレットを取得する
保存したシークレットは、get_secret_valueメソッドで取得します。
import json
import boto3
from botocore.exceptions import ClientError
def get_secret(secret_name):
client = boto3.client("secretsmanager", region_name="ap-northeast-1")
try:
response = client.get_secret_value(SecretId=secret_name)
except ClientError as e:
print(f"シークレットの取得に失敗しました: {e}")
raise
return json.loads(response["SecretString"])レスポンスのSecretStringキーに、保存した文字列がそのまま入っています。
secret = get_secret("myapp/db-credentials")
db_username = secret["username"]
db_password = secret["password"]json.loadsでパースすれば、ユーザー名とパスワードを個別のキーとして扱えます。



環境変数の代わりにSecrets Managerを使うと、コードとシークレット情報を完全に分離できます。
例外処理を実装する
get_secret_valueメソッドは、状況に応じてさまざまな例外を返します。
- ResourceNotFoundException(指定したシークレットが存在しない)
- InvalidParameterException(パラメータの指定が不正)
- DecryptionFailureException(シークレットの復号に失敗)
- InternalServiceErrorException(AWS側の内部エラー)
botocore.exceptions.ClientErrorをキャッチして、エラーコードごとに処理を分けるのが基本的な実装パターンです。
from botocore.exceptions import ClientError
try:
response = client.get_secret_value(SecretId=secret_name)
except ClientError as e:
error_code = e.response["Error"]["Code"]
if error_code == "ResourceNotFoundException":
print("指定したシークレットが見つかりません。")
elif error_code == "DecryptionFailureException":
print("シークレットの復号に失敗しました。")
else:
print(f"予期しないエラーが発生しました: {error_code}")
raiseシークレットのローテーションを設定する
rotate_secretメソッドを使うと、シークレットの自動ローテーションを有効にできます。
ローテーション処理自体はLambda関数として実装し、Secrets Manager側からスケジュールに沿って呼び出す仕組みになっています。



ローテーション用のLambda関数は、AWSが用意しているブループリントをベースにカスタマイズすると実装の手間を減らせます。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
Secrets Managerと環境変数管理は何が違いますか?
環境変数はサーバーやコンテナの設定に依存しますが、Secrets ManagerはAWSアカウント側で一元管理できます。
アクセス権限をIAMで細かく制御できる点も、環境変数管理には無い利点です。
Secrets Managerの料金はどれくらいかかりますか?
シークレット1件あたり月額料金が発生し、加えてAPIコール数に応じた従量課金があります。
詳細な料金は、AWS公式サイトの料金ページで確認するのが確実です。
シークレットのローテーションは自動化できますか?
rotate_secretメソッドとLambda関数を組み合わせれば、定期的な自動ローテーションを実装できます。
データベースのパスワードなど、定期的に変更したい認証情報との相性が良い機能です。
IAM権限で気をつけることはありますか?
特定のシークレットのARNだけを許可対象にし、ワイルドカードで全シークレットへのアクセスを許可しないことが重要です。
権限を絞ることで、不正アクセス時の被害範囲を最小限に抑えられます。
まとめ
今回は、Secrets ManagerをPythonのboto3で使う方法について解説しました。
以下が本記事のまとめになります。



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。








