Lambda调用Personalize API导入数据集时,出现访问S3上的数据权限不足问题

0

【以下的问题经过翻译处理】 我正在尝试创建一个lambda函数,以自动化方式实现在Personalize中创建数据集导入作业。我参考了了以下指南:https://docs.aws.amazon.com/personalize/latest/dg/granting-personalize-s3-access.html#attaching-s3-policy-to-role, (https://docs.aws.amazon.com/personalize/latest/dg/granting-personalize-s3-access.html#attaching-s3-policy-to-role%3E%EF%BC%8C%E4%BD%86%E6%AF%8F%E6%AC%A1%E9%83%BD%E4%BC%9A%E6%94%B6%E5%88%B0%E7%9B%B8%E5%90%8C%E7%9A%84%E9%94%99%E8%AF%AF%EF%BC%8C%E8%AF%B4%E2%80%9C%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AES3%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E2%80%9D%E3%80%82) 但每次都会收到相同的错误,说“无法访问S3中的数据”。 (https://docs.aws.amazon.com/personalize/latest/dg/granting-personalize-s3-access.html#attaching-s3-policy-to-role%3E%EF%BC%8C%E4%BD%86%E6%AF%8F%E6%AC%A1%E9%83%BD%E4%BC%9A%E6%94%B6%E5%88%B0%E7%9B%B8%E5%90%8C%E7%9A%84%E9%94%99%E8%AF%AF%EF%BC%8C%E8%AF%B4%E2%80%9C%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AES3%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E2%80%9D%E3%80%82)

下面是我执行的步骤:

将AmazonPersonalizeFullAccess添加到我的IAM用户中 创建一个personalizeLambda角色,并添加4个策略: AmazonS3FullAccess CloudWatchLogsFullAccess AmazonPersonalizeFullAccess AWSLambdaBasicExecutionRole 但是出现了上面的错误,所以我添加了这个策略:

PersonalizeS3BucketAccessPolicyCustom: {

"Version": "2012-10-17" "Id": "PersonalizeS3BucketAccessPolicyCustom", "Statement": [ { "Sid": "PersonalizeS3BucketAccessPolicy", "Effect": "Allow", "Action": [ "s3:" ], "Resource": [ "arn:aws:s3:::<bucket-name>", "arn:aws:s3:::<bucket-name>/" ] }, { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:s3:::<bucket-name>", "arn:aws:s3:::<bucket-name>/" ] }, { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:<region>:<id>:function:create-personalize-model", "arn:aws:lambda:<region>:<id>:function:create-personalize-dataset-import-job" ] } ]

}

在具有数据集文件的S3存储桶中创建桶策略: { "Version": "2012-10-17", "Id": "Personalize

1 回答
0

【以下的回答经过翻译处理】 正如另一个回答中提到的,您在此处遇到权限错误的具体环节不是和明确,但我注意到您没有提到用于调用Personalzie 的Lambda函数的执行角色。

  1. 错误和您的IAM用户权限应该不太相关(只要您可以访问并编辑Personalize和S3中的内容)。

  2. 您的Lambda函数时通过使用执行角色(根据描述是personalizeLambda)下运行,并需要访问其需要调用的任何Personalize操作。特别是,personalize:CreateDatasetImportJob听起来是主要的。

  3. 当您的Lambda调用CreateDatasetImportJob (https://docs.aws.amazon.com/personalize/latest/dg/API_CreateDatasetImportJob.html)时,它将需要通过Lambda的执行角色(API中的roleArn、Python boto3中的role_arn)来传递。

从描述中可以看出,您可能忘记了设置具有S3访问权限的Lambda的执行角色,或者只是在该槽中重用Lambda角色ARN而没有添加额外的信任策略,以允许Personalize服务和Lambda都能使用它…但我可能是错的。

您可以在Personalize开发人员指南的设置权限 (https://docs.aws.amazon.com/personalize/latest/dg/aws-personalize-set-up-permissions.html)和[导入批量记录](https://

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则