Secrets Manager for Python (Boto3) - AWSSDK コードサンプル

AWSDocAWS SDKGitHub サンプルリポジトリには、さらに多くの SDK サンプルがあります

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Secrets Manager for Python (Boto3)

次のコード例は、with Seクレターマネージャーを使用してで一般的なシナリオを実装して一般的なシナリオを実装する、ウィズ・Secrets Manager を使用してで一般的なシナリオを実装すること、とAWS SDK for Python (Boto3) with Secrets マネージャーを使用してで一般的なシナリオを実装

アクション」は、個々のサービス関数の呼び出し方法を示すコードの抜粋です。

シナリオ」は、同じサービス内で複数の関数を呼び出して、特定のタスクを実行する方法を示すコード例です。

それぞれの例にはGitHub、へのリンクがあり、コンテキストでコードを設定および実行する方法についての説明が記載されています。

アクション

次の例で、Secrets Manager シークレットを作成する方法を示します。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def create(self, name, secret_value): """ Creates a new secret. The secret value can be a string or bytes. :param name: The name of the secret to create. :param secret_value: The value of the secret. :return: Metadata about the newly created secret. """ self._clear() try: kwargs = {'Name': name} if isinstance(secret_value, str): kwargs['SecretString'] = secret_value elif isinstance(secret_value, bytes): kwargs['SecretBinary'] = secret_value response = self.secretsmanager_client.create_secret(**kwargs) self.name = name logger.info("Created secret %s.", name) except ClientError: logger.exception("Couldn't get secret %s.", name) raise else: return response
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいCreateSecret

次の例で、Secrets Manager シークレットを削除する方法を示します。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def delete(self, without_recovery): """ Deletes the secret. :param without_recovery: Permanently deletes the secret immediately when True; otherwise, the deleted secret can be restored within the recovery window. The default recovery window is 30 days. """ if self.name is None: raise ValueError try: self.secretsmanager_client.delete_secret( SecretId=self.name, ForceDeleteWithoutRecovery=without_recovery) logger.info("Deleted secret %s.", self.name) self._clear() except ClientError: logger.exception("Deleted secret %s.", self.name) raise
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいDeleteSecret

次のコード例は、Secrets Manager シークレットの記述方法を示しています。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def describe(self, name=None): """ Gets metadata about a secret. :param name: The name of the secret to load. If `name` is None, metadata about the current secret is retrieved. :return: Metadata about the secret. """ if self.name is None and name is None: raise ValueError if name is None: name = self.name self._clear() try: response = self.secretsmanager_client.describe_secret(SecretId=name) self.name = name logger.info("Got secret metadata for %s.", name) except ClientError: logger.exception("Couldn't get secret metadata for %s.", name) raise else: return response
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいDescribeSecret

次のコード例は、Secrets Manager からランダムパスワードを取得する方法を示しています。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def get_random_password(self, pw_length): """ Gets a randomly generated password. :param pw_length: The length of the password. :return: The generated password. """ try: response = self.secretsmanager_client.get_random_password( PasswordLength=pw_length) password = response['RandomPassword'] logger.info("Got random password.") except ClientError: logger.exception("Couldn't get random password.") raise else: return password
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいGetRandomPassword

次の例で、Secrets Manager シークレットの値を取得する方法を示します。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def get_value(self, stage=None): """ Gets the value of a secret. :param stage: The stage of the secret to retrieve. If this is None, the current stage is retrieved. :return: The value of the secret. When the secret is a string, the value is contained in the `SecretString` field. When the secret is bytes, it is contained in the `SecretBinary` field. """ if self.name is None: raise ValueError try: kwargs = {'SecretId': self.name} if stage is not None: kwargs['VersionStage'] = stage response = self.secretsmanager_client.get_secret_value(**kwargs) logger.info("Got value for secret %s.", self.name) except ClientError: logger.exception("Couldn't get value for secret %s.", self.name) raise else: return response
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいGetSecretValue

次のコード例は、Secrets Manager シークレットを一覧表示する方法を示しています。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def list(self, max_results): """ Lists secrets for the current account. :param max_results: The maximum number of results to return. :return: Yields secrets one at a time. """ try: paginator = self.secretsmanager_client.get_paginator('list_secrets') for page in paginator.paginate( PaginationConfig={'MaxItems': max_results}): for secret in page['SecretList']: yield secret except ClientError: logger.exception("Couldn't list secrets.") raise
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいListSecrets

