アクセス拒否エラーが発生せずに Elastic Beanstalk コンソールからログをダウンロードする方法を教えてください。

所要時間2分
0

アクセス拒否エラーが発生したり、ログページの読み込みが止まったりせずに、AWS Elastic Beanstalk コンソールからログをダウンロードしたい。

簡単な説明

Elastic Beanstalk 環境コンソールまたは eb logs でテールログをリクエストすると、最新のログエントリがリンクされます。ログエントリは 1 つのテキストファイルにリンクされ、環境内のインスタンスによって Amazon Simple Storage Service (Amazon S3) にアップロードされます。

バンドルログをリクエストすると、環境内のインスタンスがログファイル全体を ZIP アーカイブにパッケージ化し、Amazon S3 にアップロードします。

環境内のインスタンスには、Amazon S3 バケットに書き込むための権限 (s3:Get*s3:List*s3:PutObject) が付与された Elastic Beanstalk インスタンスプロファイルが必要です。これらの権限はデフォルトのインスタンスプロファイルに含まれています。カスタムインスタンスプロファイルロールを使用している場合は、これらの権限を含めてください。

AWS Elastic Beanstalk コンソールからログを取得しようとしたときに、アクセス拒否エラーが表示される、またはログのダウンロードが停止する問題を解決するには、次の点を確認してください。

  • 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

注: Elastic Beanstalk はユーザーのアクセス権限を使用して Amazon S3 からログを削除するため、ユーザーポリシーには s3:DeleteObject 権限も必要です。

例:

{
  "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 権限が付与されていることを確認してください。PutObject 権限は、デフォルトのインスタンスプロファイル (aws-elasticbeanstalk-ec2-role) に自動的に付与されます。カスタムインスタンスプロファイルを使用している場合は、必ず 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 バンドルログのプルアクションによって生成された署名付き URL にアクセスできません。この障害は、アクセス拒否エラーになります。

回避策として、Amazon S3 バケットの場所からバンドルログを手動でダウンロードできます。詳細については、「Amazon S3 のログの場所」を参照してください。

Amazon S3 ゲートウェイエンドポイントポリシー

Elastic Beanstalk 環境は、Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを使用してプライベートサブネットに作成できます。このシナリオでは、インスタンスと通信して UserdataBootstrap.shplatform.zip などのファイルを取得するための Amazon S3 ゲートウェイエンドポイントが必要です。Amazon S3 ゲートウェイエンドポイントレベルでユーザー制限があるかどうかを確認してください。詳細については、「Amazon S3 のゲートウェイエンドポイント」を参照してください。

サービスコントロールポリシー

権限が正しいのに、引き続きアクセス拒否エラーが表示される場合は、アカウントの組織ポリシーが有効になっているかどうかを確認してください。詳細については、「サービスコントロールポリシー (SCP)」を参照してください。

リソース使用率

すべての権限とポリシーが正しく設定されている場合は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのリソース使用率を確認してください。CPU やメモリの使用率が高いなど、サーバーの使用率が高すぎると、ログがダウンロードされなくなる可能性があります。これを解決するには、インスタンスタイプを変更して CPU とメモリストレージを増やしてください。たとえば、t2.micro から t2.medium に変更します。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