メインコンテンツまでスキップ

AWS Secrets ManagerからMomento API Key を取得する

Momento API Keyを安全に保存することがベストプラクティスです。AWSをご使用の場合は、Momento API KeyをAWS Secrets Managerに安全に保存することができます。そして、正しいIAMクレデンシャルで実行されているコードのみがMomento API keyを取得し、そのトークンを使ってMomento CacheまたはMomento Topicsにアクセスできるようになります。

:::備考

可能であればMomentoのCacheClientTopicClientオブジェクトを再利用した方がいいように、AWS Secrets Managerから取得したMomento認証トークンを使ってこれらのオブジェクトを再利用した方がよいです。再利用しなければ、AWS Secrets Managerへのラウンドトリップに対する各MomentoAPI呼び出しに対して、時間面と金銭面の両方から負担が増える危険性が生じます。負担を抑え、AWS Secrets Managerによって管理される可能性を排除するには、このAWSブログで詳細にご説明させていただいた通り、クライアント側のクレデンシャルのキャッシュを使用するのがベストです。 :::

AWS Secrets Managerへの入力

Momento API keyをAWS Secrets Managerへ入力する際は、下のスクリーンショットの通り、JSONを含まないプレーンテキストとして入力するようにしてください(セキュリティのためトークンにはぼかしを入れております)。

AWS Secrets Manager

AWS Secrets Managerのコード例

final Region region = Region.of("us-east-1");

// Create a Secrets Manager client
final SecretsManagerClient client =
SecretsManagerClient.builder()
.region(region)
// make sure to configure aws credentials in order to use the default provider
// https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html
.credentialsProvider(DefaultCredentialsProvider.create())
.build();

final GetSecretValueRequest getSecretValueRequest =
GetSecretValueRequest.builder().secretId("AUTH_TOKEN_SECRET_NAME").build();

final GetSecretValueResponse getSecretValueResponse;

try {
getSecretValueResponse = client.getSecretValue(getSecretValueRequest);
} catch (Exception e) {
// For a list of exceptions thrown, see
// https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
throw e;
}

final String secret = getSecretValueResponse.secretString();
try {
// store variable here
CredentialProvider.fromString(secret);
} catch (SdkException e) {
throw new RuntimeException(
"An error occured while parsing the secrets manager vended" + " authentication token", e);
}

よくある質問(FAQ)

Momento API keyをAWS Secrets Managerに保存する必要がありますか?
あります。MomentoのAPI keyを環境変数やファイルに保存することはできますが、AWS Secrets Managerなどに保存するよりも安全ではないため、ベストプラクティスではありません。