无法使用 get_att 将 IAM 策略添加到 Glue 爬虫
Can't Add IAM Policy to Glue Crawler with get_att
我目前正在尝试使用 AWS CDK (Python) 向胶水爬虫添加策略声明,但在尝试使用 get_att 检索爬虫的 ARN 时遇到了问题() 方法来自爬虫 (documentation here)。我已经提供了我用来创建爬虫的代码,然后想使用策略文档将语句添加到资源中。如果有人认为有帮助,我很乐意提供更多信息。提前感谢您的宝贵时间!
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 似乎并不那么容易。任何见解将不胜感激!
看来你已经差不多了,我相信获取 arn 属性的“秘密字符串”是:
“resource.arn”,因此更改此行:
resources=[glueCrawler.get_att('arn')]
至:
resources=[glueCrawler.get_att('resource.arn')]
所以我能够使用以下代码片段获取 arn,其中爬虫是我尝试获取 arn 的对象:
core.Stack.of(stack).format_arn(service='glue',resource='crawler',resource_name=crawler.name)
我目前正在尝试使用 AWS CDK (Python) 向胶水爬虫添加策略声明,但在尝试使用 get_att 检索爬虫的 ARN 时遇到了问题() 方法来自爬虫 (documentation here)。我已经提供了我用来创建爬虫的代码,然后想使用策略文档将语句添加到资源中。如果有人认为有帮助,我很乐意提供更多信息。提前感谢您的宝贵时间!
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 似乎并不那么容易。任何见解将不胜感激!
看来你已经差不多了,我相信获取 arn 属性的“秘密字符串”是: “resource.arn”,因此更改此行:
resources=[glueCrawler.get_att('arn')]
至:
resources=[glueCrawler.get_att('resource.arn')]
所以我能够使用以下代码片段获取 arn,其中爬虫是我尝试获取 arn 的对象:
core.Stack.of(stack).format_arn(service='glue',resource='crawler',resource_name=crawler.name)