AWS CDK - новый Role () предоставляет «policyDocument: требуется, но отсутствует». - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь создать определенные роли, содержащие комбинацию управляемых политик и встроенных политик в моем репозитории AWS-CDK, и я получаю следующую странную ошибку:

Error: Resolution error: Supplied properties not correct for "CfnRoleProps"
  policies: element 0: supplied properties not correct for "PolicyProperty"
    policyDocument: required but missing.

«CfnRoleProps» кажетсяпринадлежать к функциональности «под капотом» CDK, к которой я действительно не хочу идти и касаться, и в сообщении об ошибке ничего не указывается в моем собственном коде, кроме строки, где я объявляю мои stackProps:

const prodEnv: StackProps = {
    description: '',
    stackName: 'slmProdStack',
    env: { region: 'eu-north-1' },
    tags: {
        stage: 'prod'
    }
}

Вот код, объявляющий роль:

export class IamConstruct extends Construct {
    private roleList: RoleList

    constructor(scope: Construct, id: string, stageName: string) {
        super(scope, id)
        this.roleList = {}

        this.defineRoles(rolesConfigData, stageName)
    }

    private defineRoles(roleConfigs: RolesConfigObject, stageName: string): void {
        Object.keys(roleConfigs).forEach((singleKey: string): void => {
            /** Loop through each individual role */
            const singleRoleData: RoleConfig = roleConfigs[singleKey]
            const principal = new ServicePrincipal(singleRoleData.principal)

            /** Define mananged Policies */
            const managedPolicies: IManagedPolicy[] = singleRoleData.managedPolicyNames
                .map((policyName: string): IManagedPolicy => {
                    return ManagedPolicy.fromManagedPolicyName(
                        this,
                        `${ stageName }_${ policyName }`,
                        policyName
                    )
                })

            /** Define inline Policies */
            const statements: PolicyStatement[] = singleRoleData.inlinePolicies
                .map((policyConfig: PolicyConfig): PolicyStatement => {
                    return new PolicyStatement({
                        effect: policyConfig.effect,
                        actions: policyConfig.actions,
                        resources: policyConfig[stageName === 'PROD' ? 'prodResources' : 'devResources']
                    })
                })

            const mainPolicy: PolicyDocument = new PolicyDocument()
            statements.forEach((statement: PolicyStatement) => mainPolicy.addStatements(statement))

            this.roleList[singleKey] = new Role(this, singleRoleData.roleId, {
                roleName: `${ stageName }_${ singleRoleData.roleName }`,
                assumedBy: principal,
                managedPolicies,
                inlinePolicies: {
                    mainPolicy
                }
            })
        })
    }

    public get roles(): RoleList {
        return this.roleList
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...