Elastic Beanstalk ユーザーポリシーの管理 - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Elastic Beanstalk ユーザーポリシーの管理

AWS Elastic Beanstalk には、2 つのマネージド型ポリシーが用意されています。このポリシーでは、Elastic Beanstalk で管理されるすべてのリソースに対し、フルアクセスか読み取り専用アクセスを許可することができます。ポリシーは、AWS Identity and Access Management (IAM) ユーザーまたはグループ、またはユーザーが引き受けるロールにアタッチできます。

重要

Elastic Beanstalk マネージド型ポリシーは、詳細なアクセス権限を提供しません。Elastic Beanstalk アプリケーションの操作に必要となる可能性のある、すべてのアクセス権限が付与されます。また、当社の管理ポリシーでは、Elastic Beanstalk では管理されておらず、お客様によりソリューションに追加されるような、カスタムリソースのためのアクセス許可についてもサポートしていません。よりきめの細かなアクセス許可、必要最小限のアクセス許可、またはリソースに対するアクセス許可をカスタムで作成するには、カスタムポリシーを使用します。

管理ユーザーポリシー
  • AdministratorAccess-AWSElasticBeanstalk – Elastic Beanstalk アプリケーション、アプリケーションバージョン、設定の構成、環境、およびそれらの基盤となるリソースを作成、変更、削除するための、完全な管理者権限をユーザーに付与します。マネージドポリシーの内容を表示するには、「AWS マネージドポリシーリファレンスガイド」の「AdministratorAccess-AWSElasticBeanstalk」ページを参照してください。

  • AWSElasticBeanstalkReadOnly – ユーザーにアプリケーションおよび環境を表示することを許可します。ただし、それらを変更するオペレーションは許可しません。すべての Elastic Beanstalk リソースと、Elastic Beanstalk コンソールで取得される他の AWS リソースからの読み取り専用アクセスを許可します。読み取り専用アクセスでは、Elastic Beanstalk ログを読むためのダウンロードなどのアクションは実行できません。これは、Amazon S3 バケットにログがステージングされるので、Elastic Beanstalk にそのバケットに対する書き込みアクセス許可が必要なためです。Elastic Beanstalk ログへのアクセスを有効にする方法については、このトピックの最後の例を参照してください。マネージドポリシーの内容を表示するには、「AWS マネージドポリシーリファレンスガイド」の「AWSElasticBeanstalkReadOnly」ページを参照してください。

注記

以前は、Elastic Beanstalk では、AWSElasticBeanstalkFullAccessAWSElasticBeanstalkReadOnlyAccess という、他の 2 つの管理ユーザーポリシーをサポートしていました。これらの古いポリシーは廃止する予定です。これらは、IAM コンソールで、引き続き表示および使用できる場合があります。ただし、新しい管理ユーザーポリシーを使用することと、(それが存在する場合は) カスタムポリシーを追加して、カスタムリソースにアクセス許可を付与することをお勧めします。

他のサービスとの統合に関するポリシー

また、必要に応じて、環境を他のサービスと統合することを許可する、より詳細なポリシーも指定します。

