Я пытаюсь создать политику, которая при подключении к пользователю IAM
позволяет пользователю только читать данные из таблицы Aurora
Бессерверной базы данных:
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: "Allow"
Action:
- "rds-data:ExecuteSql"
- "rds-data:ExecuteStatement"
- "rds-data:GetItems"
Resource:
- !Join ['', ['arn:aws:rds:*:*:cluster:', !Ref RDSAuroraServerlessCluster]]
- !Join ['', ['arn:aws:rds:*:*:cluster:', !Ref RDSAuroraServerlessCluster, ':*']]
- Effect: "Deny"
Action:
- "rds-data:DeleteItems"
Resource:
- !Join ['', ['arn:aws:rds:*:*:cluster:', !Ref RDSAuroraServerlessCluster]]
- !Join ['', ['arn:aws:rds:*:*:cluster:', !Ref RDSAuroraServerlessCluster, ':*']]
Как вы можете видеть политика явно запрещает пользователю удалять элементы.
Однако, следующий код, который использует API данных Python
AWS
SDK и где ключ доступа AWS
и секретный ключ предназначены для Пользователь, к которому прикреплена вышеуказанная политика, успешно запускается:
rds_client = boto3.client('rds-data', aws_access_key_id='XXX', aws_secret_access_key='YYY')
response = rds_client.execute_statement(
secretArn=self.db_credentials_secrets_store_arn,
database=self.database_name,
resourceArn=self.db_cluster_arn,
sql='DELETE FROM TestTable where id = "ae94eae7";',
parameters=[])
Я могу запросить таблицу после запуска этого кода и вижу, что строка действительно удалена.
Как я могу предотвратить удаление пользователем подобных строк?
Спасибо!