■ はじめに
https://dk521123.hatenablog.com/entry/2020/03/12/220717
の続き。 Secrets Manager に含まれている情報を、 boto3 でアクセスして、ごにょごにょする必要ができたので 調べて、メモを残しておく。
目次
【1】API仕様 1)get_secret_value() 【2】サンプル 例1:RDS認証情報をboto3 APIで取得する 【3】トラブル 1)boto3 API時にタイムアウトエラーが発生する
【1】API仕様
* 以下を参照のこと。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html
1)get_secret_value()
* Secrets Managerで管理されている認証情報を取得するAPI * 以下「Returns / Response Syntax」の「SecretString」に JSON形式で認証情報が入っている(ない場合は「SecretBinary」を使用)
Request Syntax
response = client.get_secret_value( SecretId='string', VersionId='string', VersionStage='string' )
Returns / Response Syntax
{ 'ARN': 'string', 'Name': 'string', 'VersionId': 'string', 'SecretBinary': b'bytes', # ★注目★ 'SecretString': 'string', # ★注目★ 'VersionStages': [ 'string', ], 'CreatedDate': datetime(2015, 1, 1) }
【2】サンプル
例1:RDS認証情報をboto3 APIで取得する
import ast import json import base64 import boto3 from botocore.exceptions import ClientError # 定数 TARGET_SECREAT_ID = "sample-rds-key" TARGET_REGION_NAME = "ap-northeast-1" print(f"Start. {TARGET_SECREAT_ID}") secrets_manager_client = boto3.client( 'secretsmanager', region_name=TARGET_REGION_NAME) try: response = secrets_manager_client.get_secret_value( SecretId=TARGET_SECREAT_ID ) if 'SecretString' in response: secret = response['SecretString'] else: secret = base64.b64decode(response['SecretBinary']) # astモジュールについては、下記の関連記事を参照 # https://dk521123.hatenablog.com/entry/2021/10/01/000000 secret_info = ast.literal_eval(secret) user_name = secret_info["username"] user_password = secret_info["password"] print(f"user_name={user_name}, user_password={user_password}") print("Done") except ClientError as ex: print(f"Error : {ex}") raise ex
【3】トラブル
1)boto3 API時にタイムアウトエラーが発生する
boto3 API時に以下「エラー内容」のようなタイムアウトエラーが発生する
エラー内容
urllib3.exceptions.ConnectTimeoutError: (<botocore.awsrequest.AWSHTTPSConnection object at 0xXXXXXXXXX>, 'Connection to secretsmanager.us-west-1.amazonaws.com timed out. (connect timeout=60)')
解決案
https://yohei-a.hatenablog.jp/entry/20200107/1578365127
より抜粋 ~~~~~~~~~~~~~~ 1. Secrets Manager の VPCエンドポイントを作成する。 2. VPCエンドポイントの Security Groupで Python Shell のジョブの Security Group からのアクセスを許可する。 ~~~~~~~~~~~~~~
参考文献
https://dev.classmethod.jp/articles/secrets_manager_tips_get_api_key/
関連記事
機密データの管理 ~ Secrets Manager 編 ~
https://dk521123.hatenablog.com/entry/2020/03/12/220717
機密データの管理 ~ Secrets Manager / AWS CLI 編 ~
https://dk521123.hatenablog.com/entry/2022/06/14/110641
CodeBuild で パラメータストア / Secrets Manager を使う
https://dk521123.hatenablog.com/entry/2020/02/18/230358
AWS Glue ~ Boto3 / Glue connection編 ~
https://dk521123.hatenablog.com/entry/2020/01/29/224525
Python ~ 基本編 / astモジュール ~
https://dk521123.hatenablog.com/entry/2021/10/01/000000
Lambda ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2017/04/05/235618
Lambda ~ Python / 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/07/103317