このポリシーは、環境が Amazon CloudWatch Logs ロググループを管理することを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCWL", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:DeleteLogGroup", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/elasticbeanstalk/*" } ] }

このポリシーは、環境が Amazon RDS インスタンスを統合することを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRDS", "Effect": "Allow", "Action": [ "rds:CreateDBSecurityGroup", "rds:DeleteDBSecurityGroup", "rds:AuthorizeDBSecurityGroupIngress", "rds:CreateDBInstance", "rds:ModifyDBInstance", "rds:DeleteDBInstance" ], "Resource": [ "arn:aws:rds:*:*:secgrp:awseb-e-*", "arn:aws:rds:*:*:db:*" ] } ] }

このポリシーは、ワーカー環境階層が Amazon DynamoDB テーブルと Amazon SQS キューを作成することを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSQS", "Effect": "Allow", "Action": [ "sqs:TagQueue", "sqs:DeleteQueue", "sqs:GetQueueAttributes", "sqs:CreateQueue" ], "Resource": "arn:aws:sqs:*:*:awseb-e-*" }, { "Sid": "AllowDDB", "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:TagResource", "dynamodb:DescribeTable", "dynamodb:DeleteTable" ], "Resource": "arn:aws:dynamodb:*:*:table/awseb-e-*" } ] }

このポリシーは、マルチコンテナ Docker 環境が Amazon ECS クラスターを管理することを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowECS", "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:DeleteCluster", "ecs:DeRegisterTaskDefinition", "ecs:RegisterTaskDefinition" ], "Resource": [ "*" ] }, { "Sid": "AllowECSTagResource", "Effect": "Allow", "Action": [ "ecs:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:CreateAction": [ "CreateCluster", "RegisterTaskDefinition" ] } } } ] }

このポリシーは、ウェブサービス環境のコアオペレーションを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TerminateInstances", "Effect": "Allow", "Action": [ "ec2:TerminateInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringLike": { "ec2:ResourceTag/aws:cloudformation:stack-id": "arn:aws:cloudformation:*:*:stack/awseb-e-*" } } }, { "Sid": "EC2", "Effect": "Allow", "Action": [ "ec2:ReleaseAddress", "ec2:AllocateAddress", "ec2:DisassociateAddress", "ec2:AssociateAddress", "ec2:CreateTags", "ec2:DeleteTags", "ec2:CreateSecurityGroup", "ec2:DeleteSecurityGroup", "ec2:AuthorizeSecurityGroup*", "ec2:RevokeSecurityGroup*", "ec2:CreateLaunchTemplate*", "ec2:DeleteLaunchTemplate*" ], "Resource": "*" }, { "Sid": "LTRunInstances", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:*:*:launch-template/*" } } }, { "Sid": "ASG", "Effect": "Allow", "Action": [ "autoscaling:AttachInstances", "autoscaling:*LoadBalancer*", "autoscaling:*AutoScalingGroup", "autoscaling:*LaunchConfiguration", "autoscaling:DeleteScheduledAction", "autoscaling:DetachInstances", "autoscaling:PutNotificationConfiguration", "autoscaling:PutScalingPolicy", "autoscaling:PutScheduledUpdateGroupAction", "autoscaling:ResumeProcesses", "autoscaling:SuspendProcesses", "autoscaling:*Tags" ], "Resource": [ "arn:aws:autoscaling:*:*:launchConfiguration:*:launchConfigurationName/awseb-e-*", "arn:aws:autoscaling:*:*:autoScalingGroup:*:autoScalingGroupName/awseb-e-*" ] }, { "Sid": "ASGPolicy", "Effect": "Allow", "Action": [ "autoscaling:DeletePolicy" ], "Resource": [ "*" ] }, { "Sid": "EBSLR", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": [ "arn:aws:iam::*:role/aws-service-role/elasticbeanstalk.amazonaws.com/AWSServiceRoleForElasticBeanstalk*" ], "Condition": { "StringLike": { "iam:AWSServiceName": "elasticbeanstalk.amazonaws.com" } } }, { "Sid": "S3Obj", "Effect": "Allow", "Action": [ "s3:Delete*", "s3:Get*", "s3:Put*" ], "Resource": [ "arn:aws:s3:::elasticbeanstalk-*/*", "arn:aws:s3:::elasticbeanstalk-env-resources-*/*" ] }, { "Sid": "S3Bucket", "Effect": "Allow", "Action": [ "s3:GetBucket*", "s3:ListBucket", "s3:PutBucketPolicy" ], "Resource": "arn:aws:s3:::elasticbeanstalk-*" }, { "Sid": "CFN", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:GetTemplate", "cloudformation:ListStackResources", "cloudformation:UpdateStack", "cloudformation:ContinueUpdateRollback", "cloudformation:CancelUpdateStack" ], "Resource": "arn:aws:cloudformation:*:*:stack/awseb-e-*" }, { "Sid": "CloudWatch", "Effect": "Allow", "Action": [ "cloudwatch:PutMetricAlarm", "cloudwatch:DeleteAlarms" ], "Resource": "arn:aws:cloudwatch:*:*:alarm:awseb-*" }, { "Sid": "ELB", "Effect": "Allow", "Action": [ "elasticloadbalancing:Create*", "elasticloadbalancing:Delete*", "elasticloadbalancing:Modify*", "elasticloadbalancing:RegisterTargets", "elasticloadbalancing:DeRegisterTargets", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:*Tags", "elasticloadbalancing:ConfigureHealthCheck", "elasticloadbalancing:SetRulePriorities", "elasticloadbalancing:SetLoadBalancerPoliciesOfListener" ], "Resource": [ "arn:aws:elasticloadbalancing:*:*:targetgroup/awseb-*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/awseb-*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/awseb-*/*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/awseb-*/*", "arn:aws:elasticloadbalancing:*:*:listener/awseb-*", "arn:aws:elasticloadbalancing:*:*:listener/app/awseb-*", "arn:aws:elasticloadbalancing:*:*:listener/net/awseb-*", "arn:aws:elasticloadbalancing:*:*:listener-rule/app/awseb-*/*/*/*" ] }, { "Sid": "ListAPIs", "Effect": "Allow", "Action": [ "autoscaling:Describe*", "cloudformation:Describe*", "logs:Describe*", "ec2:Describe*", "ecs:Describe*", "ecs:List*", "elasticloadbalancing:Describe*", "rds:Describe*", "sns:List*", "iam:List*", "acm:Describe*", "acm:List*" ], "Resource": "*" }, { "Sid": "AllowPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/aws-elasticbeanstalk-*", "Condition": { "StringEquals": { "iam:PassedToService": [ "elasticbeanstalk.amazonaws.com", "ec2.amazonaws.com", "autoscaling.amazonaws.com", "elasticloadbalancing.amazonaws.com", "ecs.amazonaws.com", "cloudformation.amazonaws.com" ] } } } ] }

このポリシーは、環境が Amazon SNS トピックの統合を有効にすることを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBeanstalkManageSNS", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:SetTopicAttributes", "sns:DeleteTopic" ], "Resource": [ "arn:aws:sns:*:*:ElasticBeanstalkNotifications-*" ] }, { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": "*" } ] }

管理ポリシーによるアクセスのコントロール

管理ポリシーにより、Elastic Beanstalk へのフルアクセスまたは読み取り専用アクセスを許可できます。Elastic Beanstalk は、新しい機能へのアクセスに追加の許可が必要になった場合に、これらのポリシーを自動的に更新します。

管理ポリシーを IAM ユーザーまたはグループに適用するには
  1. IAM コンソールの [Policies (ポリシー)] ページを開きます。

  2. 検索ボックスに「AWSElasticBeanstalk」と入力して、ポリシーを絞り込みます。

  3. ポリシーのリストで、[AWSElasticBeanstalkReadOnly] または [AdministratorAccess-AWSElasticBeanstalk] の横にあるチェックボックスをオンにします。

  4. [Policy actions] を選択して、[Attach] を選択します。

  5. ポリシーを添付するユーザーとグループを 1 つ以上選択します。[Filter] メニューと検索ボックスを使用して、プリンシパルエンティティのリストをフィルタリングできます。

  6. [ポリシーのアタッチ] を選択します。

カスタムユーザーポリシーの作成

独自の IAM ポリシーを作成して、特定の Elastic Beanstalk リソースに対する特定の Elastic Beanstalk API アクションを許可または拒否したり、Elastic Beanstalk で管理されていないカスタムリソースへのアクセスを制御したりできます。ユーザーまたはグループへのポリシーのアタッチについては、「IAM ユーザーガイド」の「ポリシーの使用」を参照してください。カスタムポリシーの作成の詳細については、「IAM ユーザーガイド」の「IAM ポリシーの作成」を参照してください。

注記

なお、現時点では、ユーザーによる Elastic Beanstalk API の使用方法は制限できますが、基盤となるリソースを作成するアクセス許可を持つユーザーが Amazon EC2 といったサービスで他のリソースを作成することを防ぐ効果的な方法はありません。

これらのポリシーを、すべての基盤となるリソースを確保する手段としてではなく、Elastic Beanstalk を配布する効果的な方法と考えてください。

2019 年 11 月、Elastic Beanstalk は Amazon EC2 起動テンプレートのサポートをリリースしました。これは、環境の Auto Scaling グループが Amazon EC2 インスタンスを起動するために使用できる新しいリソースタイプであり、新しいアクセス許可が必要です。ユーザーポリシーに必要なアクセス許可がない場合でも、環境ではレガシーリソース、起動設定を使用できるため、多くのお客様は影響を受けません。ただし、Amazon EC2 起動テンプレートを必要とする新しい機能を使用しようとしていて、カスタムポリシーがある場合、環境の作成または更新が失敗する可能性があります。この場合、カスタムポリシーに次のアクセス許可があることを確認してください。

Amazon EC2 起動テンプレートに必要なアクセス許可
  • EC2:CreateLaunchTemplate

  • EC2:CreateLaunchTemplateVersions

  • EC2:DeleteLaunchTemplate

  • EC2:DeleteLaunchTemplateVersions

  • EC2:DescribeLaunchTemplate

  • EC2:DescribeLaunchTemplateVersions

IAM ポリシーには、付与するアクセス許可を定義したポリシーステートメントが含まれています。Elastic Beanstalk のポリシーステートメントを作成する場合、ポリシーステートメントを構成する以下の 4 つの部分について、使い方を把握しておく必要があります。

  • 効果は、ステートメントのアクションを許可または拒否するかどうかを指定します。

  • アクションは、制御する API オペレーションを指定します。たとえば、elasticbeanstalk:CreateEnvironment を使用して CreateEnvironment オペレーションを指定します。環境の作成といった特定のオペレーションには、これらのアクションを実行するための追加の許可が必要となります。詳細については、「Elastic Beanstalk アクションのリソースと条件」を参照してください。

    注記

    UpdateTagsForResource API オペレーションを使用するには、API オペレーション名ではなく、2 つの仮想アクションのいずれか (または両方) を指定します。

    elasticbeanstalk:AddTags

    UpdateTagsForResource を呼び出し、追加するタグのリストを TagsToAdd パラメータで渡すアクセス許可を制御します。

    elasticbeanstalk:RemoveTags

    UpdateTagsForResource を呼び出し、削除するタグキーのリストを TagsToRemove パラメータで渡すアクセス許可を制御します。

  • リソースは、アクセスをコントロールする対象のリソースを指定します。Elastic Beanstalk リソースを指定するには、リソースの Amazon リソースネーム (ARN) のリストを指定します。

  • (オプション) 条件は、ステートメントで付与された許可に対する制限を指定します。詳細については、「Elastic Beanstalk アクションのリソースと条件」を参照してください。

以下のセクションでは、カスタムユーザーポリシーを考慮する可能性のあるいくつかのケースを示します。

制限付き Elastic Beanstalk 環境の作成の有効化

次のサンプルポリシーでは、このポリシーを添付されたユーザーは、CreateEnvironment アクションを呼び出し、指定されたアプリケーションとアプリケーションバージョンを使用して、名前が Test で始まる環境を作成できます。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"CreateEnvironmentPerm", "Action": [ "elasticbeanstalk:CreateEnvironment" ], "Effect": "Allow", "Resource": [ "arn:aws:elasticbeanstalk:us-east-2:123456789012:environment/My First Elastic Beanstalk Application/Test*" ], "Condition": { "StringEquals": { "elasticbeanstalk:InApplication": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My First Elastic Beanstalk Application"], "elasticbeanstalk:FromApplicationVersion": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:applicationversion/My First Elastic Beanstalk Application/First Release"] } } }, { "Sid":"AllNonResourceCalls", "Action":[ "elasticbeanstalk:CheckDNSAvailability", "elasticbeanstalk:CreateStorageLocation" ], "Effect":"Allow", "Resource":[ "*" ] } ] }

上記のポリシーは、Elastic Beanstalk オペレーションへの制限付きアクセスを許可する方法を示しています。実際に環境を起動するには、環境を動かすための AWS リソースを作成する許可もユーザーに付与されている必要があります。たとえば、次のポリシーはウェブサーバー環境の一連のデフォルトリソースへのアクセス権を付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*", "ecs:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "sqs:*" ], "Resource": "*" } ] }

Amazon S3 に保存されている Elastic Beanstalk ログへのアクセスの有効化

以下の例のポリシーでは、ユーザーは Elastic Beanstalk ログをプルし、Amazon S3 にステージングして、取得できます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:DeleteObject", "s3:GetObjectAcl", "s3:PutObjectAcl" ], "Effect": "Allow", "Resource": "arn:aws:s3:::elasticbeanstalk-*" } ] }
注記

これらのアクセス許可をログのパスのみに制限するには、次のリソース形式を使用します。

"arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/resources/environments/logs/*"

特定の Elastic Beanstalk アプリケーションの管理の有効化

以下のサンプルポリシーでは、ユーザーが 1 つの特定の Elastic Beanstalk アプリケーション内の環境およびその他のリソースを管理できるようにします。このポリシーは、他のアプリケーションのリソースに対する Elastic Beanstalk アクションを拒否し、Elastic Beanstalk アプリケーションの作成と削除も拒否します。

注記

このポリシーは、他のサービスを介したリソースへのアクセスを拒否しません。基盤となるリソースを確保する方法としてではなく、さまざまなユーザー間で Elastic Beanstalk アプリケーションを管理するための責任を分散する効果的な方法を示しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "elasticbeanstalk:CreateApplication", "elasticbeanstalk:DeleteApplication" ], "Resource": [ "*" ] }, { "Effect": "Deny", "Action": [ "elasticbeanstalk:CreateApplicationVersion", "elasticbeanstalk:CreateConfigurationTemplate", "elasticbeanstalk:CreateEnvironment", "elasticbeanstalk:DeleteApplicationVersion", "elasticbeanstalk:DeleteConfigurationTemplate", "elasticbeanstalk:DeleteEnvironmentConfiguration", "elasticbeanstalk:DescribeApplicationVersions", "elasticbeanstalk:DescribeConfigurationOptions", "elasticbeanstalk:DescribeConfigurationSettings", "elasticbeanstalk:DescribeEnvironmentResources", "elasticbeanstalk:DescribeEnvironments", "elasticbeanstalk:DescribeEvents", "elasticbeanstalk:DeleteEnvironmentConfiguration", "elasticbeanstalk:RebuildEnvironment", "elasticbeanstalk:RequestEnvironmentInfo", "elasticbeanstalk:RestartAppServer", "elasticbeanstalk:RetrieveEnvironmentInfo", "elasticbeanstalk:SwapEnvironmentCNAMEs", "elasticbeanstalk:TerminateEnvironment", "elasticbeanstalk:UpdateApplicationVersion", "elasticbeanstalk:UpdateConfigurationTemplate", "elasticbeanstalk:UpdateEnvironment", "elasticbeanstalk:RetrieveEnvironmentInfo", "elasticbeanstalk:ValidateConfigurationSettings" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "elasticbeanstalk:InApplication": [ "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/myapplication" ] } } } ] }