Python
 Computer >> コンピューター >  >> プログラミング >> Python

Boto3を使ってAWS Secrets Managerにプレーンテキスト形式のシークレットを作成する方法

課題

Pythonのboto3ライブラリを使用して、AWS Secrets Managerにプレーンテキスト(String)形式でシークレットキーを作成する方法を解説します。APIキーやデータベースの認証情報などを安全に管理したい場合に役立つ手法です。

事前準備

  • Python環境にboto3がインストールされていること(pip install boto3)
  • AWSの認証情報(アクセスキー・シークレットキー)が設定済みであること
  • Secrets Managerへの書き込み権限を持つIAMポリシーが割り当てられていること

解決のための手順(アルゴリズム)

  • ステップ1: 例外処理のために、boto3botocoreの例外クラスをインポートします。

  • ステップ2: secret_stored_location(シークレットの保存先となる名前)とsecret_key_pair(キーと値のペア)が必須パラメータです。シークレットは、指定したキー・バリューのペアとしてこの名前のもとに保存されます。secret_key_pairはdictではなく文字列として記述する必要がある点に注意してください。例:'{"key":"pair"}'

  • ステップ3: boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にregion_nameを渡す必要があります。

  • ステップ4: secretmanager用のAWSクライアントを作成します。

  • ステップ5: create_secretを呼び出し、secret_stored_locationをNameに、secret_key_pairSecretStringパラメータとして渡します。

  • ステップ6: 作成されたシークレットのメタデータ(ARN、Name、VersionIdなど)が返されます。

  • ステップ7: シークレット作成時にエラーが発生した場合に備え、ClientErrorなどの汎用的な例外処理を実装します。

サンプルコード

以下のコードを使用して、AWS Secrets Managerにシークレットを作成できます。

import boto3
from botocore.exceptions import ClientError

def create_secret_details(secret_stored_location, secret_key_pair:str):
    session = boto3.session.Session()
    s3_client = session.client('secretmanager')
    try:
        response = s3_client.create_secret(Name=secret_stored_location, SecretString=secret_key_pair)
        return response
    except ClientError as e:
        raise Exception("boto3 client error in create_secret_details: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in create_secret_details: " + e.__str__())

details = '{"user_test":"test"}'
a = create_secret_details('/secrets/aws', details)
print(a)

出力結果

コードを実行すると、作成されたシークレットのメタデータが以下のように返されます。

{'ARN': 'arn:aws:secretsmanager:us-east-1:***************:secret:/secrets/aws-wr1Aj6', 'Name': '/secrets/aws', 'VersionId': 'fcdc1b5b-2a35-4d12-9d84-65d529651d2e', 'ResponseMetadata': {'RequestId': 'b32fe48d**************ab', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sat, 03 Apr 2021 09:40:48 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '197', 'connection': 'keep-alive', 'x-amzn-requestid': *********************************}, 'RetryAttempts': 0}}

まとめ

boto3のcreate_secret APIを使えば、数行のコードでAWS Secrets Managerにプレーンテキスト形式のシークレットを登録できます。ポイントは、シークレットの値をJSON形式の文字列として渡すこと、そしてリージョン設定を忘れないことです。認証情報の一元管理により、アプリケーションのセキュリティ向上と運用負荷の軽減が期待できます。

  1. Boto3のウェイター(待機)機能を使ってS3バケット内にキーが存在するかどうかを確認する方法

    プログラムの中で、ウェイター(待機)機能を利用してバケット内の特定のキーが存在するかどうかを検証したいケースはよくあります。 問題 Pythonのboto3ライブラリを使い、ウェイター機能によってバケット内にキーが存在するかどうかを確認します。例として、Bucket_1 内に test.zip というキーが存在するかどうかをウェイターでチェックしてみましょう。 解決のためのアプローチ/アルゴリズム ステップ1 − boto3 および botocore の例外処理用モジュールをインポートします。 ステップ2 − 関数の引数として bucket_name(バケット名)と key(キー名)を受け取り

  2. PythonのBoto3ライブラリでAWSセッションを作成する方法を徹底解説

    Lambda関数やPythonコードからAWSの各種サービスを利用する場合、まず最初にAWSへのアクセス用セッションを確立する必要があります。セッションはデフォルト設定のまま使うこともできますし、用途に応じてカスタマイズすることも可能です。課題PythonのBoto3ライブラリを使用して、AWSセッションを作成することを目標とします。解決のための手順・アルゴリズムステップ1:認証情報の準備AWSセッションを作成するには、まず認証情報(クレデンシャル)をセットアップします。認証情報はIAMコンソールで確認できるほか、認証情報ファイルを手動で作成することもできます。デフォルトでは、ファイルは~/.