У меня есть функция без сервера, определенная как
UserLockoutLambda:
Type: "AWS::Lambda::Function"
Properties:
Handler: "com.url.ftp.userlockout.LockUserLambda::handleRequest"
Role: !GetAtt UserLockoutLambdaRole.Arn
Code:
S3Bucket: !Ref lambdas3bucketname
S3Key: !Ref lambdas3key
Runtime: "java8"
MemorySize: 256
Timeout: 300
FunctionName: !Sub 'url-lambda-lam-${AWS::Region}-${envtag}'
Environment:
Variables:
USER_MGMT_API_URL:
!Sub 'https://urlapi.${envtag}.${hostedzonename}/uma/LATEST/'
USER_MGMT_API_KEY_NAME:
!Sub 'url-cfmusermgmt-apikey-${envtag}'
Tags:
- Key: Name
Value: !Sub 'url-cfmuserlockoutlambda-lam-${AWS::Region}-${envtag}'
- Key: function
Value: lambda function that locks the proftp user when failed login attempts reach threshold value
Я настроил роль и политику, как указано ниже (Это для лямбды для доступа к apiGateway)
UserLockoutLambdaRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: !Sub "url-lambda-iam-${AWS::Region}-role_${envtag}"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service:
- "lambda.amazonaws.com"
- "apigateway.amazonaws.com"
Action:
- "sts:AssumeRole"
Path: "/"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
- !Ref UserLockoutLambdaManagedPolicy
UserLockoutLambdaManagedPolicy:
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: !Sub "url-lambda-iam-${AWS::Region}-policy_${envtag}"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "execute-api:Invoke"
Resource:
- !Sub 'arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${userMgmtApiId}/*/PUT/ftpuser/lockuser/*'
- !Sub 'arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${userMgmtApiId}/*/PUT/ftpuser/invalidlogin/*'
- !Sub 'arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${userMgmtApiId}/*/PUT/ftpuser/unlockuser/*'
- Effect: "Allow"
Action:
- "apigateway:GET"
Resource:
- !Sub 'arn:aws:apigateway:${AWS::Region}::/apikeys'
ОднакоКогда я вызываю API-шлюз из кода, я получаю следующую ошибку:
"Message": "User: arn:aws:sts::<id>:assumed-role/url-lambda-iam-us-east-1-role_i2388/url-cfmuserlockoutlambda-lam-us-east-1-i2388
is not authorized to perform: execute-api:Invoke on resource:
arn:aws:execute-api:us-east-1:********3636:apiGatewayID/LATEST/PUT/ftpuser/invalidlogin" }
Судя по всему, имя Лямбда-функции было добавлено к предполагаемой роли, и политика, очевидно, не записанадля этого.Я не уверен, почему добавляется имя функции и что я могу сделать, чтобы изменить политику, чтобы она работала.
Любая помощь с благодарностью.
Спасибо Karthik