Pythonのboto3でAWS Secrets Managerからプレーンテキストのシークレットキーを取得する方法
はじめに
本記事では、Pythonのboto3ライブラリを使用して、AWS Secrets Manager(シークレットマネージャー)にプレーンテキストとして保存されたシークレットキーを取得する方法を解説します。認証情報やAPIキーなどの機密情報を安全に管理するSecrets Managerは、アプリケーション開発において非常に重要なサービスです。
課題
Pythonのboto3ライブラリを使って、AWS Secrets Managerに保存されたシークレットキーを取得したい。
解決のための手順(アプローチ)
ステップ1: 例外処理のために、
boto3とbotocore.exceptions(ClientErrorなど)をインポートします。ステップ2: 必須パラメータは
secret_stored_locationです。これはシークレットが保存されている場所(SecretId)を示します。ステップ3: boto3でAWSセッションを作成します。デフォルトプロファイルに
region_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にリージョン名を指定する必要があります。ステップ4: secretmanager用のAWSクライアントを作成します。
ステップ5:
get_secret_valueを呼び出し、secret_stored_locationをSecretIdとして渡します。ステップ6: 指定したロケーションに存在するシークレットが、復号化された状態(プレーンテキスト)で返されます。
ステップ7: 値の取得中にエラーが発生した場合に備えて、汎用的な例外ハンドリングを実装します。
サンプルコード
以下のコードを使用すると、AWS Secrets Managerからプレーンテキスト形式のシークレットを取得できます。
import boto3
from botocore.exceptions import ClientError
def get_secret_details(secret_stored_location):
session = boto3.session.Session()
s3_client = session.client('secretmanager')
try:
response = s3_client.get_secret_value(SecretId=secret_stored_location)
return response
except ClientError as e:
raise Exception("boto3 client error in get_secret_details: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in get_secret_details: " + e.__str__())
a = get_secret_details('/secrets/aws')
print(a['SecretString'])
実行結果
{"aws.user":"SERVICE_USER","aws.accesskey":"I**************"}
補足ポイント
get_secret_valueのレスポンスには、テキスト形式で保存された場合はSecretString、バイナリ形式で保存された場合はSecretBinaryが含まれます。シークレットがJSON形式で保存されている場合は、
json.loads(response['SecretString'])を使って辞書型として扱うと便利です。この操作を実行するIAMユーザーまたはロールには、
secretsmanager:GetSecretValue権限が必要です。シークレットへのアクセスにはAPI呼び出し料金が発生するため、Lambda関数などで頻繁に利用する場合は、値をキャッシュすることを推奨します。
-
Boto3を使ってAWS Glueクローラーのメトリクスを1つまたは複数取得する方法【Pythonコード例】
はじめにこの記事では、Pythonのboto3ライブラリを使用して、AWS Glueデータカタログに登録された指定したクローラーのメトリクスを取得する方法を解説します。単一のクローラーだけでなく、複数のクローラーを一度に指定することも可能です。課題: Pythonのboto3ライブラリを使って、指定されたクローラーのメトリクスを取得する。例: クローラー「crawler_for_s3_file_job」のメトリクスを取得する。解決のためのアプローチ以下の手順で、指定されたクローラーのメトリクスを取得できます。ステップ1: 例外処理のためにboto3とbotocore.exceptions(Cl
-
PythonのBoto3ライブラリを使ってAWS S3のバケット一覧を取得する方法
問題の概要: Pythonのboto3ライブラリを使用して、AWSアカウント内に存在するすべてのS3バケットの一覧を取得します。例: BUCKET_1、BUCKET_2、BUCKET_3 のようなバケット名の一覧を取得します。boto3とはboto3は、PythonからAWSの各種サービスを操作するための公式SDKです。S3やEC2、DynamoDBなど、多くのAWSリソースをPythonコードから簡単に扱えます。使用前には pip install boto3 でインストールしておき、AWSの認証情報(アクセスキー・シークレットキー)が適切に設定されていることを確認してください。解決のための手