如何从 Elastic Beanstalk 控制台下载日志并确保不会出现 Access Denied(访问被拒绝)错误?

2 分钟阅读
0

我想从 AWS Elastic Beanstalk 控制台下载日志,并确保不会出现 Access Denied(访问被拒绝)错误或日志页面无法加载的问题。

简短描述

当您在 Elastic Beanstalk 环境控制台中或使用 eb logs 命令请求尾部日志时,系统会将最新的日志条目汇总在一起。这些汇总的日志条目会生成到一个文本文件中,然后由您环境中的实例上传到 Amazon Simple Storage Service(Amazon S3)。

当您请求包日志时,环境中的一个实例会将完整的日志文件打包到一个 ZIP 存档文件中,然后将其上传到 Amazon S3。

环境中的该实例必须拥有一个带有 s3:Get*s3:List*s3:PutObject 权限的 Elastic Beanstalk 实例配置文件,才能写入您的 Amazon S3 桶。这些权限包含在默认实例配置文件中。如果您使用的是自定义实例配置文件角色,请包含这些权限。

要解决尝试从 AWS Elastic Beanstalk 控制台检索日志时出现 Access Denied(访问被拒绝)错误或日志无法下载的问题,请检查以下内容:

  • Amazon S3 用户权限
  • Amazon S3 桶策略
  • 使用 KMS 密钥加密的 Amazon S3 桶
  • Amazon S3 网关端点策略
  • 服务控制策略(SCP)
  • 资源利用情况

解决方法

Amazon S3 用户权限

Elastic Beanstalk 使用用户权限将日志保存或上传到您的 Elastic Beanstalk S3 桶。AWS Identity and Access Management(IAM)用户必须具有以下权限才能从 Elastic Beanstalk 控制台检索日志:

  • s3:PutObject
  • s3:GetObject
  • s3:GetBucketAcl
  • s3:PutObjectAcl

**注意:**您的用户策略还必须具有 s3:DeleteObject 权限,因为 Elastic Beanstalk 使用您的用户权限从 Amazon S3 中删除相关日志

示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:GetBucketAcl",
        "s3:PutObjectAcl"
      ],
      "Resource": "*"
    }
  ]
}

Amazon S3 桶策略

查看您的 Elastic Beanstalk Amazon S3 桶策略,确保您的实例配置文件允许 PutObject 权限。您的默认实例配置文件(aws-elasticbeanstalk-ec2-role)会自动允许 PutObject 权限。如果您使用的是自定义实例配置文件,请务必确保添加 PutObject 权限。

示例:

{
            "Sid": "eb-ad78f54a-f239-4c90-adda-49e5f56cb51e",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012 :role/aws-elasticbeanstalk-ec2-role",
                    "arn:aws:iam::126355979347:role/custom-instance-profile-role"
                ]
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::elasticbeanstalk-ap-south-1-123456789012/resources/environments/logs/*"
        },

使用 KMS 密钥加密的 Amazon S3 桶

可以将 KMS 密钥加密添加到 Elastic Beanstalk 使用的 Amazon S3 桶中。添加 KMS 密钥加密后,控制台上的 Elastic Beanstalk Pull Bundle Logs 操作生成的预签名 URL 将失效。此失效发生时,系统将显示 Access Denied(访问被拒绝)错误。

解决方法是,您可以从 Amazon S3 桶位置手动下载包日志。有关详细信息,请参阅 Amazon S3 中的日志位置

Amazon S3 网关端点策略

可以使用 Amazon Virtual Private Cloud(Amazon VPC)端点在私有子网中创建 Elastic Beanstalk 环境。在这种情况下,您必须拥有 Amazon S3 网关端点才能与实例通信并检索 UserdataBootstrap.shplatform.zip 等文件。检查 Amazon S3 网关端点级别是否存在任何用户限制。有关详细信息,请参阅 Amazon S3 的网关端点

服务控制策略

如果您拥有正确的权限,但仍然收到 Access Denied(访问被拒绝)错误,请检查您的账户是否已启用组织策略。有关详细信息,请参阅服务控制策略(SCP)

资源利用情况

如果所有权限和策略都配置正确,请检查您的 Amazon Elastic Compute Cloud(Amazon EC2)实例的资源利用情况。如果相关服务器过于繁忙,例如 CPU 或内存使用率过高,则您下载日志时可能会卡住。要解决此问题,请更改您的实例类型以增加 CPU 和内存。例如,您可以将实例从 t2.micro 更改为 t2.medium

AWS 官方
AWS 官方已更新 1 年前