在创建新角色时如何指定策略名称?

时间:2016-06-28 12:58:00

标签: java python amazon-web-services boto boto3

我将一些aws-iot java代码转换为使用boto3并且在创建新角色时被卡住了。旧代码在为角色指定策略时指定策略名称,但我不知道如何在boto3中指定该策略。这是java代码块(注意:withId(assumePolicyName)):

iamClient.createRole(new CreateRoleRequest()
                .withRoleName(role)
                .withAssumeRolePolicyDocument(new com.amazonaws.auth.policy.Policy()
                    .withId(assumePolicyName)
                    .withStatements(new Statement(Statement.Effect.Allow)
                        .withActions(() -> "sts:AssumeRole")
                        .withPrincipals(new Principal("Service", "iot.amazonaws.com")))
                    .toJson()
                )
            );

我无法弄清楚在何处使用boto3指定assumePolicyName,这里是我在boto3中的内容:

self.iamClient.create_role(RoleName=role_name, AssumeRolePolicyDocument={
            'Statement': [
                {
                    'Principal': {
                        'Service': ['iot.amazonaws.com']
                    },
                    'Effect': 'Allow',
                    'Action': ['sts:AssumeRole']
                },
            ]
        }

如何指定策略名称?

2 个答案:

答案 0 :(得分:0)

据我所知,IAM无法将策略名称与AssumedRolePolicyDocument相关联。我不确定名称的用途是什么,因为每个角色只能有一个这样的策略,并且这些信任关系不能在角色之间共享。

答案 1 :(得分:0)

我非常接近。我应该尝试一些试验/错误。正确的解决方案是这份文件:

self.iamClient.create_role(RoleName=role_name, AssumeRolePolicyDocument={
                'Id': 'assume_role_id',
                'Statement': [
                {
                    'Principal': {
                        'Service': ['iot.amazonaws.com']
                    },
                    'Effect': 'Allow',
                    'Action': ['sts:AssumeRole']
                }
            ]
        }