

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

# Python を使用して Secrets Manager のシークレット値を取得する
<a name="retrieving-secrets-python"></a>

アプリケーションでは、任意の AWS SDKs `BatchGetSecretValue`で `GetSecretValue`または を呼び出してシークレットを取得できます。ただし、クライアント側のキャッシュを使用してシークレット値をキャッシュすることをお勧めします。シークレットをキャッシュすると、速度が向上し、コストが削減されます。

**Topics**
+ [

# Python とクライアント側のキャッシュを使用して、Secrets Manager のシークレット値を取得する
](retrieving-secrets_cache-python.md)
+ [

# Python AWS SDK を使用して Secrets Manager シークレット値を取得する
](retrieving-secrets-python-sdk.md)
+ [

# Python AWS SDK を使用して Secrets Manager シークレット値のバッチを取得する
](retrieving-secrets-python-batch.md)

# Python とクライアント側のキャッシュを使用して、Secrets Manager のシークレット値を取得する
<a name="retrieving-secrets_cache-python"></a>

シークレットを取得するときに、Secrets Manager の Python ベースのキャッシュコンポーネントを使用して、将来使用するためにキャッシュすることができます。キャッシュされたシークレットの取得は、Secrets Manager からの取得よりも高速です。Secrets Manager API を呼び出すにはコストがかかるため、キャッシュを使用するとコストを削減できます。シークレットを取得するすべての方法については、「[シークレットの取得](retrieving-secrets.md)」を参照してください。

キャッシュポリシーは LRU (最近最も使われていない) であるため、キャッシュでシークレットを破棄する必要が生じた場合は、最も最近使われていないシークレットが破棄されます。デフォルトでは、1 時間ごとにキャッシュでシークレットが更新されます。キャッシュで[シークレットが更新される頻度](retrieving-secrets_cache-ref-secretcacheconfig.md)を設定できるだけでなく、[シークレットの取得にフック](retrieving-secrets_cache-ref-secretcachehook.md)させて機能を追加することもできます。

キャッシュ参照が解放されると、キャッシュはガベージコレクションを強制しません。キャッシュの実装には、キャッシュの無効化は含まれていません。キャッシュを実装するのはキャッシュを使用するためであり、セキュリティを強化するためでもセキュリティに焦点を当てるためでもありません。キャッシュ内のアイテムを暗号化するなど、セキュリティを強化する必要がある場合は、所定のインターフェイスと抽象メソッドを使用してください。

