メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

Elastic Beanstalk インスタンスプロファイルを管理する

インスタンスプロファイルは AWS Identity and Access Management(IAM)ロールを格納したコンテナで、インスタンスの起動時に EC2 インスタンスにロール情報を渡す際に使用します。AWS Elastic Beanstalk 環境管理コンソールで環境を起動すると、aws-elasticbeanstalk-ec2-role という名前のデフォルトのインスタンスプロファイルが作成され、デフォルトのアクセス権限を持つ管理ポリシーが割り当てられます。

Elastic Beanstalk には、ウェブサーバー枠に対するポリシー、ワーカー枠に対するポリシー、複数コンテナの Docker 環境で追加のアクセス権限が必要なポリシーという 3 つの管理ポリシーがあります。これらのポリシーはすべて、コンソールによりデフォルトのインスタンスプロファイルにアタッチされたロールに割り当てられます。次のようなポリシーがあります。

マネージドインスタンスプロファイルポリシー

  • AWSElasticBeanstalkWebTier – アプリケーションがログを Amazon S3 にアップロードし、デバッグ情報を AWS X-Ray にアップロードするアクセス権限を付与します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "BucketAccess",
          "Action": [
            "s3:Get*",
            "s3:List*",
            "s3:PutObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::elasticbeanstalk-*",
            "arn:aws:s3:::elasticbeanstalk-*/*"
          ]
        },
        {
          "Sid": "XRayAccess",
          "Action":[
            "xray:PutTraceSegments",
            "xray:PutTelemetryRecords"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "CloudWatchLogsAccess",
          "Action": [
            "logs:PutLogEvents",
            "logs:CreateLogStream"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:logs:*:*:log-group:/aws/elasticbeanstalk*"
          ]
        }
      ]
    }
  • AWSElasticBeanstalkWorkerTier – ログのアップロード、デバッグ、メトリクスのパブリッシュ、ワーカーインスタンスタスク (キュー管理やリーダー選択、定期的なタスクなど) のアクセス権限を付与します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "MetricsAccess",
          "Action": [
            "cloudwatch:PutMetricData"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "XRayAccess",
          "Action":[
            "xray:PutTraceSegments",
            "xray:PutTelemetryRecords"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "QueueAccess",
          "Action": [
            "sqs:ChangeMessageVisibility",
            "sqs:DeleteMessage",
            "sqs:ReceiveMessage",
            "sqs:SendMessage"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "BucketAccess",
          "Action": [
            "s3:Get*",
            "s3:List*",
            "s3:PutObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::elasticbeanstalk-*",
            "arn:aws:s3:::elasticbeanstalk-*/*"
          ]
        },
        {
          "Sid": "DynamoPeriodicTasks",
          "Action": [
            "dynamodb:BatchGetItem",
            "dynamodb:BatchWriteItem",
            "dynamodb:DeleteItem",
            "dynamodb:GetItem",
            "dynamodb:PutItem",
            "dynamodb:Query",
            "dynamodb:Scan",
            "dynamodb:UpdateItem"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:dynamodb:*:*:table/*-stack-AWSEBWorkerCronLeaderRegistry*"
          ]
        }
      ]
    }
  • AWSElasticBeanstalkMulticontainerDocker – クラスタータスクを調整するため Amazon EC2 Container Service へのアクセス権限を付与します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ECSAccess",
          "Effect": "Allow",
          "Action": [
            "ecs:Poll",
            "ecs:StartTask",
            "ecs:StopTask",
            "ecs:DiscoverPollEndpoint",
            "ecs:StartTelemetrySession",
            "ecs:RegisterContainerInstance",
            "ecs:DeregisterContainerInstance",
            "ecs:DescribeContainerInstances",
            "ecs:Submit*"
          ],
          "Resource": "*"
        }
      ]
    }

環境内の EC2 インスタンスが aws-elasticbeanstalk-ec2-role ロールを引き受けるようするには、インスタンスプロファイルの信頼関係ポリシーで Amazon EC2 を信頼済みエンティティとして指定します。

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

アクセス権限をカスタマイズするには、デフォルトのインスタンスプロファイルにアタッチされたロールにポリシーを追加するか、権限が限定された独自のインスタンスプロファイルを作成します。

デフォルトのインスタンスプロファイルに割り当てられたアクセス権限を確認する

デフォルトのインスタンスプロファイルに割り当てられる権限は、作成日時、環境の最終起動日時、使用したクライアントにより異なります。デフォルトのインスタンスプロファイルのアクセス権限は、IAM コンソールで確認可能です。

デフォルトのインスタンスプロファイルのアクセス権限を確認する

  1. IAM コンソールの [Roles] ページを開きます。

  2. [aws-elasticbeanstalk-ec2-role] を選択します。

  3. [Permissions] タブを選択し、[Managed Policies] および [Inline Policies] セクションでロールにアタッチされたポリシーを確認します。

  4. ポリシーにより付与されるアクセス権限を表示するには、ポリシーの横にある [Show Policy] を選択してください。

情報が古くなったデフォルトのインスタンスプロファイルを更新する

デフォルトのインスタンスプロファイルに必要なアクセス権限が付与されていない場合は、Elastic Beanstalk 環境マネジメントコンソールで新しい環境を作成し、権限を更新します。

あるいは、デフォルトのインスタンスプロファイルにアタッチされたロールに管理ポリシーを手動で追加しても構いません。

デフォルトのインスタンスプロファイルにアタッチされたロールに管理ポリシーを追加するには

  1. IAM コンソールの [Roles] ページを開きます。

  2. [aws-elasticbeanstalk-ec2-role] を選択します。

  3. [Permissions] タブを開き、[Managed Policies] で [Attach Policy] を選択します。

  4. AWSElasticBeanstalk と入力し、ポリシーをフィルタします。

  5. 次のポリシーを指定し、[Attach Policies] を選択します。

    • AWSElasticBeanstalkWebTier

    • AWSElasticBeanstalkWorkerTier

    • AWSElasticBeanstalkMulticontainerDocker

デフォルトのインスタンスプロファイルにアクセス権限を追加する

アプリケーションが AWS API またはデフォルトのインスタンスプロファイルでアクセス権限が付与されていないリソースにアクセスしなければならない場合は、IAM コンソールでこれらのアクセス権限を付与するポリシーを追加します。

デフォルトのインスタンスプロファイルにアタッチされたロールにポリシーを追加するには

  1. IAM コンソールの [Roles] ページを開きます。

  2. [aws-elasticbeanstalk-ec2-role] を選択します。

  3. [Permissions] タブを開き、[Managed Policies] で [Attach Policy] を選択します。

  4. アプリケーションで使用する追加サービスの管理ポリシーを選択します。例えば、AmazonS3FullAccessAmazonDynamoDBFullAccess などです。

  5. [Attach Policies] を選択します。

インスタンスプロファイルを作成する

インスタンスプロファイルは、EC2 インスタンスによるロールの引き受けを許可する標準 IAM ロールのラッパーです。異なるアプリケーションに対するアクセス権限をカスタマイズするには、追加のインスタンスプロファイルを作成します。これらの機能を使用しない場合は、ワーカー枠またはマルチコンテナ Docker 環境に対してアクセス権限を付与しないインスタンスプロファイルを作成してください。

インスタンスプロファイルを作成するには

  1. IAM コンソールの [Roles] ページを開きます。

  2. [Create New Role] を選択します。

  3. 名前を入力し、[Next Step] を選択します。

  4. [AWS Service Roles] で [Amazon EC2] を選択します。

  5. Elastic Beanstalk により指定された適切な管理ポリシーや、アプリケーションで必要なアクセス権限を付与するその他のポリシーがあれば、それらもアタッチします。

  6. [Next Step] を選択します。

  7. [Create Role] を選択します。