Boto3を使ってAWS Secrets Managerの特定のシークレットを復元する方法【Python実装例つき】
はじめに
本記事では、Pythonのboto3ライブラリを使用して、AWS Secrets Manager(シークレットマネージャー)上の特定の場所に保存されたシークレットを復元する方法を解説します。削除されたシークレットは、削除猶予期間内であればAPI経由で簡単に復元できるため、誤って削除してしまった場合の対処法としてぜひ覚えておきましょう。
解決手順とアルゴリズム
シークレットを復元するための手順は以下の通りです。
ステップ1: 例外処理のために boto3 および botocore の例外クラスをインポートします。
ステップ2: 復元対象のシークレットが保存されている場所(secret_stored_location)を必須パラメータとして定義します。
ステップ3: boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルに region_name が設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的に region_name を渡す必要があります。
ステップ4: secretmanager 用のAWSクライアントを作成します。
ステップ5: restore_secret メソッドを呼び出し、secret_stored_location を SecretId として渡します。
ステップ6: 復元されたシークレットのメタデータが返却されます。
ステップ7: シークレットの復元中に問題が発生した場合に備え、汎用例外をハンドリングします。
サンプルコード
AWS Secrets Managerのシークレットを復元するには、以下のコードを使用します。
import boto3
from botocore.exceptions import ClientError
def restore_secret_details(secret_stored_location):
session = boto3.session.Session()
secret_client = session.client('secretmanager')
try:
response = secret_client.restore_secret(SecretId=secret_stored_location)
return response
except ClientError as e:
raise Exception("boto3 client error in restore_secret_details: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in restore_secret_details: " + e.__str__())
a = restore_secret_details('/secrets/aws')
print(a)
実行結果
コードを実行すると、復元されたシークレットのARNや名前などのメタデータが以下のように出力されます。
{'ARN': 'arn:aws:secretsmanager:us-east-1:***************:secret:/secrets/aws-wr1Aj6', 'Name': '/secrets/aws', '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}}補足ポイント
restore_secret APIは、スケジュールされた削除待ち状態にあるシークレットに対してのみ有効です。削除猶予期間(デフォルトでは7日〜30日)を過ぎて完全に削除されたシークレットは復元できないため、注意が必要です。また、復元処理には secretsmanager:RestoreSecret アクションへのIAM権限が必要となる点にも留意してください。
-
Boto3を使ってAWS Glueデータカタログからトリガーを削除する方法
概要この記事では、Pythonのboto3ライブラリを使用して、AWSアカウント内に存在するトリガー(Trigger)を削除する方法を解説します。課題 − Pythonのboto3ライブラリを使って、自分のアカウントにあるトリガーを削除します。例 − アカウントから「test」という名前のトリガーを削除します。解決のための手順(アプローチ/アルゴリズム)ステップ1 − 例外処理のためにboto3およびbotocoreの例外モジュールをインポートします。ステップ2 − AWS Glueカタログから削除したいトリガーの名前(trigger_name)をパラメータとして渡します。ステップ3 − bo
-
PythonのBoto3ライブラリを使ってAWS S3からオブジェクトをダウンロードする方法
PythonのBoto3ライブラリを使用すると、AWS S3に保存されたオブジェクトを簡単にローカル環境へダウンロードできます。本記事では、指定したS3パスからオブジェクトを取得し、既定のローカルパスまたは任意のパスに保存する関数の実装方法を解説します。既存ファイルの上書き可否を制御するオプションや、404エラーなどの例外処理もあわせて紹介します。例として、「Bucket_1」バケット内の「testfolder」に格納された「test.zip」をダウンロードするケースを取り上げます。解決のためのアプローチとアルゴリズムステップ1 − 例外処理のためにboto3とbotocoreの例外クラス(C