IAM 구성
중요
이 기능은 AWS 프리뷰로 제공되며 변경될 수 있습니다. 자세한 내용은 AWS 서비스 약관
정식 출시 전에 스트림 페이로드에 새 작업 유형(업데이트를 위한 "op": "u")을 추가합니다. 애플리케이션이 이러한 변경 사항을 수정하지 않고 처리하도록 하려면 after 페이로드를 적용하여 인식할 수 없는 op 값을 업서트로 취급합니다. 세부 정보는 CDC 레코드 이해 섹션을 참조하세요.
CDC 스트림에는 두 개의 개별 IAM 권한 세트가 필요합니다.
-
직접 호출자 권한 - CDC 스트림 API 작업(
CreateStream,GetStream,DeleteStream,ListStreams)을 직접적으로 호출하는 IAM 위탁자에는 이러한 작업 및iam:PassRole에 대한 권한이 필요합니다. -
서비스 역할 - Aurora DSQL이 런타임에 수임하여 대상에 CDC 레코드를 쓰는 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을 직접적으로 호출할 때 targetDefinition.kinesis.roleArn 필드에 해당 ARN을 전달합니다. 역할에는 신뢰 정책과 권한 정책이 필요합니다.
서비스 역할 신뢰 정책
신뢰 정책은 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에 대한 데이터 암호화를 참조하세요.