View a markdown version of this page

設定 IAM - Amazon Aurora DSQL

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 IAM

重要

此功能以 AWS 預覽版形式提供,可能會有所變更。如需詳細資訊,請參閱 AWS 服務條款中的第 2 節 Beta 版和預覽版。若要進一步了解 CDC 串流的定價,請參閱 Aurora DSQL 定價頁面

在一般可用性之前,我們會將新的操作類型 ("op": "u" 用於更新) 新增至串流承載。為了確保您的應用程式在不修改的情況下處理這些變更,請套用after承載,將任何無法辨識op的值視為 upsert。如需詳細資訊,請參閱 了解 CDC 記錄

CDC 串流需要兩組不同的 IAM 許可:

  • 來電者許可 – 呼叫 CDC 串流 API 操作 (CreateStreamDeleteStream、、ListStreams) GetStream的 IAM 主體需要這些動作和 的許可iam:PassRole

  • 服務角色 – Aurora DSQL 在執行時間擔任的 IAM 角色,用於將 CDC 記錄寫入您的目標。您可以建立此角色、連接允許 Aurora DSQL 服務主體擔任的信任政策,以及連接授予目標寫入存取權的許可政策。

注意

CDC 服務角色與 Aurora DSQL 叢集上的任何資源型政策分開。叢集資源型政策會控制哪些主體可以連線到 並查詢叢集。CDC 服務角色控制 Aurora DSQL 可以寫入 CDC 記錄的目標。

來電者許可

呼叫 CDC 串流 API 操作的 IAM 主體需要相關dsql動作 和 的許可iam:PassRoleCreateStream 操作需要 ,iam:PassRole因為它會將服務角色 ARN 傳遞給 Aurora DSQL。以下為政策的範例:

{ "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 參考》中的 CreateStreamGetStreamDeleteStreamListStreams

服務 角色

服務角色是 Aurora DSQL 擔任的 IAM 角色,可將 CDC 記錄寫入您的目標。當您呼叫 時,您會建立此角色並在 targetDefinition.kinesis.roleArn 欄位中傳遞其 ARNCreateStream。角色需要信任政策和許可政策。

服務角色信任政策

信任政策必須允許 Aurora DSQL 服務主體擔任該角色。若要防止混淆代理人攻擊,請使用 aws:SourceAccountaws: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 條件限制角色在特定叢集下串流。建立串流時,您必須使用萬用字元 (stream/*),因為 Aurora DSQL 尚未指派串流識別符。建立串流之後,如果角色提供單一串流,您可以將條件限制為確切的串流 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 許可。只有當您的 Kinesis 資料串流使用 AWS KMS 客戶受管金鑰時,才需要 KMSAccess陳述式,但您可以先包含它,以便稍後新增客戶受管金鑰不會中斷您的 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 金鑰是 Kinesis 資料串流上的加密金鑰,而不是叢集的 AWS KMS 金鑰。叢集的加密金鑰可保護 Aurora DSQL 邊界內的 CDC 資料。Kinesis 加密金鑰可在 Aurora DSQL 將其寫入 Kinesis 資料串流後保護 CDC 資料。

資料保護

Aurora DSQL 使用 Transport Layer Security (TLS) 來加密 Aurora DSQL 與您的目標之間傳輸中的 CDC 資料。在 Aurora DSQL 界限內,Aurora DSQL 會使用叢集的加密金鑰來加密靜態 CDC 資料。

如果叢集使用 AWS KMS 客戶受管金鑰,而該金鑰變得無法存取,則 ACTIVEIMPAIRED 串流會使用IMPAIRED錯誤碼 轉換為 CLUSTER_CMK_INACCESSIBLE。如果在串流完成建立之前無法存取金鑰,串流會直接轉換為 FAILED

如需 Aurora DSQL 加密的詳細說明,請參閱本指南中的 Amazon Aurora DSQL 的資料加密