このコンポーネントを使用するには、以下が必要です。
+ Python 3.6 以降。
+ botocore 1.12 以降。「[AWS SDK for Python](https://aws.amazon.com/sdk-for-python/)」および「[Botocore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)」を参照してください。
+ setuptools\$1scm 3.2 以降。[https://pypi.org/project/setuptools-scm/](https://pypi.org/project/setuptools-scm/) を参照してください。

ソースコードをダウンロードするには、GitHub の「[Secrets Manager Python-based caching client component](https://github.com/aws/aws-secretsmanager-caching-python )」(Secrets Manager の Python ベースのキャッシュクライアントコンポーネント) を参照してください。

コンポーネントをインストールするには、次のコマンドを使用します。

```
$ pip install aws-secretsmanager-caching
```

**必要な許可:**
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:GetSecretValue`

詳細については、「[アクセス許可に関するリファレンス](auth-and-access.md#reference_iam-permissions)」を参照してください。

**Topics**
+ [

# SecretCache
](retrieving-secrets_cache-ref-secretcache.md)
+ [

# SecretCacheConfig
](retrieving-secrets_cache-ref-secretcacheconfig.md)
+ [

# SecretCacheHook
](retrieving-secrets_cache-ref-secretcachehook.md)
+ [

# @InjectSecretString
](retrieving-secrets_cache-decor-string.md)
+ [

# @InjectKeywordedSecretString
](retrieving-secrets_cache-decor-keyword.md)

**Example シークレットを取得する**  
次の例は、*mysecret* という名前のシークレットのシークレット値を取得する方法を示しています。  

```
import botocore 
import botocore.session 
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig 

client = botocore.session.get_session().create_client('secretsmanager')
cache_config = SecretCacheConfig()
cache = SecretCache( config = cache_config, client = client)

secret = cache.get_secret_string('mysecret')
```

# SecretCache
<a name="retrieving-secrets_cache-ref-secretcache"></a>

Secrets Manager から取得されたシークレットのインメモリキャッシュ。[get\$1secret\$1string](#retrieving-secrets_cache-ref-secretcache_get_secret_string) または [get\$1secret\$1binary](#retrieving-secrets_cache-ref-secretcache_get_secret_binary) を使用して、キャッシュからシークレットを取得します。キャッシュの設定は、コンストラクタで [SecretCacheConfig](retrieving-secrets_cache-ref-secretcacheconfig.md) オブジェクトを渡すことで設定できます。

詳細と例については、「[Python とクライアント側のキャッシュを使用して、Secrets Manager のシークレット値を取得する](retrieving-secrets_cache-python.md)」を参照してください。

```
cache = SecretCache(
    config = SecretCacheConfig,
    client = [client](https://botocore.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html)
)
```

**Topics**
+ [

## get\$1secret\$1string
](#retrieving-secrets_cache-ref-secretcache_get_secret_string)
+ [

## get\$1secret\$1binary
](#retrieving-secrets_cache-ref-secretcache_get_secret_binary)

## get\$1secret\$1string
<a name="retrieving-secrets_cache-ref-secretcache_get_secret_string"></a>

シークレット文字列値を取得します。

リクエストの構文  

```
response = cache.get_secret_string(
    secret_id='string',
    version_stage='string' )
```

パラメータ  
+ `secret_id` (*string*): [必須] シークレットの名前または ARN。
+ `version_stage` (*string*): 取得するシークレットのバージョン。詳細については、「[secret versions](whats-in-a-secret.md)」を参照してください。デフォルトは「AWSCURRENT」です。

戻り型  
string

## get\$1secret\$1binary
<a name="retrieving-secrets_cache-ref-secretcache_get_secret_binary"></a>

シークレットバイナリ値を取得します。

リクエストの構文  

```
response = cache.get_secret_binary(
    secret_id='string',
    version_stage='string'
)
```

パラメータ  
+ `secret_id` (*string*): [必須] シークレットの名前または ARN。
+ `version_stage` (*string*): 取得するシークレットのバージョン。詳細については、「[secret versions](whats-in-a-secret.md)」を参照してください。デフォルトは「AWSCURRENT」です。

戻り型  
[base64 でエンコードされた](https://tools.ietf.org/html/rfc4648#section-4)文字列

# SecretCacheConfig
<a name="retrieving-secrets_cache-ref-secretcacheconfig"></a>

キャッシュされるシークレットの最大キャッシュサイズや有効期限 (TTL) などの、[SecretCache](retrieving-secrets_cache-ref-secretcache.md) のキャッシュ設定オプション。パラメータ

`max_cache_size` (*int*)  
最大キャッシュサイズ。デフォルトは `1024` 個のシークレットです。

`exception_retry_delay_base` (*int*)  
例外が発生してから、リクエストを再試行するまで待機する秒数。デフォルトは `1` です。

`exception_retry_growth_factor` (*int*)pur  
失敗したリクエストの再試行間の待機時間を計算するために使用する増加係数。デフォルトは `2` です。

`exception_retry_delay_max` (*int*)  
失敗したリクエスト間の最大待機時間 (秒)。デフォルトは `3600` です。

`default_version_stage` (*str*)  
キャッシュするシークレットのバージョン。詳細については、「[Secret versions](whats-in-a-secret.md#term_version)」(シークレットバージョン) を参照してください。デフォルトは `'AWSCURRENT'` です。

`secret_refresh_interval` (*int*)  
キャッシュされたシークレット情報の更新間の待機秒数。デフォルトは `3600` です。

`secret_cache_hook` (*SecretCacheHook*)  
`SecretCacheHook` 抽象クラスの実装。デフォルト値は `None` です。

# SecretCacheHook
<a name="retrieving-secrets_cache-ref-secretcachehook"></a>

[SecretCache](retrieving-secrets_cache-ref-secretcache.md) に接続して、キャッシュに保存されているシークレットに対してアクションを実行するインターフェイス。

**Topics**
+ [

## put
](#retrieving-secrets_cache-ref-secretcachehook_put)
+ [

## get
](#retrieving-secrets_cache-ref-secretcachehook_get)

## put
<a name="retrieving-secrets_cache-ref-secretcachehook_put"></a>

キャッシュに保存するオブジェクトを準備します。

リクエストの構文  

```
response = hook.put(
    obj='secret_object'
)
```

パラメータ  
+ `obj` (*object*) -- [必須] シークレットまたはシークレットを含むオブジェクト。

戻り型  
オブジェクト

## get
<a name="retrieving-secrets_cache-ref-secretcachehook_get"></a>

キャッシュされたオブジェクトからオブジェクトを派生させます。

リクエストの構文  

```
response = hook.get(
    obj='secret_object'
)
```

パラメータ  
+ `obj` (*object*): [必須] シークレットまたはシークレットを含むオブジェクト。

戻り型  
オブジェクト

# @InjectSecretString
<a name="retrieving-secrets_cache-decor-string"></a>

このデコレータは、1 番目と 2 番目の引数として、シークレット ID 文字列と [SecretCache](retrieving-secrets_cache-ref-secretcache.md) を必要とします。このデコレータはシークレット文字列値を返します。シークレットに文字列が含まれている必要があります。

```
from aws_secretsmanager_caching import SecretCache 
from aws_secretsmanager_caching import InjectKeywordedSecretString,  InjectSecretString 

cache = SecretCache()

@InjectSecretString ( 'mysecret' ,  cache ) 
def function_to_be_decorated( arg1,  arg2,  arg3):
```

# @InjectKeywordedSecretString
<a name="retrieving-secrets_cache-decor-keyword"></a>

このデコレータは、1 番目と 2 番目の引数として、シークレット ID 文字列と [SecretCache](retrieving-secrets_cache-ref-secretcache.md) を必要とします。残りの引数は、ラップされた関数のパラメータをシークレット内の JSON キーにマッピングします。シークレットに JSON 構造の文字列が含まれている必要があります。

この JSON を含むシークレットの場合は、次のようになります。

```
{
  "username": "saanvi",
  "password": "EXAMPLE-PASSWORD"
}
```

次の例では、シークレットから `username` および `password` の JSON 値を抽出する方法を示しています。

```
from aws_secretsmanager_caching import SecretCache 
  from aws_secretsmanager_caching import InjectKeywordedSecretString,  InjectSecretString 
  
  cache = SecretCache()
  
  @InjectKeywordedSecretString ( secret_id = 'mysecret' ,  cache = cache ,  func_username = 'username' ,  func_password = 'password' ) 
  def function_to_be_decorated( func_username,  func_password):
       print( 'Do something with the func_username and func_password parameters')
```

# Python AWS SDK を使用して Secrets Manager シークレット値を取得する
<a name="retrieving-secrets-python-sdk"></a>

アプリケーションでは、任意の AWS SDKs `BatchGetSecretValue`で `GetSecretValue`または を呼び出してシークレットを取得できます。ただし、クライアント側のキャッシュを使用してシークレット値をキャッシュすることをお勧めします。シークレットをキャッシュすると、速度が向上し、コストが削減されます。

Python アプリケーションの場合は、[Secrets Manager の Python ベースのキャッシュコンポーネント](retrieving-secrets_cache-python.md)を使用するか、[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager/client/get_secret_value.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager/client/get_secret_value.html) または [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager/client/batch_get_secret_value.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager/client/batch_get_secret_value.html) を使用して SDK を直接呼び出します。

次のサンプルコードは、`GetSecretValue` を使用する方法を説明しています。

**必要な許可:**`secretsmanager:GetSecretValue`

```
"""
Purpose

Shows how to use the AWS SDK for Python (Boto3) with AWS
Secrets Manager to get a specific of secrets that match a
specified name
"""
import boto3
import logging

from get_secret_value import GetSecretWrapper

# Configure logging
logging.basicConfig(level=logging.INFO)


def run_scenario(secret_name):
    """
    Retrieve a secret from AWS Secrets Manager.

    :param secret_name: Name of the secret to retrieve.
    :type secret_name: str
    """
    try:
        # Validate secret_name
        if not secret_name:
            raise ValueError("Secret name must be provided.")
        # Retrieve the secret by name
        client = boto3.client("secretsmanager")
        wrapper = GetSecretWrapper(client)
        secret = wrapper.get_secret(secret_name)
        # Note: Secrets should not be logged.
        return secret
    except Exception as e:
        logging.error(f"Error retrieving secret: {e}")
        raise

class GetSecretWrapper:
    def __init__(self, secretsmanager_client):
        self.client = secretsmanager_client


    def get_secret(self, secret_name):
        """
        Retrieve individual secrets from AWS Secrets Manager using the get_secret_value API.
        This function assumes the stack mentioned in the source code README has been successfully deployed.
        This stack includes 7 secrets, all of which have names beginning with "mySecret".

        :param secret_name: The name of the secret fetched.
        :type secret_name: str
        """
        try:
            get_secret_value_response = self.client.get_secret_value(
                SecretId=secret_name
            )
            logging.info("Secret retrieved successfully.")
            return get_secret_value_response["SecretString"]
        except self.client.exceptions.ResourceNotFoundException:
            msg = f"The requested secret {secret_name} was not found."
            logger.info(msg)
            return msg
        except Exception as e:
            logger.error(f"An unknown error occurred: {str(e)}.")
            raise
```

# Python AWS SDK を使用して Secrets Manager シークレット値のバッチを取得する
<a name="retrieving-secrets-python-batch"></a>

次のコード例は、Secrets Manager のシークレットの値をバッチ取得する方法を示しています。

**必要な許可:**
+ `secretsmanager:BatchGetSecretValue` 
+ 取得するシークレットごとに `secretsmanager:GetSecretValue` のアクセス許可が必要です。
+ フィルターを使用する場合は、`secretsmanager:ListSecrets` も必要です。

アクセス許可ポリシーの例については、「[例: バッチでシークレット値のグループを取得するためのアクセス許可](auth-and-access_iam-policies.md#auth-and-access_examples_batch)」を参照してください。

**重要**  
取得しようとしているグループ内の個別シークレットを取得するためのアクセス許可を拒否する VPCE ポリシーを設定している場合、`BatchGetSecretValue` はシークレット値を返さず、エラーが返されます。

```
class BatchGetSecretsWrapper:
    def __init__(self, secretsmanager_client):
        self.client = secretsmanager_client


    def batch_get_secrets(self, filter_name):
        """
        Retrieve multiple secrets from AWS Secrets Manager using the batch_get_secret_value API.
        This function assumes the stack mentioned in the source code README has been successfully deployed.
        This stack includes 7 secrets, all of which have names beginning with "mySecret".

        :param filter_name: The full or partial name of secrets to be fetched.
        :type filter_name: str
        """
        try:
            secrets = []
            response = self.client.batch_get_secret_value(
                Filters=[{"Key": "name", "Values": [f"{filter_name}"]}]
            )
            for secret in response["SecretValues"]:
                secrets.append(json.loads(secret["SecretString"]))
            if secrets:
                logger.info("Secrets retrieved successfully.")
            else:
                logger.info("Zero secrets returned without error.")
            return secrets
        except self.client.exceptions.ResourceNotFoundException:
            msg = f"One or more requested secrets were not found with filter: {filter_name}"
            logger.info(msg)
            return msg
        except Exception as e:
            logger.error(f"An unknown error occurred:\n{str(e)}.")
            raise
```