无法使用 get_att 将 IAM 策略添加到 Glue Crawler

时间:2021-06-23 16:44:50

标签: python amazon-iam aws-glue aws-cdk

我目前正在尝试使用 AWS CDK (Python) 向胶水爬网程序添加策略声明,并且在尝试使用 get_att() 方法从爬网程序 ({{3 }})。我提供了用于创建爬网程序的代码,然后希望使用策略文档将语句添加到资源中。如果有人认为这会有所帮助,我很乐意提供更多信息。提前感谢您的时间!

from aws_cdk import (
    aws_glue,
    aws_iam
)

def new_glueCrawler(stack):
    glue_job_role = aws_iam.Role(
                stack,
                'roleName',
                role_name='roleName',
                assumed_by=aws_iam.ServicePrincipal('glue.amazonaws.com'),
                managed_policies=[aws_iam.ManagedPolicy.from_aws_managed_policy_name('service-role/AWSGlueServiceRole')])

    def prepend(list, str):
                str += '{0}'
                list = [{"path": str.format(i)} for i in list]
                return(list)

    s3TargetList = prepend('pathList', 'bucketName')

    glueCrawler = aws_glue.CfnCrawler(stack, 'crawlerName',
            name='crawlerName',
            role=glue_job_role.role_arn,
            targets={"s3Targets": s3TargetList},
            crawler_security_configuration='securityName',
            database_name='dbName',
            schedule=aws_glue.CfnCrawler.ScheduleProperty(schedule_expression='cron(5 2 * * ? *)'),
            schema_change_policy=aws_glue.CfnCrawler.SchemaChangePolicyProperty(delete_behavior='DELETE_FROM_DATABASE',
                update_behavior='UPDATE_IN_DATABASE')) 
    return glueCrawler

adminPolicyDoc = aws_iam.PolicyDocument()
adminPolicyDoc.add_statements([aws_iam.PolicyStatement(actions=['glue:StartCrawler'],
                                                       effect=aws_iam.Effect.ALLOW,
                                                       resources=[glueCrawler.get_att('arn')]
                                                      )
                              ]
                             )

不幸的是,对于 CfnCrawler,该过程不如 CDK 框架中的其他对象好。例如,如果您想获取 lambdaObject 的 arn,您可以简单地调用 lambdaObject.function_arn。 Crawler's 似乎并没有那么容易。任何见解将不胜感激!

2 个答案:

答案 0 :(得分:0)

看起来你快到了,我相信获取 arn 属性的“秘密字符串”是: “resource.arn”,所以改变这一行:

resources=[glueCrawler.get_att('arn')]

到:

resources=[glueCrawler.get_att('resource.arn')]

答案 1 :(得分:0)

所以我能够使用以下代码片段获取 arn,其中爬虫是我试图为其获取 arn 的对象: core.Stack.of(stack).format_arn(service='glue',resource='crawler',resource_name=crawler.name)