代码之家  ›  专栏  ›  技术社区  ›  Rajat jain

拒绝访问bucket日志记录表单Applicationloadbalancer:请检查S3bucket权限

  •  0
  • Rajat jain  · 技术社区  · 7 年前
    Access Denied for bucket: appdeploy-logbucket-1cca50r865s65. 
    Please check S3bucket permission (Service: AmazonElasticLoadBalancingV2; Status Code: 400; Error Code: 
    InvalidConfigurationRequest; Request ID: e5e2245f-2f9b-11e9-a3e9-2dcad78a31ec)
    

    我想将我的ALB日志存储到s3 bucket,我已经向s3 bucket添加了策略,但是它说访问被拒绝,我已经尝试了很多次,并且使用了很多配置,但是一次又一次失败,我的堆栈回滚,我使用了 Troposphere 创建模板。

    BucketPolicy = t.add_resource(
        s3.BucketPolicy(
            "BucketPolicy",
            Bucket=Ref(LogBucket),
            PolicyDocument={
                "Id": "Policy1550067507528",
                "Version": "2012-10-17",
                "Statement": [
                  {
                       "Sid": "Stmt1550067500750",
                       "Action": [
                        "s3:PutObject",
                        "s3:PutBucketAcl",
                        "s3:PutBucketLogging",
                        "s3:PutBucketPolicy"
                       ],
                       "Effect": "Allow",
                       "Resource": Join("", [
                         "arn:aws:s3:::",
                         Ref(LogBucket),
                         "/AWSLogs/",
                         Ref("AWS::AccountId"),
                         "/*"]),
                       "Principal": {"AWS": "027434742980"},
                  }
                ],
                },
        ))
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   phobologic    7 年前

    对流层/堆垛机维修人员。我们有一个堆垛机蓝图(它是一个围绕对流层模板的包装器),我们在工作中用于我们的日志桶:

    from troposphere import Sub
    from troposphere import s3
    
    from stacker.blueprints.base import Blueprint
    
    from awacs.aws import (
        Statement, Allow, Policy, AWSPrincipal
    )
    from awacs.s3 import PutObject
    
    
    class LoggingBucket(Blueprint):
        VARIABLES = {
            "ExpirationInDays": {
                "type": int,
                "description": "Number of days to keep logs around for",
            },
            # See the table here for account ids.
            # https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html#attach-bucket-policy
            "AWSAccountId": {
                "type": str,
                "description": "The AWS account ID to allow access to putting "
                               "logs in this bucket.",
                "default": "797873946194"  # us-west-2
            },
        }
    
        def create_template(self):
            t = self.template
            variables = self.get_variables()
    
            bucket = t.add_resource(
                s3.Bucket(
                    "Bucket",
                    LifecycleConfiguration=s3.LifecycleConfiguration(
                        Rules=[
                            s3.LifecycleRule(
                                Status="Enabled",
                                ExpirationInDays=variables["ExpirationInDays"]
                            )
                        ]
                    )
                )
            )
    
            # Give ELB access to PutObject in the bucket.
            t.add_resource(
                s3.BucketPolicy(
                    "BucketPolicy",
                    Bucket=bucket.Ref(),
                    PolicyDocument=Policy(
                        Statement=[
                            Statement(
                                Effect=Allow,
                                Action=[PutObject],
                                Principal=AWSPrincipal(variables["AWSAccountId"]),
                                Resource=[Sub("arn:aws:s3:::${Bucket}/*")]
                            )
                        ]
                    )
                )
            )
    
            self.add_output("BucketId", bucket.Ref())
            self.add_output("BucketArn", bucket.GetAtt("Arn"))