Elastic Beanstalk のユーザーやアプリケーションの IAM 許可を制限する方法を教えてください。
最終更新日: 2020 年 5 月 18 日
新しい Elastic Beanstalk 環境を作成するにあたり、AWS Elastic Beanstalk のユーザーやアプリケーションの AWS Identity and Access Management (IAM) 許可を制限したいと考えています。
簡単な説明
IAM ポリシーを使用して、IAM ユーザーまたはロールの許可を制限できます。このポリシーでは、1 つの環境またはアプリケーションへのアクセスを制限できます。
以下のいずれかのセクションの手順を完了してください。
- IAM アクセスを 1 つの環境またはアプリケーションのみに制限する
- IAM アクセスを Elastic Beanstalk サービスのみに制限する
注意: IAM ポリシーを組み合わせて 1 つのアプリケーションへのアクセスを制限する方法の例については、「管理ポリシーに基づくポリシーの例」または「リソースに対するアクセス許可に基づいたポリシーの例」を参照してください。
解決方法
IAM アクセスを 1 つの環境またはアプリケーションのみに制限する
Elastic Beanstalk 環境またはアプリケーションへのアクセスを制限するIAM ポリシーを作成します。
以下の点を考慮してください。
- Elastic Beanstalk では、アプリケーションの構造がコンポーネント (環境、バージョン、環境設定など) のコレクションであるため、アプリケーションへのアクセス許可を直接制限することはできません。ただし、アクション、リソース、条件キーを使用して、より詳細なレベルでアクセス許可を制限できます。
- IAM ポリシーは、基盤となるリソースを保護する方法としては効果的ではありません。たとえば、適切な IAM ポリシーを使用して、ユーザーが Elastic Beanstalk API を操作する方法を制限できます。しかし、Elastic Beanstalk アクセス許可を持つユーザーが、Elastic Beanstalk とは無関係の他の AWS サービスでリソースを作成できないようにすることはできません。
- Elastic Beanstalk が統合するリソースの中には、リソースレベルのアクセス許可をサポートしていないものがあります。詳細については、「IAM と連携する AWS のサービス」をご参照ください。
以下に示すのは、2 つの Elastic Beanstalk アプリケーション (App1 と App2) へのフルアクセスを許可する IAM ポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:UpdateApplicationVersion",
"elasticbeanstalk:CreateApplicationVersion",
"elasticbeanstalk:DeleteApplicationVersion"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"elasticbeanstalk:InApplication": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App2"]
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:DescribeAccountAttributes",
"elasticbeanstalk:AbortEnvironmentUpdate",
"elasticbeanstalk:TerminateEnvironment",
"rds:*",
"elasticbeanstalk:ValidateConfigurationSettings",
"elasticbeanstalk:CheckDNSAvailability",
"autoscaling:*",
"elasticbeanstalk:RequestEnvironmentInfo",
"elasticbeanstalk:RebuildEnvironment",
"elasticbeanstalk:DescribeInstancesHealth",
"elasticbeanstalk:DescribeEnvironmentHealth",
"sns:*",
"elasticbeanstalk:RestartAppServer",
"s3:*",
"cloudformation:*",
"elasticloadbalancing:*",
"elasticbeanstalk:CreateStorageLocation",
"elasticbeanstalk:DescribeEnvironmentManagedActions",
"elasticbeanstalk:SwapEnvironmentCNAMEs",
"elasticbeanstalk:DescribeConfigurationOptions",
"elasticbeanstalk:ApplyEnvironmentManagedAction",
"cloudwatch:*",
"elasticbeanstalk:CreateEnvironment",
"elasticbeanstalk:List*",
"elasticbeanstalk:DeleteEnvironmentConfiguration",
"elasticbeanstalk:UpdateEnvironment",
"ec2:*",
"elasticbeanstalk:RetrieveEnvironmentInfo",
"elasticbeanstalk:DescribeConfigurationSettings",
"sqs:*",
"dynamodb:CreateTable",
"dynamodb:DescribeTable"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:*"
],
"Resource": [
"arn:aws:iam::123456789012:role/aws-elasticbeanstalk-ec2-role",
"arn:aws:iam::123456789012:role/aws-elasticbeanstalk-service-role",
"arn:aws:iam::123456789012:instance-profile/aws-elasticbeanstalk-ec2-role"
]
},
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:DescribeEvents",
"elasticbeanstalk:DescribeApplications",
"elasticbeanstalk:AddTags",
"elasticbeanstalk:ListPlatformVersions"
],
"Resource": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App2"]
},
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:AddTags",
"elasticbeanstalk:Describe*"
],
"Resource": [
"arn:aws:elasticbeanstalk:*::platform/*",
"arn:aws:elasticbeanstalk:*:*:environment/*/*",
"arn:aws:elasticbeanstalk:*:*:application/*",
"arn:aws:elasticbeanstalk:*::solutionstack/*",
"arn:aws:elasticbeanstalk:*:*:applicationversion/*/*",
"arn:aws:elasticbeanstalk:*:*:configurationtemplate/*/*"
],
"Condition": {
"StringEquals": {
"elasticbeanstalk:InApplication": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App2"]
}
}
}
]
}
重要: デフォルトの Elastic Beanstalk サービスロールとインスタンスプロファイルを使用していない場合は、独自のカスタムサービスロールとインスタンスプロファイルを使用して前述の IAM ポリシーを更新してください。
Elastic Beanstalk アプリケーションへのアクセスを制限する方法の詳細については、「Elastic Beanstalk アクションのリソースと条件」を参照してください。
IAM アクセスを Elastic Beanstalk サービスのみに制限する
重要: 次の手順は、新しい Elastic Beanstalk 環境またはアプリケーションにのみ適用されます。
- Elastic Beanstalk 環境またはアプリケーション用に、別の AWS アカウントを作成します。
- AWS Organizations を使用して、別のアカウントをメインの AWS アカウントに接続します。