IAM の設定
重要
この機能は AWS プレビューとして提供されており、変更される可能性があります。詳細については、「AWS のサービス条件
一般提供する前に、ストリームペイロードに新しいオペレーションタイプ ("op": "u" 更新用) を追加します。アプリケーションがこれらの変更を修正せずに処理できるようにするには、after ペイロードを適用して、認識されない op 値をすべてアップサートとして扱います。詳細については、「CDC レコードについて」を参照してください。
CDC ストリームには、2 つの異なる IAM アクセス許可のセットが必要です。
-
発信者のアクセス許可 – CDC ストリーム API オペレーション (
CreateStream、GetStream、DeleteStream、ListStreams) を呼び出す IAM プリンシパルには、これらのアクションとiam:PassRoleのアクセス許可が必要です。 -
サービスロール – CDC レコードをターゲットに書き込むために Aurora DSQL が実行時に引き受ける IAM ロール。このロールを作成し、Aurora DSQL サービスプリンシパルがロールを引き受けることを許可する信頼ポリシーをアタッチし、ターゲットへの書き込みアクセスを許可するアクセス許可ポリシーをアタッチします。
注記
CDC サービスロールは、Aurora DSQL クラスターのリソースベースのポリシーとは別のものです。クラスターリソースベースのポリシーは、クラスターに接続してクエリできるプリンシパルを制御します。CDC サービスロールは、Aurora DSQL が CDC レコードを書き込むことができるターゲットを制御します。
発信者のアクセス許可
CDC ストリーム API オペレーションを呼び出す IAM プリンシパルには、関連する dsql アクションおよび iam:PassRole に対するアクセス許可が必要です。CreateStream オペレーションでは、サービスロール ARN を Aurora DSQL に渡すため、iam:PassRole が必要です。次に、ポリシーの例を示します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DSQLStreamActions", "Effect": "Allow", "Action": [ "dsql:CreateStream", "dsql:GetStream", "dsql:ListStreams", "dsql:DeleteStream" ], "Resource": [ "arn:aws:dsql:region:your-account-id:cluster/cluster-id", "arn:aws:dsql:region:your-account-id:cluster/cluster-id/stream/*" ] }, { "Sid": "PassServiceRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/dsql-cdc-role", "Condition": { "StringEquals": { "iam:PassedToService": "dsql.amazonaws.com" } } } ] }
Resource 要素には、クラスター ARN (CreateStream および ListStreams で必要) とストリーム ARN パターン (GetStream と DeleteStream で必要) の両方が含まれます。
各オペレーションに必要なアクセス許可の完全なリストについては、「Amazon Aurora DSQL API リファレンス」の「CreateStream」、「GetStream」、「DeleteStream」、および「ListStreams」を参照してください。
サービスロール
サービスロールとは、Aurora DSQL が CDC レコードをターゲットに書き込むために引き受ける IAM ロールです。このロールを作成し、CreateStream を呼び出すときに、その ARN を targetDefinition.kinesis.roleArn フィールドに渡します。ロールには、信頼ポリシーとアクセス許可ポリシーが必要です。
サービスロール信頼ポリシー
信頼ポリシーでは、Aurora DSQL サービスプリンシパルがロールを引き受けることを許可する必要があります。混乱した代理攻撃を防ぐには、aws:SourceAccount および aws:SourceArn 条件キーを使用します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DSQLAssumeRole", "Effect": "Allow", "Principal": { "Service": "dsql.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "your-account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:dsql:region:your-account-id:cluster/cluster-id/stream/*" } } } ] }
aws:SourceArn 条件は、ロールを特定のクラスターのストリームに制限します。Aurora DSQL がまだストリーム識別子を割り当てていないため、ストリームを作成するときはワイルドカード (stream/*) を使用する必要があります。ストリームを作成したら、ロールが単一のストリームを提供する場合、条件を正確なストリーム ARN (arn:aws:dsql:) に絞り込むことができます。region:your-account-id:cluster/cluster-id/stream/stream-id
アカウントの任意のクラスターで、ストリームを使用してロールを使用するには、より広範なワイルドカード arn:aws:dsql: を使用します。region:your-account-id:cluster/*/stream/*
混乱した代理の防止の詳細については、このガイドの「サービス間の混乱した代理の防止」を参照してください。
サービスロールのアクセス許可ポリシー
アクセス許可ポリシーにより、サービスロールは Kinesis データストリームにレコードを書き込むためのアクセス許可を取得します。次のポリシーには、Kinesis の書き込みアクセス許可と AWS KMS アクセス許可の両方が含まれています。KMSAccess ステートメントは、Kinesis データストリームが AWS KMS カスタマーマネージドキーを使用する場合にのみ必要ですが、カスタマーマネージドキーを後で追加しても CDC ストリームが破損しないように、事前に含めることができます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "KinesisAccess", "Effect": "Allow", "Action": [ "kinesis:PutRecord", "kinesis:PutRecords", "kinesis:DescribeStreamSummary", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:your-account-id:stream/kinesis-stream-name" }, { "Sid": "KMSAccess", "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:*:*:key/*", "Condition": { "StringEquals": { "kms:ViaService": "kinesis.region.amazonaws.com", "kms:EncryptionContext:aws:kinesis:arn": "arn:aws:kinesis:region:your-account-id:stream/kinesis-stream-name", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } } ] }
AWS KMS ステートメントの条件は、次の保護を提供します。
-
kms:ViaService– キーの使用を、指定されたリージョンで Kinesis サービスを経由するリクエストに制限します。 -
kms:EncryptionContext:aws:kinesis:arn– キーの使用を、指定された Kinesis データストリームの暗号化オペレーションに制限します。 -
aws:ResourceAccount– キーは呼び出し元のプリンシパルと同じ AWS アカウントに属している必要があり、これによりクロスアカウントでのキーの使用が防止されます。
注記
ここで参照される AWS KMS キーは、クラスターの AWS KMS キーではなく、Kinesis データストリームの暗号化キーです。クラスターの暗号化キーは、Aurora DSQL 境界内の CDC データを保護します。Kinesis 暗号化キーは、Aurora DSQL が Kinesis データストリームに書き込んだ後の CDC データを保護します。
データ保護
Aurora DSQL は Transport Layer Security (TLS) を使用して、Aurora DSQL とターゲット間で転送中の CDC データを暗号化します。Aurora DSQL 境界内では、Aurora DSQL はクラスターの暗号化キーを使用して保管中の CDC データを暗号化します。
クラスターが AWS KMS カスタマーマネージドキーを使用していて、そのキーにアクセスできなくなった場合、ACTIVE または IMPAIRED ストリームはエラーコード CLUSTER_CMK_INACCESSIBLE で IMPAIRED に移行します。ストリームの作成が完了する前にキーにアクセスできなくなった場合、ストリームは FAILED に直接移行します。
Aurora DSQL での暗号化の詳細については、このガイドの「Amazon Aurora DSQL のデータ暗号化」を参照してください。