策略中的 Malformedpolicydocument 语法错误

Malformedpolicydocument syntax errors in policy

AWS 新手。我正在尝试使用 putUserPolicy API 向 IAM 用户添加内联策略,如下所示。 运行 作为错误代码进入 Malformedpolicydocument,作为错误消息进入策略中的语法错误

// Attaches the policy document to the IAM user userName in the account
    async putUserPolicy(userName: string, roleArn: string) {
        let userPolicyData: any = null;

        try {
            // creates the policy document
            const policyDocumentForUser = this.createUserPolicyDocument(roleArn);
            const trustPolicyParamsForUser = {
                PolicyDocument: JSON.stringify(policyDocumentForUser),
                PolicyName: 'userPolciy',
                UserName: userName
        };

        // attaching the policy document to the IAM user
        userPolicyData = await this.iam.putUserPolicy(trustPolicyParamsForUser).promise();
        this.logger.info(`Successfully created user policy for '${userName}'`);

        } catch (error) {
            this.logger.error(`Unable to create user policy role`, error);
            throw error;
        }

    }

    private createUserPolicyDocument(roleArn: string) {

        const policyDocument = {
            'statement': [
                {
                    'Action': 'sts:AssumeRole',
                    'Resource': roleArn,
                    'Effect': 'Allow'
                }
            ]
        };
        this.logger.debug('policyDocument:', policyDocument);

        return policyDocument;
    }

也尝试将版本提供给策略,但观察到相同的错误。我一直在为我的代码库中的所有保单文档使用单引号。

添加参考文档:https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutUserPolicy.html

'statement' 应该是 'Statement' 并且您还应该 "Version": "2012-10-17" 与语句

处于同一级别

您可能遇到了区分大小写的问题。 Statement必须大写。

作为旁注:它考虑了避免内联策略的良好做法。您可以改为创建和附加托管策略。此外,根据 CIS AWS Foundations Benchmark,建议将 IAM 策略直接应用于组和角色,而不是用户。

其背后的基本原理是,随着用户数量的增长,在组或角色级别分配权限会降低访问管理的复杂性。降低访问管理的复杂性反过来可能会减少委托人无意中获得或保留过多特权的机会。