【AWS】Secrets ManagerをPythonのboto3で使う方法

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

AWSでAPIキーやデータベースのパスワードを安全に管理する方法を知りたい」とお考えではありませんか?

コード内や環境変数にAPIキーやパスワードを直接書いてしまい、漏えいのリスクが気になっている方へ。

Secrets Managerとboto3を組み合わせれば、Pythonのコードから安全にシークレット情報を扱えます

いずみ

サクッと解説します。

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

いずみ

すぐ読み終わるので、ぜひ最後まで読んでくださいませ。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

【AWS】Secrets ManagerをPythonのboto3で使う方法

早速ですが、Secrets ManagerをPythonのboto3で使う方法を解説します。

Secrets Managerとは

Secrets Managerは、APIキーやデータベースの認証情報などのシークレット情報を安全に保存・管理できるAWSのサービスです。

シークレット情報は保存時に自動的に暗号化されるため、コード内にパスワードを直接書く必要がなくなります。

ローテーション機能を使えば、シークレット情報を定期的に自動更新することも可能です。

事前準備

Secrets Managerを使う前に、IAMの権限設定とboto3のインストールを済ませておきます。

STEP
IAMポリシーをアタッチする

IAMユーザーまたはIAMロールに、secretsmanager:GetSecretValueとsecretsmanager:CreateSecretを含むポリシーをアタッチします。

最小権限の原則に従い、必要なシークレットのARNだけを許可範囲に指定するのがおすすめです。

いずみ

権限を絞っておくと、万が一の事故発生時にも被害を抑えられます。

STEP
boto3をインストールする

pipコマンドでboto3をインストールします。

pip install boto3

バージョンを固定したい場合は、requirements.txtにboto3を追記しておきます。

シークレットを作成する

続いて、Secrets Manager上にシークレットを作成します。

STEP
AWS CLIでシークレットを作成する

AWS CLIを使うと、コマンド1つでシークレットを作成できます。

aws secretsmanager create-secret --name myapp/db-credentials --secret-string '{"username":"admin","password":"changeme"}'

JSON形式で複数の値をまとめて保存できるので、データベースの接続情報のようなキーと値のペアを扱う場合に便利です。

STEP
boto3でシークレットを作成する
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}")
        raise

create_secretメソッドのNameパラメータにシークレット名、SecretStringパラメータに保存したい値を指定します。

いずみ

create_secretは、既に同名のシークレットが存在すると例外を返すので気をつけてください。

Pythonからシークレットを取得する

保存したシークレットは、get_secret_valueメソッドで取得します。

STEP
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キーに、保存した文字列がそのまま入っています。

STEP
JSON形式のシークレットを辞書に変換する
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つのエージェントを使い回していますよ。

フリーランスを始めるなら「

案件数マージン率単価
約88,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 業界最大級の案件数。
  • 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
  • 案件参画中のフォローの充実。

※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。

は業界最大手のフリーランスエージェントです。

とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!

いずみ

僕もはじめてフリーランスの案件を貰ったのはです。

保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。

手厚い保障を重視したいなら「

案件数マージン率単価
約10,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 手厚い保障で正社員並みの安心感。
  • 還元率60%超え&単価公開でクリアな契約。
  • 給与保障制度(審査あり)。

は手厚い保障が特徴のフリーランスエージェントです。

フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。

いずみ

僕も何度か案件を紹介してもらいました。

自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。

週2〜3日の案件探しなら「

案件数マージン率単価
約5,000件非公開
初心者福利厚生申し込み
経験者向け無料
Good Point
  • 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で使う方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • Secrets Managerを使うと、APIキーやパスワードをコードから切り離して安全に管理できる。
  • boto3のcreate_secretget_secret_valueで、シークレットの作成と取得を簡単に実装できる。
  • rotate_secretとLambda関数を組み合わせれば、シークレットの自動ローテーションも実現できる。
まとめ
いずみ

最後までお読みいただき、ありがとうございました!

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次