

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Dapatkan nilai rahasia Secrets Manager menggunakan Python
<a name="retrieving-secrets-python"></a>

Dalam aplikasi, Anda dapat mengambil rahasia Anda dengan menelepon `GetSecretValue` atau `BatchGetSecretValue` di salah satu file. AWS SDKs Namun, kami menyarankan Anda menyimpan nilai rahasia Anda dengan menggunakan caching sisi klien. Rahasia caching meningkatkan kecepatan dan mengurangi biaya Anda.

**Topics**
+ [

# Dapatkan nilai rahasia Secrets Manager menggunakan Python dengan caching sisi klien
](retrieving-secrets_cache-python.md)
+ [

# Dapatkan nilai rahasia Secrets Manager menggunakan Python AWS SDK
](retrieving-secrets-python-sdk.md)
+ [

# Dapatkan sejumlah nilai rahasia Secrets Manager menggunakan Python AWS SDK
](retrieving-secrets-python-batch.md)

# Dapatkan nilai rahasia Secrets Manager menggunakan Python dengan caching sisi klien
<a name="retrieving-secrets_cache-python"></a>

Saat Anda mengambil rahasia, Anda dapat menggunakan komponen caching berbasis Secrets Manager Python untuk men-cache untuk digunakan di masa mendatang. Mengambil rahasia yang di-cache lebih cepat daripada mengambilnya dari Secrets Manager. Karena ada biaya untuk memanggil Secrets Manager APIs, menggunakan cache dapat mengurangi biaya Anda. Untuk semua cara Anda dapat mengambil rahasia, lihat[Dapatkan rahasia](retrieving-secrets.md).

Kebijakan cache adalah Least Recently Used (LRU), jadi ketika cache harus membuang rahasia, ia membuang rahasia yang paling jarang digunakan. Secara default, cache menyegarkan rahasia setiap jam. Anda dapat mengonfigurasi [seberapa sering rahasia disegarkan](retrieving-secrets_cache-ref-secretcacheconfig.md) dalam cache, dan Anda dapat [menghubungkan ke pengambilan rahasia](retrieving-secrets_cache-ref-secretcachehook.md) untuk menambahkan lebih banyak fungsionalitas.

Cache tidak memaksa pengumpulan sampah setelah referensi cache dibebaskan. Implementasi cache tidak termasuk pembatalan cache. Implementasi cache difokuskan di sekitar cache itu sendiri, dan tidak dikeraskan atau difokuskan keamanan. Jika Anda memerlukan keamanan tambahan seperti mengenkripsi item dalam cache, gunakan antarmuka dan metode abstrak yang disediakan.

