Elastic Beanstalk 사용자 또는 애플리케이션의 IAM 권한을 제한하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 5월 18일

새로운 Elastic Beanstalk 환경을 생성할 때 AWS Elastic Beanstalk 사용자 또는 애플리케이션의 AWS Identity and Access Management(IAM) 권한을 제한하려고 합니다.

간략한 설명

IAM 정책을 사용하여 IAM 사용자 또는 역할의 권한을 제한할 수 있습니다. 정책은 단일 환경 또는 애플리케이션에 대한 액세스를 제한할 수 있습니다.

다음 단원 중 하나의 단계를 완료합니다.

  • IAM 액세스를 단일 환경 또는 애플리케이션으로만 제한
  • Elastic Beanstalk 서비스에 대한 IAM 액세스만 제한

참고: IAM 정책을 결합하여 단일 애플리케이션에 대한 액세스를 제한하는 방법의 예는 관리형 정책 기반 정책 예제 또는 리소스 권한 기반 정책 예제를 참조하십시오.

해결 방법

IAM 액세스를 단일 환경 또는 애플리케이션으로만 제한

Elastic Beanstalk 환경 또는 애플리케이션에 대한 액세스를 제한하는 IAM 정책을 생성합니다.

다음 사항을 고려하십시오.

  • Elastic Beanstalk에서는 애플리케이션 구조가 구성 요소(예: 환경, 버전, 환경 구성)의 모음이기 때문에 애플리케이션에 대한 권한을 직접 제한할 수 없습니다. 하지만 작업, 리소스 및 조건 키를 사용하여 더 세분화된 수준에서 권한을 제한할 수 있습니다.
  • IAM 정책은 기본 리소스를 보호하는 효과적인 방법이 아닙니다. 예를 들어 적절한 IAM 정책을 사용하여 사용자가 Elastic Beanstalk API와 상호 작용하는 방법을 제한할 수 있습니다. 하지만 Elastic Beanstalk 권한이 있는 사용자가 Elastic Beanstalk와 관련이 없는 다른 AWS 서비스에서 리소스를 생성하지 못하도록 할 수는 없습니다.
  • Elastic Beanstalk와 통합되는 일부 리소스는 리소스 수준 권한을 지원하지 않습니다. 자세한 내용은 IAM으로 작업하는 AWS 서비스를 참조하십시오.

다음은 두 개의 Elastic Beanstalk 애플리케이션 App1App2에 대한 전체 액세스 권한을 부여하는 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 작업을 위한 리소스 및 조건을 참조하십시오.

Elastic Beanstalk 서비스에 대한 IAM 액세스만 제한

중요: 다음 단계는 새로운 Elastic Beanstalk 환경 또는 애플리케이션에만 적용됩니다.

  1. Elastic Beanstalk 환경 또는 애플리케이션을 위한 별도의 AWS 계정을 생성합니다.
  2. AWS Organizations를 사용하여 별도의 계정을 기본 AWS 계정에 연결합니다.

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?