У меня есть AWS Lambda, который запускается как запрос средства просмотра на экземпляре CloudFront, который ограничивает доступ к настройке S3 bucket для статического c хостинга веб-сайта. Он использует Cognito User Pool для ограничения доступа и проверяет учетные данные с помощью AdminInitiateAuth
.
. Лямбда работает нормально, используя тестовые данные, непосредственно полученные из регистрации события CloudFront, однако при фактическом вызове с помощью триггера из CloudFront I получить ошибку:
An error occurred (AccessDeniedException) when calling the AdminInitiateAuth operation:
User: arn:aws:sts::<AWS_ACCOUNT_ID>:assumed-role/cloudfront_trigger_s3_auth_http_service/us-east-1.s3_service_resources_auth
is not authorized to perform: cognito-idp:AdminInitiateAuth on resource:
arn:aws:cognito-idp:us-west-2:<AWS_ACCOUNT_ID>:userpool/<USER_POOL_ID>
Я пытался расширить свои доверительные отношения и убедиться, что AWS STS может взять на себя роль, когда это необходимо.
cloudfront_trigger_s3_auth_http_service
роль доверительные отношения :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"cognito-idp.amazonaws.com",
"edgelambda.amazonaws.com",
"sts.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
arcimoto-service-resources-user-pool-auth
политика, прикрепленная к роли cloudfront_trigger_s3_auth_http_service
, которая обеспечивает когнитивный доступ
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cognito-idp:AdminInitiateAuth",
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::511596272857:role/cloudfront_trigger_s3_auth_http_service/us-east-1.s3_service_resources_auth",
"arn:aws:cognito-idp:us-east-1:511596272857:userpool/us-east-1_sES7sBpcg"
]
}
]
}