Elastic Beanstalk インスタンスプロファイルの管理
インスタンスプロファイルは AWS Identity and Access Management (IAM) ロールのコンテナであり、インスタンスの起動時に Amazon EC2 インスタンスにロール情報を渡すために使用できます。Elastic Beanstalk コンソールまたは EB CLI を使用して環境を起動すると、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", "xray:GetSamplingRules", "xray:GetSamplingTargets", "xray:GetSamplingStatisticSummaries" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "CloudWatchLogsAccess", "Action": [ "logs:PutLogEvents", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:DescribeLogGroups" ], "Effect": "Allow", "Resource": [ "arn:aws:logs:*:*:log-group:/aws/elasticbeanstalk*" ] }, { "Sid": "ElasticBeanstalkHealthAccess", "Action": [ "elasticbeanstalk:PutInstanceStatistics" ], "Effect": "Allow", "Resource": [ "arn:aws:elasticbeanstalk:*:*:application/*", "arn:aws:elasticbeanstalk:*:*:environment/*" ] } ] }
-
AWSElasticBeanstalkWorkerTier - ログのアップロード、デバッグ、メトリクスのパブリッシュ、ワーカーインスタンスタスク (キュー管理やリーダー選択、定期的なタスクなど) に対するアクセス許可を付与します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MetricsAccess", "Action": [ "cloudwatch:PutMetricData" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "XRayAccess", "Action":[ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets", "xray:GetSamplingStatisticSummaries" ], "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*" ] }, { "Sid": "CloudWatchLogsAccess", "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Effect": "Allow", "Resource": [ "arn:aws:logs:*:*:log-group:/aws/elasticbeanstalk*" ] }, { "Sid": "ElasticBeanstalkHealthAccess", "Action": [ "elasticbeanstalk:PutInstanceStatistics" ], "Effect": "Allow", "Resource": [ "arn:aws:elasticbeanstalk:*:*:application/*", "arn:aws:elasticbeanstalk:*:*:environment/*" ] } ] }
-
AWSElasticBeanstalkMulticontainerDocker - クラスタータスクを調整するアクセス許可を Amazon Elastic 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*", "ecs:DescribeTasks" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ecs:TagResource", "Resource": "*", "Condition": { "StringEquals": { "ecs:CreateAction": [ "RegisterContainerInstance", "StartTask" ] } } } ] }
環境内の EC2 インスタンスが aws-elasticbeanstalk-ec2-role
ロールを引き受けるよう設定するため、インスタンスプロファイルは、以下のように信頼関係ポリシーで Amazon EC2 を信頼済みエンティティとして指定します。
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
アクセス権限をカスタマイズするには、デフォルトのインスタンスプロファイルにアタッチされたロールにポリシーを追加するか、権限が限定された独自のインスタンスプロファイルを作成します。
セクション
デフォルトのインスタンスプロファイルに割り当てられたアクセス許可を確認する
デフォルトのインスタンスプロファイルに割り当てられる権限は、作成日時、環境の最終起動日時、使用したクライアントにより異なります。デフォルトのインスタンスプロファイルに含まれるアクセス許可は IAM コンソールで確認できます。
デフォルトのインスタンスプロファイルのアクセス権限を確認する
-
IAM コンソールの [Roles (ロール)] ページ
を開きます。 -
aws-elasticbeanstalk-ec2-ロール を選択します。
-
[Permissions (アクセス許可)] タブで、ロールにアタッチされたポリシーのリストを確認します。
-
ポリシーにより付与されるアクセス権限を表示するには、ポリシーを選択します。
情報が古くなったデフォルトのインスタンスプロファイルを更新する
デフォルトのインスタンスプロファイルに必要なアクセス許可がない場合は、Elastic Beanstalk 環境マネジメントコンソールで新しい環境を作成し、そのプロファイルを更新します。
あるいは、デフォルトのインスタンスプロファイルにアタッチされたロールに管理ポリシーを手動で追加しても構いません。
デフォルトのインスタンスプロファイルにアタッチされたロールに管理ポリシーを追加するには
-
IAM コンソールの [Roles (ロール)] ページ
を開きます。 -
aws-elasticbeanstalk-ec2-ロール を選択します。
-
[Permissions (アクセス許可)] タブで、[Attach policy (ポリシーの添付)] を選択します。
-
ポリシーをフィルタリングするには、「
AWSElasticBeanstalk
」と入力します。 -
次のポリシーを指定し、[Attach policy (ポリシーのアタッチ)] を選択します。
-
AWSElasticBeanstalkWebTier
-
AWSElasticBeanstalkWorkerTier
-
AWSElasticBeanstalkMulticontainerDocker
-
デフォルトのインスタンスプロファイルにアクセス許可を追加する
デフォルトのインスタンスプロファイルでアクセス許可が付与されていない AWS API またはリソースにアプリケーションがアクセスする場合は、IAM コンソールでこれらのアクセス許可を付与するポリシーを追加します。
デフォルトのインスタンスプロファイルにアタッチされたロールにポリシーを追加するには
-
IAM コンソールの [Roles (ロール)] ページ
を開きます。 -
aws-elasticbeanstalk-ec2-ロール を選択します。
-
[Permissions (アクセス許可)] タブで、[Attach policy (ポリシーの添付)] を選択します。
-
アプリケーションで使用する追加サービスの管理ポリシーを選択します。例えば、
AmazonS3FullAccess
、AmazonDynamoDBFullAccess
などです。 -
[ポリシーのアタッチ] を選択します。
インスタンスプロファイルを作成する
インスタンスプロファイルは、EC2 インスタンスによるロールの引き受けを許可する標準 IAM ロールのラッパーです。異なるアプリケーションに対するアクセス権限をカスタマイズするには、追加のインスタンスプロファイルを作成します。これらの機能を使用しない場合は、ワーカー枠またはマルチコンテナ Docker 環境に対してアクセス権限を付与しないインスタンスプロファイルを作成してください。
インスタンスプロファイルを作成するには
-
IAM コンソールの [Roles (ロール)] ページ
を開きます。 -
[ロールの作成] を選択します。
-
[AWS service] (AWS サービス) で [EC2] を選択します。
-
[Next: Permissions] (次へ: 許可) を選択します。
-
Elastic Beanstalk により指定された適切な管理ポリシーや、アプリケーションで必要なアクセス許可を付与するその他のポリシーがあれば、それらもアタッチします。
-
[Next: Tags] (次へ: タグ) を選択します。
-
(オプション) ロールにタグを追加します。
-
[Next: Review] (次へ: レビュー) を選択します。
-
ロールの名前を入力します。
-
[Create role] (ロールの作成) を選択します。
Amazon Linux2 プラットフォームでのインスタンスプロファイル
Amazon Linux 2 プラットフォームでは、適切なオペレーションのためにインスタンスプロファイルが必要です。例えば、すべての Amazon Linux 2 プラットフォームバージョンでは、環境の作成中にデフォルトで拡張ヘルスが有効になります。インスタンスには、拡張ヘルス情報を収集してレポートするための適切なアクセス許可が必要です。