yuji0602’s blog

日々思っていることなど。

pythonでAWS シークレットマネージャーの値の取得と更新を試す

概要

最近AWS シークレットマネージャーを使い始めたのですが、値を取得するサンプルコードはシークレットマネージャー上で見れるものの、更新はどうやるのかなと思ったのでサンプルを書いてみました。

サンプルコード

とりあえずこんな感じで動きました。<SECRET_NAME>となっている部分は任意で書き換えてもらえればと思います。エンドポイントとリージョンもですね。

import boto3
import json
from botocore.exceptions import ClientError


class SecretsManager(object):
    def __init__(self):
        endpoint_url = "https://secretsmanager.us-west-2.amazonaws.com"
        region_name = "us-west-2"
        session = boto3.session.Session()
        self.client = session.client(
            service_name='secretsmanager',
            region_name=region_name,
            endpoint_url=endpoint_url
        )

    def get_secret(self, secret_name):
        get_secret_value_response = self.client.get_secret_value(
            SecretId=secret_name
        )

        if 'SecretString' in get_secret_value_response:
            return get_secret_value_response['SecretString']

        return get_secret_value_response['SecretBinary']

    def update_secret(self, secret_name, update_json):
        try:
            return self.client.update_secret(
                SecretId=secret_name,
                SecretString=update_json
            )
        except ClientError as e:
            print('Error!!!')
            print(e)


def main():
    secret_name = "<SECRET_NAME>"

    # シークレット値を取得
    sm = SecretsManager()
    secret = sm.get_secret(secret_name)
    print(secret)

    # シークレット値を更新
    secret_dict = json.loads(secret)
    secret_dict['xxxxx'] = 'piyo'
    sm.update_secret(secret_name, json.dumps(secret_dict))


if __name__ == '__main__':
    main()

まとめ

更新する方法も分かってしまえば難しいことではなかったようでした。辞書型で任意の値を設定した後にjson.loadsで変更すると意図した値で更新することが出来ました。 あとは用途を考えて、値を更新することがあればしていこうと思います。