【问题标题】:AWS CDK: Add a specific S3 resource to IAM policyAWS CDK:将特定 S3 资源添加到 IAM 策略
【发布时间】:2020-07-06 01:35:54
【问题描述】:

我想创建一个具有读取/写入特定 S3 存储桶的角色的 lambda 函数。下面是我编写的代码,但在 AWS 控制台策略中,它没有显示存储桶 arn,而是显示为 s3:::[object Object] 我错过了什么吗?

const role = new IAM.Role(this, 'MyRole', {
      assumedBy: new IAM.ServicePrincipal('lambda.amazonaws.com'),
      roleName: 'DefaultRoleName'
    });

    role.addToPolicy(new IAM.PolicyStatement({
      resources: [lambda_source.bucketArn],
      actions: ['s3:GetObject', 'lambda:InvokeFunction']
    }));

    // lambda_source.grantReadWrite(role) // I have tried this, and this is also outputs the same result.

    const myLambda = new lambda.Function(this, 'MYLHandler', {
      runtime: lambda.Runtime.NODEJS_12_X,
      code: lambda.Code.fromBucket(lambda_source.bucketName, 'lambda.zip'),
      handler: 'index.handler',
      functionName: 'MyLambda',
      role: role
    });

这是 AWS 控制台 IAM 角色策略文档中的输出:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:aws:s3:::[object Object]",
            "Effect": "Allow"
        }
    ]
}

【问题讨论】:

    标签: amazon-web-services amazon-iam aws-cdk


    【解决方案1】:

    lambda_source.bucketArn 是一个对象,而不是您期望的字符串。打印出该对象以查看它实际上是什么以及它是否包含带有 ARN 的字段。

    【讨论】:

      【解决方案2】:

      您可以import the bucket 并授予权限:

      const bucket = Bucket.fromBucketAttributes(this, 'ImportedBucket', {
          bucketArn: 'arn:aws:s3:::my-bucket'
      });
      
      // now you can just call methods on the bucket
      bucket.grantRead(mylambda);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        • 2020-12-16
        • 2020-09-24
        • 2020-05-22
        • 2021-10-23
        相关资源
        最近更新 更多