Указание пользовательской роли для лямбды с помощью AWS CDK - PullRequest
0 голосов
/ 04 октября 2018

Я понимаю, что это довольно новое, но я не вижу примеров ни на одном языке, как бы вы указали роль для лямбды, созданной с помощью AWS CDK.

Я пытался сделать это

const cdk       = require('@aws-cdk/cdk');
const lambda    = require('@aws-cdk/aws-lambda');
const iam       = require('@aws-cdk/aws-iam');

const path      = require('path');

class MyStack extends cdk.Stack {
    constructor (parent, id, props) {
            super(parent, id, props);

            //
            // Create a lambda...
            const fn = new lambda.Function(this, 'MyFunction-cdktest', {
                runtime: lambda.Runtime.NodeJS810,
                handler: 'index.handler',
                code: lambda.Code.directory( path.join( __dirname, 'lambda')),
                role: iam.RoleName('lambda_basic_execution')
            });

    }
}

class MyApp extends cdk.App {
        constructor (argv) {
                super(argv);

                new MyStack(this, 'hello-cdk');
        }
}

console.log(new MyApp(process.argv).run());

, чтобы попытаться указать существующую роль IAM для функции, но это не является правильным синтаксисом.Я также был бы согласен (или, возможно, даже предпочел бы) генерировать пользовательскую роль на лету, специфичную для этой лямбды, но я также не видел примеров того, как это сделать.

Есть ли у кого-нибудь пониманиео том, как это сделать?

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

Принятый ответ от @ rix0rrr больше не работает.Кажется, CDK получит некоторые обновления.В настоящее время версия

"@aws-cdk/core": "^1.1.0"

Обновленный код:

    import iam = require("@aws-cdk/aws-iam");

    const statement = new iam.PolicyStatement();
    statement.addActions("lambda:InvokeFunction");
    statement.addResources("*");

    lambda.addToRolePolicy(statement); 
0 голосов
/ 04 октября 2018

Лямбда уже поставляется с ролью выполнения, и у нее уже есть основные разрешения на выполнение.Если вы хотите добавить дополнительные разрешения к своей роли, сделайте что-то вроде следующего:

lambda.addToRolePolicy(new cdk.PolicyStatement()
   .addResource('arn:aws:....')
   .addAction('s3:GetThing'));

Или еще лучше, используйте одну из вспомогательных функций для доступа к некоторым ресурсам:

bucket.grantRead(lambda.role);
...