次の例で、Secrets Manager シークレットに値を put する方法を示します。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def put_value(self, secret_value, stages=None): """ Puts a value into an existing secret. When no stages are specified, the value is set as the current ('AWSCURRENT') stage and the previous value is moved to the 'AWSPREVIOUS' stage. When a stage is specified that already exists, the stage is associated with the new value and removed from the old value. :param secret_value: The value to add to the secret. :param stages: The stages to associate with the secret. :return: Metadata about the secret. """ if self.name is None: raise ValueError try: kwargs = {'SecretId': self.name} if isinstance(secret_value, str): kwargs['SecretString'] = secret_value elif isinstance(secret_value, bytes): kwargs['SecretBinary'] = secret_value if stages is not None: kwargs['VersionStages'] = stages response = self.secretsmanager_client.put_secret_value(**kwargs) logger.info("Value put in secret %s.", self.name) except ClientError: logger.exception("Couldn't put value in secret %s.", self.name) raise else: return response
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいPutSecretValue

次のコード例は、Secrets Manager シークレットバージョンのステージを更新する方法を示しています。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

class SecretsManagerSecret: """Encapsulates Secrets Manager functions.""" def __init__(self, secretsmanager_client): """ :param secretsmanager_client: A Boto3 Secrets Manager client. """ self.secretsmanager_client = secretsmanager_client self.name = None def update_version_stage(self, stage, remove_from, move_to): """ Updates the stage associated with a version of the secret. :param stage: The stage to update. :param remove_from: The ID of the version to remove the stage from. :param move_to: The ID of the version to add the stage to. :return: Metadata about the secret. """ if self.name is None: raise ValueError try: response = self.secretsmanager_client.update_secret_version_stage( SecretId=self.name, VersionStage=stage, RemoveFromVersionId=remove_from, MoveToVersionId=move_to) logger.info("Updated version stage %s for secret %s.", stage, self.name) except ClientError: logger.exception( "Couldn't update version stage %s for secret %s.", stage, self.name) raise else: return response
  • API の詳細については、「AWSSDK for Python (Boto3) API リファレンス」のを参照してくださいUpdateSecretVersionStage

シナリオ

次のコード例は、以下の操作方法を示しています。

  • Secrets Manager シークレットを作成する。

  • ランダムなパスワードを生成し、シークレットを更新します。

  • シークレットの現在および以前の値を取得します。

  • バイナリデータをシークレットに保存して、リソースをクリーンアップする。

SDK for Python (Boto3)
注記

他にもありますGitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

シークレットを作成し、その値とステージを更新し、シークレットを削除します。

def create_and_manage_secret_demo(): """ Shows how to use AWS Secrets Manager to create a secret, update its value and stage, and delete it. """ secret = SecretsManagerSecret(boto3.client('secretsmanager')) print("Create a secret.") secret.create("doc-example-secretsmanager-secret", "Shh, don't tell.") print("Get secret value.") value = secret.get_value() print(f"Secret value: {value['SecretString']}") print("Get a random password.") password = secret.get_random_password(20) print(f"Got password: {password}") print("Put password as new secret value.") secret.put_value(password) print("Get current and previous values.") current = secret.get_value() previous = secret.get_value('AWSPREVIOUS') print(f"Current: {current['SecretString']}") print(f"Previous: {previous['SecretString']}") byteval = base64.b64encode("I'm a Base64 string!".encode('utf-8')) stage = 'CUSTOM_STAGE' print(f"Put byte value with a custom stage '{stage}'.") secret.put_value(byteval, [stage]) time.sleep(1) print(f"Get secret value associated with stage '{stage}'.") got_val = secret.get_value(stage) print(f"Raw bytes value: {got_val['SecretBinary']}") print(f"Decoded value: {base64.b64decode(got_val['SecretBinary']).decode('utf-8')}") pprint(secret.describe()) print("List 10 secrets for the account.") for sec in secret.list(10): print(f"Name: {sec['Name']}") print("Delete the secret.") secret.delete(True)