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

Elastic Beanstalk サービスロールを管理する

AWS Elastic Beanstalk 環境管理コンソールで環境を起動すると、「aws-elasticbeanstalk-service-role」という名前のデフォルトのサービスロールが作成され、デフォルトのアクセス権限を持つ管理ポリシーがアタッチされます。

管理ポリシーは、Elastic Beanstalk によって拡張ヘルスモニタリング用とマネージドプラットフォーム更新用(その他のアクセス権限を持つ)にそれぞれ 1 つずつ指定され、コンソールによってデフォルトのサービスロールに割り当てられます。サービスロールの管理ポリシーは次のとおりです。

サービスロールの管理ポリシー

  • AWSElasticBeanstalkEnhancedHealth – インスタンスと環境ヘルスをモニタリングするため Elastic Beanstalk へのアクセス権限を付与します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "elasticloadbalancing:DescribeInstanceHealth",
            "ec2:DescribeInstances",
            "ec2:DescribeInstanceStatus",
            "ec2:GetConsoleOutput",
            "ec2:AssociateAddress",
            "ec2:DescribeAddresses",
            "ec2:DescribeSecurityGroups",
            "sqs:GetQueueAttributes",
            "sqs:GetQueueUrl",
            "autoscaling:DescribeAutoScalingGroups",
            "autoscaling:DescribeAutoScalingInstances",
            "autoscaling:DescribeScalingActivities",
            "autoscaling:DescribeNotificationConfigurations"
          ],
          "Resource": [
            "*"
          ]
        }
      ]
    }
  • AWSElasticBeanstalkService – 環境を更新しマネージド更新が実行されるように Elastic Beanstalk へのアクセス権限を付与します。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AllowCloudformationOperationsOnElasticBeanstalkStacks",
                "Effect": "Allow",
                "Action": [
                    "cloudformation:*"
                ],
                "Resource": [
                    "arn:aws:cloudformation:*:*:stack/awseb-*",
                    "arn:aws:cloudformation:*:*:stack/eb-*"
                ]
            },
            {
                "Sid": "AllowS3OperationsOnElasticBeanstalkBuckets",
                "Effect": "Allow",
                "Action": [
                    "s3:*"
                ],
                "Resource": [
                    "arn:aws:s3:::elasticbeanstalk-*",
                    "arn:aws:s3:::elasticbeanstalk-*/*"
                ]
            },
            {
                "Sid": "AllowOperations",
                "Effect": "Allow",
                "Action": [
                    "autoscaling:AttachInstances",
                    "autoscaling:CreateAutoScalingGroup",
                    "autoscaling:CreateLaunchConfiguration",
                    "autoscaling:DeleteLaunchConfiguration",
                    "autoscaling:DeleteAutoScalingGroup",
                    "autoscaling:DeleteScheduledAction",
                    "autoscaling:DescribeAccountLimits",
                    "autoscaling:DescribeAutoScalingGroups",
                    "autoscaling:DescribeAutoScalingInstances",
                    "autoscaling:DescribeLaunchConfigurations",
                    "autoscaling:DescribeLoadBalancers",
                    "autoscaling:DescribeNotificationConfigurations",
                    "autoscaling:DescribeScalingActivities",
                    "autoscaling:DescribeScheduledActions",
                    "autoscaling:DetachInstances",
                    "autoscaling:PutScheduledUpdateGroupAction",
                    "autoscaling:ResumeProcesses",
                    "autoscaling:SetDesiredCapacity",
                    "autoscaling:SuspendProcesses",
                    "autoscaling:TerminateInstanceInAutoScalingGroup",
                    "autoscaling:UpdateAutoScalingGroup",
                    "cloudwatch:PutMetricAlarm",
                    "ec2:AuthorizeSecurityGroupEgress",
                    "ec2:AuthorizeSecurityGroupIngress",
                    "ec2:CreateSecurityGroup",
                    "ec2:DeleteSecurityGroup",
                    "ec2:DescribeAccountAttributes",
                    "ec2:DescribeImages",
                    "ec2:DescribeInstances",
                    "ec2:DescribeKeyPairs",
                    "ec2:DescribeSecurityGroups",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeVpcs",
                    "ec2:RevokeSecurityGroupEgress",
                    "ec2:RevokeSecurityGroupIngress",
                    "ec2:TerminateInstances",
                    "ecs:CreateCluster",
                    "ecs:DeleteCluster",
                    "ecs:DescribeClusters",
                    "ecs:RegisterTaskDefinition",
                    "elasticbeanstalk:*",
                    "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
                    "elasticloadbalancing:ConfigureHealthCheck",
                    "elasticloadbalancing:CreateLoadBalancer",
                    "elasticloadbalancing:DeleteLoadBalancer",
                    "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
                    "elasticloadbalancing:DescribeInstanceHealth",
                    "elasticloadbalancing:DescribeLoadBalancers",
                    "elasticloadbalancing:DescribeTargetHealth",
                    "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
                    "iam:ListRoles",
                    "iam:PassRole",
                    "logs:CreateLogGroup",
                    "logs:PutRetentionPolicy",
                    "rds:DescribeDBInstances",
                    "rds:DescribeOrderableDBInstanceOptions",
                    "s3:CopyObject",
                    "s3:GetObject",
                    "s3:GetObjectAcl",
                    "s3:GetObjectMetadata",
                    "s3:ListBucket",
                    "s3:listBuckets",
                    "s3:ListObjects",
                    "sns:CreateTopic",
                    "sns:GetTopicAttributes",
                    "sns:ListSubscriptionsByTopic",
                    "sns:Subscribe",
                    "sqs:GetQueueAttributes",
                    "sqs:GetQueueUrl"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }

Elastic Beanstalk が aws-elasticbeanstalk-service-role ロールを引き受けるように、サービスロールは信頼関係ポリシーで Elastic Beanstalk を信頼済みエンティティとして指定します。

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
          "Service": "elasticbeanstalk.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "elasticbeanstalk"
          }
        }
      }
    ]
}

Elastic Beanstalk コマンドラインインターフェイス(EB CLI)では、デフォルトのサービスロールが使用されます(ある場合)。Elastic Beanstalk API を使用して環境を作成する場合は、aws:elasticbeanstalk:environment 名前空間で ServiceRole 設定オプションを使用して、サービスロールを指定します。Elastic Beanstalk API での拡張ヘルスモニタリングの使用に関する詳細については、「AWS Elastic Beanstalk API での拡張ヘルスレポートの使用」を参照してください。

デフォルトのサービスロールのアクセス権限を確認する

デフォルトのサービスロールに付与されるアクセス権限は、作成日時、最後に環境を起動した日時、使用したクライアントにより異なります。デフォルトのサービスロールに付与されるアクセス権限は IAM コンソールで確認できます。

デフォルトのサービスロールのアクセス権限を確認する

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

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

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

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

古くなったデフォルトのサービスロールを更新する

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

あるいは、デフォルトのサービスロールに管理ポリシーを手動で追加しても構いません。

デフォルトのサービスロールに管理ポリシーを追加する

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

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

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

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

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

    • AWSElasticBeanstalkEnhancedHealth

    • AWSElasticBeanstalkService

デフォルトのサービスロールにアクセス権限を付与する

アプリケーションに含まれている設定ファイルがデフォルトのサービスロールでアクセス権限の含まれていない AWS リソースを参照する場合、マネージド更新での設定ファイル処理時にこのリファレンスが解決できるよう Elastic Beanstalk でその他のアクセス権限が必要となることがあります。アクセス権限がない場合、更新は失敗し Elastic Beanstalk からアクセス権限が必要であるというメッセージが返されます。IAM コンソールで、デフォルトのサービスロールにその他のサービスのアクセス権限を追加します。

デフォルトのサービスロールにその他のポリシーを追加する

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

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

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

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

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

サービスロールを作成する

デフォルトのサービスロールを使用できない場合は別途サービスロールを作成します。

サービスロールを作成する

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

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

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

  4. [AWS Service Roles] で、[AWS Elastic Beanstalk] を選択します。

  5. AWSElasticBeanstalkServiceAWSElasticBeanstalkEnhancedHealth の管理ポリシー、ならびにアプリケーションで必要なアクセス権限を付与するその他のポリシーがあればそれらもアタッチします。

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

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

環境を、環境の作成ウィザード、または --service-role オプション eb create コマンドで作成すると、カスタムサービスロールを適用できます。