

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 키 스토어 작업 구성
<a name="keystore-actions"></a>

키 스토어 작업은 사용자가 수행할 수 있는 작업과 AWS KMS 계층적 키링이 키 스토어에 나열된 KMS 키를 사용하는 방법을 결정합니다. AWS Database Encryption SDK는 다음과 같은 키 스토어 작업 구성을 지원합니다.

**정적**  
키 스토어를 정적으로 구성하면 키 스토어는 키 스토어 작업을 구성할 `kmsConfiguration` 때에서 제공하는 KMS 키 ARN과 연결된 KMS 키만 사용할 수 있습니다. 브랜치 키를 생성, 버전 관리 또는 가져올 때 다른 KMS 키 ARN이 발생하는 경우 예외가 발생합니다.  
에서 다중 리전 KMS 키를 지정할 수 `kmsConfiguration`있지만 리전을 포함한 키의 전체 ARN은 KMS 키에서 파생된 브랜치 키에 유지됩니다. 다른 리전에서 키를 지정할 수 없으며, 값이 일치하려면 정확히 동일한 다중 리전 키를 제공해야 합니다.  
키 스토어 작업을 정적으로 구성하면 사용 작업(`GetActiveBranchKey`, , `GetBranchKeyVersion``GetBeaconKey`) 및 관리 작업(`CreateKey` 및 )을 수행할 수 있습니다`VersionKey`. `CreateKey`는 키 스토어 허용 목록에 새 KMS 키 ARN을 추가할 수 있는 권한 있는 작업입니다. 이 KMS 키는 새 활성 브랜치 키를 생성할 수 있습니다. KMS 키가 키 스토어에 추가되면 삭제할 수 없으므로이 작업에 대한 액세스를 제한하는 것이 좋습니다.

**Discovery**  
검색을 위해 키 스토어 작업을 구성할 때 키 스토어는 키 스토어에 허용 목록에 있는 모든 AWS KMS key ARN을 사용할 수 있습니다. 그러나 다중 리전 KMS 키가 발생하고 키의 ARN에 있는 리전이 사용 중인 AWS KMS 클라이언트의 리전과 일치하지 않는 경우 예외가 발생합니다.  
검색을 위해 키 스토어를 구성할 때는 `CreateKey` 및와 같은 관리 작업을 수행할 수 없습니다`VersionKey`. 암호화, 복호화, 서명 및 확인 작업을 활성화하는 사용 작업만 수행할 수 있습니다. 자세한 내용은 [최소 권한 구현](keystore-least-privilege.md) 단원을 참조하십시오.

## 키 스토어 작업 구성
<a name="config-keystore-actions"></a>

키 스토어 작업을 구성하기 전에 다음 사전 조건을 충족하는지 확인합니다.
+ 수행해야 할 작업을 결정합니다. 자세한 내용은 [최소 권한 구현](keystore-least-privilege.md) 단원을 참조하십시오.
+ 논리적 키 스토어 이름 선택

  DynamoDB 테이블 이름과 논리적 키 스토어 이름 사이에 one-to-one 매핑이 있어야 합니다. 논리적 키 스토어 이름은 DynamoDB 복원 작업을 간소화하기 위해 테이블에 저장된 모든 데이터에 암호화 방식으로 바인딩되며, 첫 번째 사용자가 처음 정의한 후에는 변경할 수 없습니다. 키 스토어 작업에서 항상 동일한 논리적 키 스토어 이름을 지정해야 합니다. 자세한 내용은 [logical key store name](create-keystore.md#logical-key-store-name) 단원을 참조하십시오.

### 정적 구성
<a name="static-keystore"></a>

다음 예제에서는 키 스토어 작업을 정적으로 구성합니다. 키 스토어 역할을 하는 DynamoDB 테이블의 이름, 키 스토어의 논리적 이름, 대칭 암호화 KMS 키를 식별하는 KMS 키 ARN을 지정해야 합니다.

**참고**  
키 스토어 서비스를 정적으로 구성할 때 지정하는 KMS 키 ARN을 신중하게 고려하세요. `CreateKey` 작업은 KMS 키 ARN을 브랜치 키 스토어 허용 목록에 추가합니다. KMS 키가 브랜치 키 스토어에 추가되면 삭제할 수 없습니다.

------
#### [ Java ]

```
final KeyStore keystore = KeyStore.builder().KeyStoreConfig(
	                 KeyStoreConfig.builder()
	                         .ddbClient(DynamoDbClient.create())
	                         .ddbTableName(keyStoreName)
	                         .logicalKeyStoreName(logicalKeyStoreName)
	                         .kmsClient(KmsClient.create())
	                         .kmsConfiguration(KMSConfiguration.builder()
	                                 .kmsKeyArn(kmsKeyArn)
	                                 .build())
	                         .build()).build();
```

------
#### [ C\$1 / .NET ]

```
var kmsConfig = new KMSConfiguration { KmsKeyArn = kmsKeyArn };
	 var keystoreConfig = new KeyStoreConfig
	 {
	     KmsClient = new AmazonKeyManagementServiceClient(),
	     KmsConfiguration = kmsConfig,
	     DdbTableName = keyStoreName,
	     DdbClient = new AmazonDynamoDBClient(),
	     LogicalKeyStoreName = logicalKeyStoreName
	 };
	 var keystore = new KeyStore(keystoreConfig);
```

------
#### [ Rust ]

```
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let key_store_config = KeyStoreConfig::builder()
    .kms_client(aws_sdk_kms::Client::new(&sdk_config))
    .ddb_client(aws_sdk_dynamodb::Client::new(&sdk_config))
    .ddb_table_name(key_store_name)
    .logical_key_store_name(logical_key_store_name)
    .kms_configuration(KmsConfiguration::KmsKeyArn(kms_key_arn.to_string()))
    .build()?;

let keystore = keystore_client::Client::from_conf(key_store_config)?;
```

------

### 검색 구성
<a name="discovery-keystore"></a>

다음 예제에서는 검색을 위한 키 스토어 작업을 구성합니다. 키 스토어 역할을 하는 DynamoDB 테이블의 이름과 논리적 키 스토어 이름을 지정해야 합니다.

------
#### [ Java ]

```
final KeyStore keystore = KeyStore.builder().KeyStoreConfig(
                 KeyStoreConfig.builder()
                         .ddbClient(DynamoDbClient.create())
                         .ddbTableName(keyStoreName)
                         .logicalKeyStoreName(logicalKeyStoreName)
                         .kmsClient(KmsClient.create())
                         .kmsConfiguration(KMSConfiguration.builder()
                                 .discovery(Discovery.builder().build())
                                 .build())
                         .build()).build();
```

------
#### [ C\$1 / .NET ]

```
var keystoreConfig = new KeyStoreConfig
 {
     KmsClient = new AmazonKeyManagementServiceClient(),
     KmsConfiguration = new KMSConfiguration {Discovery = new Discovery()},
     DdbTableName = keyStoreName,
     DdbClient = new AmazonDynamoDBClient(),
     LogicalKeyStoreName = logicalKeyStoreName
 };
 var keystore = new KeyStore(keystoreConfig);
```

------
#### [ Rust ]

```
let key_store_config = KeyStoreConfig::builder()
        .kms_client(kms_client)
        .ddb_client(ddb_client)
        .ddb_table_name(key_store_name)
        .logical_key_store_name(logical_key_store_name)
        .kms_configuration(KmsConfiguration::Discovery(Discovery::builder().build()?))
        .build()?;
```

------