У меня есть система авторизации cognito с группами для пользователей. Также есть шлюз API и лямбда-функция, которая добавляет данные в базу данных postgreSQL. Я хочу, чтобы только специальные группы пользователей имели доступ к API.
Для этого я создал метод POST и авторизовал его через AWS_IAM. А также создана группа «Администраторы», в которой есть один пользователь. У группы есть роль, у которой есть права на все.
Но когда я вызываю API, я получаю сообщение об ошибке:
Optional("{\"Message\":\"User: arn:aws:sts::XXX:assumed-role/Auth/CognitoIdentityCredentials is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:eu-west-1:********9606:gv1nzib1df/Prod/POST/\"}\n")
Эта роль «Аутентификация» устанавливается как роль с проверкой подлинности в пуле удостоверений. Почему права из группы не работают для API?
func doInvokeAPI() {
let httpMethodName = "POST"
let URLString = "/"
let headerParameters = [
"Content-Type": "application/json",
"Accept": "application/json",
"x-api-key": "XXX"
]
let apiRequest = AWSAPIGatewayRequest(httpMethod: httpMethodName, urlString: URLString, queryParameters: nil, headerParameters: headerParameters, httpBody: nil)
let serviceConfiguration = AWSServiceConfiguration(region: AWSRegionType.EUWest1, credentialsProvider: AWSMobileClient.default())
IEDUCATIONIEducationClient.registerClient(withConfiguration: serviceConfiguration!, forKey: "CloudLogicAPIKey")
let invocationClient = IEDUCATIONIEducationClient.client(forKey: "CloudLogicAPIKey")
invocationClient.invoke(apiRequest).continueWith { (task: AWSTask) -> Any? in
if let error = task.error {
print("Error occurred: \(error)")
return nil
}
let result = task.result!
let responseString = String(data: result.responseData!, encoding: .utf8)
print(responseString)
print(result.statusCode)
return nil
}
}