javascript - 如何在 JavaScript 中使用 CDK 将资源策略添加到现有 S3 存储桶?

标签 javascript amazon-s3 aws-cdk

我正在向 S3 存储桶添加资源策略文档。

当我创建一个新的存储桶时它工作正常:

const newbucket = new s3.Bucket(this, 'newBucket', {
      websiteIndexDocument : 'index.html',
      bucketName : 'NewBucket'
});

newbucket.addToResourcePolicy(new iam.PolicyStatement({
      effect : iam.Effect.ALLOW,
      actions: ['s3:*'],
      resources: [newbucket.arnForObjects('*')],
      principals: [new iam.AnyPrincipal],
    }));

newbucket.addToResourcePolicy(new iam.PolicyStatement({
      effect : iam.Effect.DENY,
      actions: ['s3:*'],
      resources: [newbucket.arnForObjects('*')],
      principals: [new iam.AnyPrincipal],
      conditions : {
        'NotIpAddress' : {
          'aws:SourceIp' : '***.***.***.***'
        }
      }
    }));

但是,如果我尝试获取已经存在的存储桶并添加策略文档,则它不起作用:

const existingbucket = Bucket.fromBucketAttributes(this, 'ImportedBucket',{
      bucketName :'ExistingBucket'
    })

existingbucket.addToResourcePolicy(new iam.PolicyStatement({
      effect : iam.Effect.ALLOW,
      actions: ['s3:*'],
      resources: [existingbucket.arnForObjects('*')],
      principals: [new iam.AnyPrincipal],
    }));

不会添加资源策略文档。

此外,此代码删除现有的策略文档并将其设为空白。

有人对此问题有经验或解决方案吗?

最佳答案

是的,这是可能的,我使用 python cdk 做到了。这里有工作。 https://github.com/aws/aws-cdk/issues/6548
那里使用了 CfnBucketPolicy。

existing_bucket=s3.Bucket.from_bucket_attributes(self, 'ImportedBucket', 
            bucket_arn="arn:aws:s3:::bucket"       
        )

        bucket_policy=iam.PolicyStatement(
            actions=["s3:Get*", "s3:List*"],
            resources=[existing_bucket.arn_for_objects('*')],
            principals=[iam.AccountRootPrincipal()]
        )

        s3.CfnBucketPolicy(self, 'bucketpolicy',
            bucket=existing_bucket.bucket_name,
            policy_document=iam.PolicyDocument(statements=[bucket_policy])
        )

关于javascript - 如何在 JavaScript 中使用 CDK 将资源策略添加到现有 S3 存储桶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60087302/

相关文章:

typescript - 如何从名称或 cidr 获取子网 ID

JavaScript 未在 onLoad 中加载(Android webView 浏览器问题)

javascript - 用于数据网格(或电子表格)的 HTML5 javascript 框架

amazon-s3 - Google Drive 是一个适合网络应用程序的良好数据存储解决方案吗?

python - 检查错误 : AttributeError: type object 'Lark' has no attribute '_load_from_dict

python - 如何在步骤函数 Lambda 调用中将上下文对象与任务输入结合起来?

javascript - 如何在 Mongoose/Express 中搜索使用多选构建的数组

javascript - 在 Docker 容器内开发时启用 VS Code IntelliSense

ruby-on-rails - 回形针 AWS::S3::Errors::NoSuchKey 复制错误

javascript - NodeJS 将文本缓冲区转换为可查看的 HTML 页面