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

Pythonのboto3でAWS Secrets Managerの指定したパスに新しいシークレットを保存する方法

本記事では、Pythonのboto3ライブラリを使って、AWS Secrets Manager(シークレットマネージャー)の特定の場所に新しいシークレットを保存する方法を解説します。

解決のためのアプローチとアルゴリズム

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

  • ステップ2: 必須パラメータはsecret_stored_location(シークレットの保存先)とsecret_key_pair(キーと値のペア)です。注意点として、secret_key_pairは辞書型ではなく文字列(string)として渡す必要があります。

  • ステップ3: boto3を使ってAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていない場合は、セッション作成時に明示的にregion_nameを指定してください。

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

  • ステップ5: put_secret_valueを呼び出し、secret_stored_locationSecretIdに、secret_key_pairSecretStringとして渡します。

  • ステップ6: 正常に処理されると、追加されたシークレットのメタデータが返されます。

  • ステップ7: シークレット追加時に問題が発生した場合に備え、汎用的な例外処理を実装します。

サンプルコード

以下のコードを使用すると、AWS Secrets Managerに新しいシークレットを保存できます。

import boto3
from botocore.exceptions import ClientError

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

a = store_new_secret_details('/secrets/aws', '{"user_test2":"test2"}')
print(a)

実行結果

{'ARN': 'arn:aws:secretsmanager:us-east-1:***************:secret:/secrets/aws-wr1Aj6', 'Name': '/secrets/aws', 'VersionId': 'f5308bed-7c23-4d47-a32b-8f2a5f044e53', 'VersionStages': ['AWSCURRENT'], '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}}

補足ポイント

  • put_secret_valueは既存のシークレットに対して新しいバージョンを追加するAPIです。シークレット自体がまだ存在しない場合は、create_secretを使用する必要があります。

  • 返却されるVersionStagesが「AWSCURRENT」となっていれば、その値が現在のアクティブなバージョンとして登録されたことを意味します。

  • 認証情報はAWS CLIの設定やIAMロールなど、事前に適切に設定しておく必要があります。権限不足の場合はAccessDeniedエラーが発生しますのでご注意ください。

  1. Boto3を使ってAWS Glueデータカタログからワークフローを削除する方法を解説

    AWS Glueのデータカタログ上で管理しているワークフローは、Pythonのboto3ライブラリを使えば簡単に削除できます。本記事では、実際のコード例とともに、その手順をわかりやすく解説します。やりたいことユーザーがAWSデータカタログからワークフローを削除したいケースを想定します。例:自分のアカウントから「test」という名前のワークフローを削除する。課題:Pythonのboto3ライブラリを使用して、アカウント内に存在するワークフローを削除すること。解決のための手順・アルゴリズムステップ1:例外処理のために、boto3およびbotocore.exceptionsをインポートします。ステッ

  2. Boto3を使ってAWS Glueのジョブを削除する方法を徹底解説

    AWS Glueは、ETL(抽出・変換・ロード)処理を簡単に実行できるサーバーレスのデータ統合サービスです。本記事では、Pythonのboto3ライブラリを使用して、自分のAWSアカウント内に作成済みのGlueジョブを削除する方法を、ステップごとにわかりやすく解説します。 課題 Pythonのboto3ライブラリを使って、AWSアカウント内に作成されたGlueジョブを削除します。 例: アカウント内に作成された「transfer_from_s3」というGlueジョブを削除します。 解決のためのアプローチとアルゴリズム ステップ1: 例外処理のために、boto3とbotocoreの例外モジュール