Solución de errores de ABAC comunes en DynamoDB Streams
Si recibe una AccessDeniedException o sus condiciones basadas en etiquetas no se comportan del modo esperado después de activar ABAC para DynamoDB Streams, utilice este tema para diagnosticar y resolver las causas más comunes.
Las claves de condición específicas del servicio no se consideran claves de condición válidas. Si ha utilizado este tipo de claves en las políticas, estas claves producirán un error. Debe reemplazar las claves de condición específicas del servicio por una clave de condición adecuada para implementar ABAC para DynamoDB Streams.
Por ejemplo, supongamos que ha utilizado la clave de condición dynamodb:ResourceTag en una política que realiza la solicitud GetRecords en un flujo. Error en la solicitud respecto a una AccessDeniedException. En el siguiente ejemplo, se muestra la política errónea con la clave de condición dynamodb:ResourceTag.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetRecords" ], "Resource": "arn:aws:dynamodb:*:*:table/*/stream/*", "Condition": { "StringEquals": { "dynamodb:ResourceTag/Team": "Analytics" } } } ] }
Para solucionar este problema, reemplace la clave de condición dynamodb:ResourceTag por aws:ResourceTag, como se muestra en el siguiente ejemplo.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetRecords" ], "Resource": "arn:aws:dynamodb:*:*:table/*/stream/*", "Condition": { "StringEquals": { "aws:ResourceTag/Team": "Analytics" } } } ] }
Si habilitó ABAC de Streams recientemente, es posible que el cambio aún no se haya propagado. La actualización del estado de ABAC de Streams es una operación asíncrona. Espere unos minutos y después intente la solicitud de nuevo.
Después de eliminar una tabla principal, la transmisión sigue existiendo durante 24 horas antes de la eliminación. Durante este periodo de 24 horas, puede administrar las etiquetas de transmisión mediante los comandos de la CLI o SDK (tag-resource, untag-resource, y list-tags-of-resource) con el ARN de transmisión. No puede usar la consola ni CloudFormation para modificar las etiquetas de una transmisión cuya tabla principal ya no existe.
Si recibe un error al intentar etiquetar a través de la consola, utilice la CLI en su lugar:
aws dynamodb tag-resource \ --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/DeletedTable/stream/2024-01-01T00:00:00.000 \ --tags Key=environment,Value=production
Para verificar las etiquetas existentes en la transmisión con la tabla principal eliminada:
aws dynamodb list-tags-of-resource \ --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/DeletedTable/stream/2024-01-01T00:00:00.000
Si recibe una ResourceNotFoundException, el periodo de retención de 24 horas ha expirado y la transmisión ya no existe.
Puede desactivar ABAC de Streams solo si se cumplen las siguientes condiciones:
-
Ha utilizado la forma de autoservicio de activarlo a través de la consola de DynamoDB.
-
Efectúa la desactivación en los siete días naturales posteriores a la activación.
Si se ha habilitado ABAC de Streams para la cuenta a través del soporte, no podrá desactivarlo mediante la consola de DynamoDB. Para desactivarlo, contacte con el soporte.
Las implementaciones de CloudFormation que crean o actualizan una tabla con una transmisión pueden producir un error si el rol de IAM carece de los permisos necesarios. En concreto, el rol debe tener los permisos dynamodb:TagResource y dynamodb:UntagResource para los recursos de transmisión. Esto se aplica a los tipos de recursos AWS::DynamoDB::Table y AWS::DynamoDB::GlobalTable y afecta a las etiquetas de transmisión explícitas y a las etiquetas por pila heredadas.
Para resolver este problema, actualice la política de IAM del rol de servicio de CloudFormation para incluir los permisos de etiquetado de transmisiones:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:TagResource", "dynamodb:UntagResource" ], "Resource": [ "arn:aws:dynamodb:*:*:table/*/stream/*" ] } ] }