繁体   English   中英

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

[英]How to add resource policy to existing S3 bucket with CDK in JavaScript?

我正在向 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<\/a>那里使用了 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])
        )

我相信您无法通过您的 CDK 应用程序修改现有存储桶的策略。 这就是为什么在您创建新存储桶时它可以完美运行的原因。

如果您需要更改该存储桶的资源策略,恐怕您可能需要手动进行。

我正在努力解决同样的问题。 在四处挖掘之后,我发现了这个<\/a>,这意味着 CDK 不可能:

作为一种解决方法,我计划做的是输出需要从命令行运行的确切 AWS S3 命令,以便附加 S3 存储桶资源策略。 这样部署堆栈的用户(我正在使用服务器堆栈<\/a>)知道这个额外的手动步骤。 希望 AWS CLI 支持

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM