AWS Elastic Beanstalk
開発者ガイド

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

お客様の環境を管理し監視するために、AWS Elastic Beanstalk はお客様に代わって環境のリソースに対してアクションを実行します。Elastic Beanstalk はこれらのアクションを実行するために特定のアクセス許可を必要とし、これらのアクセス許可を取得するために AWS Identity and Access Management (IAM) サービスロールを引き受けます。

Elastic Beanstalk は、サービスロールを引き受けるときはいつでも一時的セキュリティ認証情報を使用する必要があります。これらの認証情報を取得するために、Elastic Beanstalk はグローバルエンドポイント上の AWS Security Token Service (AWS STS) にリクエストを送信します。詳細については、IAM ユーザーガイドの「一時的セキュリティ認証情報」を参照してください。

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

Elastic Beanstalk は拡張ヘルスモニタリング用の管理ポリシーと、管理プラットフォームの更新に必要な追加の権限を持つポリシーを提供します。コンソールによってデフォルトのサービスロールに割り当てられます。サービスロールの管理ポリシーは次のとおりです。

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

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeTargetHealth", "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:GetConsoleOutput", "ec2:AssociateAddress", "ec2:DescribeAddresses", "ec2:DescribeSecurityGroups", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeScalingActivities", "autoscaling:DescribeNotificationConfigurations", "sns:Publish" ], "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", "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) の eb create コマンドを使用して環境を起動し、--service-role オプションでサービスロールを指定していない場合、Elastic Beanstalk はデフォルトのサービスロール (aws-elasticbeanstalk-service-role) を作成します。デフォルトのサービスロールが既に存在する場合、Elastic Beanstalk はそのサービスロールを新しい環境で使用します。

Elastic Beanstalk API の CreateEnvironment アクションを使用して環境を作成する場合は、aws:elasticbeanstalk:environment 名前空間に ServiceRole 設定オプションを設定して、サービスロールを指定します。Elastic Beanstalk API で拡張ヘルスモニタリングを使用する方法の詳細については、「AWS Elastic Beanstalk API での拡張ヘルスレポートの使用」を参照してください。

Elastic Beanstalk API を使用して環境を作成したときに、サービスロールを指定しないと、Elastic Beanstalk によってアカウント用にサービスにリンクされたロールが作成され (まだ存在していない場合)、そのロールが新しい環境で使用されます。サービスにリンクされたロールは、Elastic Beanstalk によって事前定義された一意のタイプのサービスロールであり、お客様の代わりにサービスから AWS の他のサービスを呼び出すために必要なアクセス権限がすべて含まれています。このサービスにリンクされたロールは、お客様のアカウントに関連付けられます。Elastic Beanstalk は、一度作成したロールを、追加の環境を作成する際に再利用します。IAM を使用して、アカウントのモニタリングサービスにリンクされたロールを事前に作成することもできます。モニタリングサービスにリンクされたロールがアカウントに設定されている場合は、これを使用して Elastic Beanstalk API、Elastic Beanstalk コンソール、または EB CLI で環境を作成できます。Elastic Beanstalk 環境でサービスにリンクされたロールを使用する方法の詳細については、「Elastic Beanstalk のサービスにリンクされたロールの使用」を参照してください。

注記

環境の作成時に Elastic Beanstalk でモニタリングサービスにリンクされたロールをアカウントに作成する場合は、 iam:CreateServiceLinkedRole アクセス許可が必要です。このアクセス許可がない場合、環境の作成は失敗し、問題を説明するメッセージが表示されます。

別の方法として、サービスにリンクされたロールを作成する権限を持つ別のユーザーが IAM を使用して、サービスにリンクされたロールを事前に作成できます。この場合は、iam:CreateServiceLinkedRole アクセス許可がなくても、環境を作成できます。

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

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

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

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

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

  3. [Permissions (アクセス許可)] タブで、ロールにアタッチされたポリシーのリストを確認します。

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

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

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

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

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

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

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

  3. [Permissions (アクセス許可)] タブで、[Attach policy (ポリシーのアタッチ)] を選択します。

  4. ポリシーをフィルタリングするには、「AWSElasticBeanstalk」と入力します。

  5. 次のポリシーを指定し、[Attach policy (ポリシーのアタッチ)] を選択します。

    • AWSElasticBeanstalkEnhancedHealth

    • AWSElasticBeanstalkService

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

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

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

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

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

  3. [Permissions (アクセス許可)] タブで、[Attach policy (ポリシーのアタッチ)] を選択します。

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

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

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

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

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

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

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

  3. [AWS service (AWS のサービス)] で、[AWS Elastic Beanstalk]、ユースケースの順に選択します。

  4. [Next: Permissions (次へ: アクセス許可)] を選択します。

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

  6. [Next: Tags (次の手順: タグ)] を選択します。

  7. (オプション) ロールにタグを追加します。

  8. [Next: Review] を選択します。

  9. ロールの名前を入力します。

  10. [Create role] を選択します。

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