

# Configuração do IAM
<a name="cdc-iam"></a>

**Importante**  
Esse recurso é fornecido como visualização prévia da AWS e está sujeito a alterações. Para obter mais informações, consulte a seção 2, Versões beta e visualizações prévias, nos [Termos de serviço da AWS](https://aws.amazon.com/service-terms/). Para saber mais sobre precificação para fluxos de CDC, consulte a [página de precificação do Aurora DSQL](https://aws.amazon.com/rds/aurora/dsql/pricing/).  
Antes da disponibilidade geral, adicionaremos novos tipos de operação (`"op": "u"` para atualizações) à carga útil do fluxo. Para garantir que seu aplicativo processe essas alterações sem modificações, trate qualquer valor `op` não reconhecido como um acréscimo aplicando a carga útil `after`. Para mais detalhes, consulte [Noções básicas sobre os registros de CDC](cdc-record-format.md).

Os fluxos de CDC exigem dois conjuntos separados de permissões do IAM:
+ **Permissões do chamador**: a entidade principal do IAM que chama as operações da API de fluxo de CDC (`CreateStream`, `GetStream`, `DeleteStream`, `ListStreams`) precisa de permissão para essas ações e para `iam:PassRole`.
+ **Perfil de serviço**: um perfil do IAM que o Aurora DSQL assume em runtime para gravar registros de CDC em seu destino. Você cria esse perfil, anexa uma política de confiança que permite que a entidade principal do serviço do Aurora DSQL o assuma e anexa uma política de permissões que concede acesso de gravação ao destino.

**nota**  
O perfil de serviço de CDC é separado de qualquer política baseada em recursos em seu cluster do Aurora DSQL. Uma política baseada em recursos de cluster controla quais entidades principais podem se conectar e consultar o cluster. O perfil de serviço de CDC controla em qual destino o Aurora DSQL pode gravar registros de CDC.

## Permissões do chamador
<a name="cdc-iam-caller-permissions"></a>

A entidade principal do IAM que chama as operações de API do fluxo de CDC precisa de permissões para as ações `dsql` relevantes e `iam:PassRole`. A operação `CreateStream` requer `iam:PassRole` porque ela transmite o ARN do perfil de serviço para o Aurora DSQL. Veja abaixo um exemplo de política:

```
{
    "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"
                }
            }
        }
    ]
}
```

O elemento `Resource` inclui o ARN do cluster (exigido por `CreateStream` e `ListStreams`) e o padrão de ARN do fluxo (exigido por `GetStream` e `DeleteStream`).

Para obter uma lista completa das permissões necessárias para cada operação, consulte [CreateStream](https://docs.aws.amazon.com/aurora-dsql/latest/APIReference/API_CreateStream.html), [GetStream](https://docs.aws.amazon.com/aurora-dsql/latest/APIReference/API_GetStream.html), [DeleteStream](https://docs.aws.amazon.com/aurora-dsql/latest/APIReference/API_DeleteStream.html) e [ListStreams](https://docs.aws.amazon.com/aurora-dsql/latest/APIReference/API_ListStreams.html) na [Referência de API do Amazon Aurora DSQL](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/CHAP_api_reference.html).

## Perfil de serviço
<a name="cdc-iam-service-role"></a>

O perfil de serviço é o perfil do IAM que o Aurora DSQL assume para gravar registros de CDC em seu destino. Você cria essa função e transmite o ARN no campo `targetDefinition.kinesis.roleArn` ao chamar `CreateStream`. O perfil exige uma política de confiança e uma política de permissões.

## Política de confiança do perfil de serviço
<a name="cdc-iam-trust-policy"></a>

A política de confiança deve permitir que a entidade principal do serviço do Aurora DSQL assuma o perfil. Para se proteger contra ataques [confused deputy](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), use as chaves de condição `aws:SourceAccount` e `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/*"
                }
            }
        }
    ]
}
```

A condição `aws:SourceArn` restringe o perfil aos fluxos em um cluster específico. Você deve usar o curinga (`stream/*`) ao criar um fluxo porque o Aurora DSQL ainda não atribuiu o identificador do fluxo. Depois de criar um fluxo, você pode restringir a condição ao ARN exato do fluxo (`arn:aws:dsql:{{region}}:{{your-account-id}}:cluster/{{cluster-id}}/stream/{{stream-id}}`) se o perfil servir a um único fluxo.

Para usar o perfil com fluxos em qualquer cluster em sua conta, use um curinga mais amplo: `arn:aws:dsql:{{region}}:{{your-account-id}}:cluster/*/stream/*`.

Para saber mais sobre a prevenção contra ataques confused deputy, consulte [Prevenção contra o ataque do “substituto confuso” em todos os serviços](cross-service-confused-deputy-prevention.md) neste guia.

## Política de permissões do perfil de serviço
<a name="cdc-iam-permissions-policy"></a>

A política de permissões concede o acesso ao perfil de serviço para gravar registros em seu fluxo de dados do Kinesis. A política a seguir inclui tanto as permissões de gravação do Kinesis quanto as permissões do AWS KMS. A instrução `KMSAccess` só será necessária se seu fluxo de dados do Kinesis usar uma chave gerenciada pelo cliente do AWS KMS, mas você pode incluí-la preventivamente para que a adição de uma chave gerenciada pelo cliente não interrompa seu fluxo de CDC posteriormente.

```
{
    "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}"
                }
            }
        }
    ]
}
```

As condições na instrução AWS KMS fornecem as seguintes proteções:
+ `kms:ViaService`: restringe o uso da chave às solicitações que chegam por meio do serviço do Kinesis na região especificada.
+ `kms:EncryptionContext:aws:kinesis:arn`: restringe o uso da chave às operações de criptografia para o fluxo de dados do Kinesis especificado.
+ `aws:ResourceAccount`: a chave deve pertencer à mesma conta da AWS da entidade principal responsável pela chamada, o que impede o uso da chave entre contas.

**nota**  
A chave do AWS KMS referenciada aqui é a chave de criptografia no fluxo de dados do Kinesis, não a chave do AWS KMS do cluster. A chave de criptografia do cluster protege os dados de CDC dentro do limite do Aurora DSQL. A chave de criptografia do Kinesis protege os dados de CDC depois que o Aurora DSQL os grava no fluxo de dados do Kinesis.

## Proteção de dados
<a name="cdc-data-protection"></a>

O Aurora DSQL usa a Transport Layer Security (TLS) para criptografar dados em trânsito de CDC entre o Aurora DSQL e seu destino. Dentro do limite do Aurora DSQL, o Aurora DSQL criptografa os dados em repouso de CDC usando a chave de criptografia do cluster.

Se o cluster usar uma chave gerenciada pelo cliente do AWS KMS e essa chave ficar inacessível, um fluxo `ACTIVE` ou `IMPAIRED` mudará para `IMPAIRED` com o código de erro `CLUSTER_CMK_INACCESSIBLE`. Se a chave ficar inacessível antes que o fluxo termine de ser criado, o fluxo mudará diretamente para `FAILED`.

Para obter uma explicação detalhada sobre criptografia no Aurora DSQL, consulte [Criptografia de dados para o Amazon Aurora DSQL](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/data-encryption.html) neste guia.