

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用具有用戶端快取的 .NET 取得 Secrets Manager 秘密值
<a name="retrieving-secrets_cache-net"></a>

擷取秘密時，您可以使用 Secrets Manager .NET 型快取元件進行快取以供將來使用。擷取快取的秘密比從 Secrets Manager 中擷取要快。由於呼叫 Secrets Manager API 需要花費成本，因此使用快取可以降低成本。如需您可以擷取機密的所有方法，請參閱 [取得秘密](retrieving-secrets.md)。

快取政策是「最近最少使用的 (LRU)」，因此當快取必須丟棄秘密時，其會丟棄最近最少使用的秘密。預設情況下，快取每小時重新整理一次秘密。您可以設定在快取中[重新整理機密的頻率](retrieving-secrets_cache-net-SecretCacheConfiguration.md#retrieving-secrets_cache-net-SecretCacheConfiguration-properties_CacheItemTTL)，並可以[掛接到機密擷取](retrieving-secrets_cache-net-ISecretCacheHook.md)以新增更多功能。

一旦釋放快取參考，快取不會強制執行垃圾回收。快取實作不包括快取失效。快取實作著重於快取本身，而不是強化或著重於安全性。如果您需要額外的安全性，例如加密快取中的項目，請使用提供的介面和抽象方法。

若要使用元件，您必須擁有下列項目：
+ .NET Framework 4.6.2 或更新版本，或 .NET Standard 2.0 或更新版本。請參閱 Microsoft 網站上的[下載 .NET](https://dotnet.microsoft.com/en-us/download)。
+ 適用於 .NET 的 AWS SDK。請參閱 [AWS SDKs](asm_access.md#asm-sdks)。

若要下載開放程式碼，請參閱 [.NET 快取用戶端](https://github.com/aws/aws-secretsmanager-caching-net ) (在 GitHub 上)。

若要使用快取，請首先讓其成為執行個體，然後使用 `GetSecretString` 或 `GetSecretBinary` 擷取。在連續擷取時，快取會傳回秘密的快取複本。

**若要取得快取套件**
+ 執行以下任意一項：
  + 在您的專案目錄中，執行下列 .NET CLI 命令。

    ```
    dotnet add package AWSSDK.SecretsManager.Caching --version 1.0.6
    ```
  + 將以下套件參考新增至您的 `.csproj` 檔案中。

    ```
    <ItemGroup>
        <PackageReference Include="AWSSDK.SecretsManager.Caching" Version="1.0.6" />
    </ItemGroup>
    ```

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

如需詳細資訊，請參閱[許可參考](auth-and-access.md#reference_iam-permissions)。

**Topics**
+ [SecretsManagerCache](retrieving-secrets_cache-net-SecretsManagerCache.md)
+ [SecretCacheConfiguration](retrieving-secrets_cache-net-SecretCacheConfiguration.md)
+ [ISecretCacheHook](retrieving-secrets_cache-net-ISecretCacheHook.md)

**Example 擷取秘密**  
下列程式碼範例顯示擷取名為 *MySecret* 之秘密的方式。  

```
using Amazon.SecretsManager.Extensions.Caching;

namespace LambdaExample 
{
    public class CachingExample 
    {
        private const string MySecretName ="MySecret";

        private SecretsManagerCache cache = new SecretsManagerCache();

        public async Task<Response>  FunctionHandlerAsync(string input, ILambdaContext context)
        {
            string MySecret = await cache.GetSecretString(MySecretName);
            
            // Use the secret, return success
            
        }
    }
}
```

**Example 設定存留時間 (TTL) 快取重新整理持續時間**  
下列程式碼範例說明擷取名為 *MySecret* 的秘密，並將 TTL 快取重新整理持續時間設定為 24 小時的方式。  

```
using Amazon.SecretsManager.Extensions.Caching;

namespace LambdaExample
{
    public class CachingExample
    {
        private const string MySecretName = "MySecret";
        
        private static SecretCacheConfiguration cacheConfiguration = new SecretCacheConfiguration
        {
            CacheItemTTL = 86400000
        };
        private SecretsManagerCache cache = new SecretsManagerCache(cacheConfiguration);
        public async Task<Response> FunctionHandlerAsync(string input, ILambdaContext context)
        {
            string mySecret = await cache.GetSecretString(MySecretName);

            // Use the secret, return success
        }
    }
}
```

# SecretsManagerCache
<a name="retrieving-secrets_cache-net-SecretsManagerCache"></a>

從 Secrets Manager 請求的秘密記憶體內快取。您使用 [GetSecretString](#retrieving-secrets_cache-net-SecretsManagerCache-methods-GetSecretString) 或 [GetSecretBinary](#retrieving-secrets_cache-net-SecretsManagerCache-methods-GetSecretBinary) 從快取中擷取秘密。您可以透過在建構函式的 [SecretCacheConfiguration](retrieving-secrets_cache-net-SecretCacheConfiguration.md) 物件中傳遞，設定快取設定。

如需包含範例的詳細資訊，請參閱 [使用具有用戶端快取的 .NET 取得 Secrets Manager 秘密值](retrieving-secrets_cache-net.md)。

## 建構函式
<a name="retrieving-secrets_cache-net-SecretsManagerCache-constructors"></a>

`public SecretsManagerCache()`  
`SecretsManagerCache` 物件的預設建構函式。

`public SecretsManagerCache(IAmazonSecretsManager secretsManager)`  
使用以提供的 [AmazonSecretsManagerClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SecretsManager/TSecretsManagerClient.html) 建立的 Secrets Manager 用戶端建構新快取。使用此建構函式可以自訂 Secrets Manager 用戶端，例如使用特定區域或端點。  
**Parameters**    
secretsManager  
從中擷取秘密的 [AmazonSecretsManagerClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SecretsManager/TSecretsManagerClient.html)。

`public SecretsManagerCache(SecretCacheConfiguration config)`  
使用提供的 [SecretCacheConfiguration](retrieving-secrets_cache-net-SecretCacheConfiguration.md) 建構新的秘密快取。使用此建構函式設定快取，例如要快取的秘密數量及其重新整理的頻率。  
**Parameters**    
config  
包含快取組態資訊的 [SecretCacheConfiguration](retrieving-secrets_cache-net-SecretCacheConfiguration.md)。

`public SecretsManagerCache(IAmazonSecretsManager secretsManager, SecretCacheConfiguration config)`  
使用以提供的 [AmazonSecretsManagerClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SecretsManager/TSecretsManagerClient.html) 和 [SecretCacheConfiguration](retrieving-secrets_cache-net-SecretCacheConfiguration.md) 建立的 Secrets Manager 用戶端建構新快取。使用此建構函式可以自訂 SSecrets Manager 用戶端，例如，使用特定區域或端點並設定快取，例如要快取的秘密數量及其重新整理的頻率。  
**Parameters**    
secretsManager  
從中擷取秘密的 [AmazonSecretsManagerClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SecretsManager/TSecretsManagerClient.html)。  
config  
包含快取組態資訊的 [SecretCacheConfiguration](retrieving-secrets_cache-net-SecretCacheConfiguration.md)。

## 方法
<a name="retrieving-secrets_cache-net-SecretsManagerCache-methods"></a>

### GetSecretString
<a name="retrieving-secrets_cache-net-SecretsManagerCache-methods-GetSecretString"></a>

 `public async Task<String> GetSecretString(String secretId)`

從 Secrets Manager 中擷取字串秘密。Parameters

secretId  
要擷取之秘密的 ARN 或名稱。

### GetSecretBinary
<a name="retrieving-secrets_cache-net-SecretsManagerCache-methods-GetSecretBinary"></a>

`public async Task<byte[]> GetSecretBinary(String secretId)`

從 Secrets Manager 中擷取二進位秘密。Parameters

secretId  
要擷取之秘密的 ARN 或名稱。

### RefreshNowAsync
<a name="retrieving-secrets_cache-net-SecretsManagerCache-methods-RefreshNowAsync"></a>

`public async Task<bool> RefreshNowAsync(String secretId)`

請求 Secrets Manager 的秘密值，並使用任何變更來更新快取。如果沒有現有的快取項目，則請建立一個新的。如果重新整理成功，則會傳回 `true`。Parameters

secretId  
要擷取之秘密的 ARN 或名稱。

### GetCachedSecret
<a name="retrieving-secrets_cache-net-SecretsManagerCache-methods-GetCachedSecret"></a>

`public SecretCacheItem GetCachedSecret(string secretId)`

如果存在於快取中，則傳回指定秘密的快取項目。否則，從 Secrets Manager 中擷取秘密並建立新的快取項目。Parameters

secretId  
要擷取之秘密的 ARN 或名稱。

# SecretCacheConfiguration
<a name="retrieving-secrets_cache-net-SecretCacheConfiguration"></a>

[SecretsManagerCache](retrieving-secrets_cache-net-SecretsManagerCache.md) 的快取組態選項，例如最大快取大小和快取秘密的存留時間 (TTL)。

## Properties
<a name="retrieving-secrets_cache-net-SecretCacheConfiguration-properties"></a>

### CacheItemTTL
<a name="retrieving-secrets_cache-net-SecretCacheConfiguration-properties_CacheItemTTL"></a>

`public uint CacheItemTTL { get; set; }`

快取項目的 TTL (以毫秒為單位)。預設值為 `3600000` 毫秒或 1 小時。上限為 `4294967295` 毫秒，大約為 49.7 天。

### MaxCacheSize
<a name="retrieving-secrets_cache-net-SecretCacheConfiguration-properties_MaxCacheSize"></a>

`public ushort MaxCacheSize { get; set; }`

最大快取大小。預設值為 1024 個秘密。最多 65,535 個。

### VersionStage
<a name="retrieving-secrets_cache-net-SecretCacheConfiguration-properties_VersionStage"></a>

`public string VersionStage { get; set; }`

要快取的秘密版本。如需詳細資訊，請參閱[秘密版本](whats-in-a-secret.md#term_version)。預設為 `"AWSCURRENT"`。

### 用戶端
<a name="retrieving-secrets_cache-net-SecretCacheConfiguration-properties_Client"></a>

`public IAmazonSecretsManager Client { get; set; }`

從中擷取秘密的 [AmazonSecretsManagerClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SecretsManager/TSecretsManagerClient.html)。如果是 `null`，則快取會執行個體化一個新的用戶端。預設值為 `null`。

### CacheHook
<a name="retrieving-secrets_cache-net-SecretCacheConfiguration-properties_CacheHook"></a>

`public ISecretCacheHook CacheHook { get; set; }`

[ISecretCacheHook](retrieving-secrets_cache-net-ISecretCacheHook.md)。

# ISecretCacheHook
<a name="retrieving-secrets_cache-net-ISecretCacheHook"></a>

用於掛接到 [SecretsManagerCache](retrieving-secrets_cache-net-SecretsManagerCache.md)，以對存放在快取中的秘密執行動作的介面。

## 方法
<a name="retrieving-secrets_cache-net-ISecretCacheHook-methods"></a>

### 放置
<a name="retrieving-secrets_cache-net-ISecretCacheHook-methods-Put"></a>

`object Put(object o);`

準備要存放在快取中的物件。

傳回要存放在快取中的物件。

### 取得
<a name="retrieving-secrets_cache-net-ISecretCacheHook-methods-Get"></a>

`object Get(object cachedObject);`

從快取的物件中衍生物件。

傳回要從快取傳回的物件