Untuk menggunakan komponen, Anda harus memiliki yang berikut: 
+ Python 3.6 atau yang lebih baru.
+ botocore 1.12 atau lebih tinggi. [Lihat [AWS SDK untuk Python](https://aws.amazon.com/sdk-for-python/) dan Botocore.](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html) 
+ setuptools\$1scm 3.2 atau lebih tinggi. Lihat [https://pypi. org/project/setuptools-scm/](https://pypi.org/project/setuptools-scm/).

Untuk mengunduh kode sumber, lihat [Secrets Manager Python berbasis komponen klien caching](https://github.com/aws/aws-secretsmanager-caching-python ) di. GitHub

Untuk menginstal komponen, gunakan perintah berikut.

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

**Izin yang diperlukan:**
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:GetSecretValue`

Untuk informasi selengkapnya, lihat [Referensi izin](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 Ambil rahasia**  
Contoh berikut menunjukkan bagaimana untuk mendapatkan nilai rahasia untuk rahasia bernama*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>

Cache dalam memori untuk rahasia yang diambil dari Secrets Manager. Anda menggunakan [get\$1secret\$1string](#retrieving-secrets_cache-ref-secretcache_get_secret_string) atau [get\$1secret\$1binary](#retrieving-secrets_cache-ref-secretcache_get_secret_binary) untuk mengambil rahasia dari cache. Anda dapat mengkonfigurasi pengaturan cache dengan meneruskan [SecretCacheConfig](retrieving-secrets_cache-ref-secretcacheconfig.md) objek di konstruktor. 

Untuk informasi selengkapnya, termasuk contoh, lihat[Dapatkan nilai rahasia Secrets Manager menggunakan Python dengan caching sisi klien](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>

Mengambil nilai string rahasia.

Sintaksis Permintaan  

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

Parameter  
+ `secret_id`(*string*): [Diperlukan] Nama atau ARN rahasia.
+ `version_stage`(*string*): Versi rahasia yang ingin Anda ambil. Untuk informasi selengkapnya, lihat [versi rahasia](whats-in-a-secret.md). Defaultnya adalah 'AWSCURRENT'. 

Jenis pengembalian  
string

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

Mengambil nilai biner rahasia.

Sintaksis Permintaan  

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

Parameter  
+ `secret_id`(*string*): [Diperlukan] Nama atau ARN rahasia.
+ `version_stage`(*string*): Versi rahasia yang ingin Anda ambil. Untuk informasi selengkapnya, lihat [versi rahasia](whats-in-a-secret.md). Defaultnya adalah 'AWSCURRENT'. 

Jenis pengembalian  
string yang dikodekan [base64](https://tools.ietf.org/html/rfc4648#section-4)

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

Opsi konfigurasi cache untuk ukuran cache maks dan Time to Live (TTL) untuk rahasia cache. [SecretCache](retrieving-secrets_cache-ref-secretcache.md)Parameter

`max_cache_size`(*int*)  
Ukuran cache maksimum. Defaultnya adalah `1024` rahasia. 

`exception_retry_delay_base`(*int*)  
Jumlah detik untuk menunggu setelah pengecualian ditemui sebelum mencoba kembali permintaan. Nilai default-nya `1`.

`exception_retry_growth_factor`(*int*) pur  
Faktor pertumbuhan yang digunakan untuk menghitung waktu tunggu antara percobaan ulang permintaan yang gagal. Nilai default-nya `2`. 

`exception_retry_delay_max`(*int*)  
Jumlah maksimum waktu dalam hitungan detik untuk menunggu di antara permintaan yang gagal. Nilai default-nya `3600`.

`default_version_stage`(*str)*  
Versi rahasia yang ingin Anda cache. Untuk informasi selengkapnya, lihat [Versi rahasia](whats-in-a-secret.md#term_version). Nilai default-nya `'AWSCURRENT'`.

`secret_refresh_interval`(*int*)  
Jumlah detik untuk menunggu antara menyegarkan informasi rahasia yang di-cache. Nilai default-nya `3600`.

`secret_cache_hook` (*SecretCacheHook*)  
Implementasi dari kelas `SecretCacheHook` abstrak. Nilai default-nya adalah `None`.

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

Antarmuka untuk menghubungkan [SecretCache](retrieving-secrets_cache-ref-secretcache.md) ke dalam untuk melakukan tindakan pada rahasia yang disimpan dalam cache. 

**Topics**
+ [

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

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

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

Mempersiapkan objek untuk disimpan dalam cache.

Sintaksis Permintaan  

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

Parameter  
+ `obj`(*objek*) -- [Diperlukan] Rahasia atau objek yang berisi rahasia.

Jenis pengembalian  
object

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

Mendapatkan objek dari objek yang di-cache.

Sintaksis Permintaan  

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

Parameter  
+ `obj`(*objek*): [Wajib] Rahasia atau objek yang berisi rahasia.

Jenis pengembalian  
object

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

Dekorator ini mengharapkan string ID rahasia dan [SecretCache](retrieving-secrets_cache-ref-secretcache.md) sebagai argumen pertama dan kedua. Dekorator mengembalikan nilai string rahasia. Rahasianya harus berisi string. 

```
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>

Dekorator ini mengharapkan string ID rahasia dan [SecretCache](retrieving-secrets_cache-ref-secretcache.md) sebagai argumen pertama dan kedua. Argumen yang tersisa memetakan parameter dari fungsi yang dibungkus ke kunci JSON dalam rahasia. Rahasianya harus berisi string dalam struktur JSON. 

Untuk rahasia yang berisi JSON ini:

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

Contoh berikut menunjukkan cara mengekstrak nilai JSON untuk `username` dan `password` dari rahasia.

```
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')
```

# Dapatkan nilai rahasia Secrets Manager menggunakan Python AWS SDK
<a name="retrieving-secrets-python-sdk"></a>

Dalam aplikasi, Anda dapat mengambil rahasia Anda dengan menelepon `GetSecretValue` atau `BatchGetSecretValue` di salah satu file. AWS SDKs Namun, kami menyarankan Anda menyimpan nilai rahasia Anda dengan menggunakan caching sisi klien. Rahasia caching meningkatkan kecepatan dan mengurangi biaya Anda.

Untuk aplikasi Python, gunakan [komponen caching berbasis Secrets Manager Python](retrieving-secrets_cache-python.md) atau panggil SDK langsung dengan atau. [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)

Contoh kode berikut menunjukkan cara menggunakan`GetSecretValue`.

**Izin yang diperlukan:** `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
```

# Dapatkan sejumlah nilai rahasia Secrets Manager menggunakan Python AWS SDK
<a name="retrieving-secrets-python-batch"></a>

Contoh kode berikut menunjukkan cara mendapatkan sejumlah nilai rahasia Secrets Manager.

**Izin yang diperlukan:**
+ `secretsmanager:BatchGetSecretValue` 
+ `secretsmanager:GetSecretValue`izin untuk setiap rahasia yang ingin Anda ambil.
+ Jika Anda menggunakan filter, Anda juga harus memilikinya`secretsmanager:ListSecrets`. 

Untuk contoh kebijakan izin, lihat[Contoh: Izin untuk mengambil sekelompok nilai rahasia dalam batch](auth-and-access_iam-policies.md#auth-and-access_examples_batch).

**penting**  
Jika Anda memiliki kebijakan VPCE yang menolak izin untuk mengambil rahasia individu dalam grup yang Anda ambil, tidak `BatchGetSecretValue` akan mengembalikan nilai rahasia apa pun, dan itu akan mengembalikan kesalahan.

```
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
```