みなさん、こんにちは。サニービュー事業部の小寺です。
今日からre:Inventに参加するためにはるばるアメリカ、ラスベガスにやってきました。明日以降は実際に基調講演で発表される新サービスについて、お伝えさせていただきます。

Amazon ElastiCache は Redis クラスターへの AWS Identity and Access Management (IAM) 認証アクセスをサポートするようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2022/11/amazon-elasticache-supports-iam-authentication-redis-clusters/

ElastiCache Redisとは

ElastiCacheをお使いの方も多いと思いますが、実は2種類のサービスがあります。

・memcached
memory cache daemon の略でメムキャッシュディーと読みます。
マルチスレッドで動作します。
CPUのコア数を上げると、パフォーマンスも上がります。
キーとバリューをシンプルな1対1で組み合わせて保存します。

・redis
シングルスレッドで動作します。
snapshotベースでのバックアップ・リストアに対応しています。
マスターと複数のスレーブのクラスター構成により、負荷分散ができます。
クラスターモードについては、有効・無効を選ぶことができます。
また、メモリ上のデータをディスクに保存する事で、停電等の電源消失時にデータを失わずにすみます。

今回のアップデートのメリット

IAM認証が設定できることにより、より決め細かく、かつ簡単にアクセス制御ができるようになりました。
例えば、IAM ポリシーを使用すると、異なる IAMのグループににクラスターアクセスを許可または取り消しできます。
Redis アプリケーションは IAM 認証情報を使用して、接続中に ElastiCacheの認証ができます。
各ElastiCacheレプリケーションの管理やアクセスコントロールも簡単になるのが大きなメリットの一つです。

RedisのIAM認証による前提条件

・Redis versionが7以上であることが大前提です。
・IAMでElastiCacheユーザのユーザ名とユーザIDが一意である必要があります。
・IAM認証のトークンは15分間有効です。
・IAM認証で ElastiCache for Redisは自動的に12時間後に切断されます。
・IAM認証では、「MULTI EXEC」コマンドをサポートしません。

試してみた

(1)IAMポリシーを作成します。
{
“Version”: “2012-10-17”,
“Statement”: {
“Effect”: “Allow”,
“Principal”: { “AWS”: “arn:aws:iam::123456789012:root” },
“Action”: “sts:AssumeRole”
}
}

(2)IAMロールを作成します。
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect” : “Allow”,
“Action” : [
“elasticache:Connect”
],
“Resource” : [
“arn:aws:elasticache:us-east-1:123456789012:replicationgroup:replication-group-01”,
“arn:aws:elasticache:us-east-1:123456789012:user:test”
]
}
]
}

(3) IAMポリシーをロールにアタッチします。

(4) ユーザグループとユーザをIAM認証として作成してアタッチします。

(5)以下がIAMAuthTokenRequestでアクセスする例です。

public class IAMAuthTokenRequest {
private static final HttpMethodName REQUEST_METHOD = HttpMethodName.GET;
private static final String REQUEST_PROTOCOL = “http://”;
private static final String PARAM_ACTION = “Action”;
private static final String PARAM_USER = “User”;
private static final String ACTION_NAME = “connect”;
private static final String SERVICE_NAME = “elasticache”;
private static final long TOKEN_EXPIRY_SECONDS = 900;

以下、略・・。

対象リージョン

すべてのリージョンで追加料金なしで利用可能です。