Comment limiter les autorisations IAM d'un utilisateur ou d’une application Elastic Beanstalk ?

Date de la dernière mise à jour : 18/05/2020

Je souhaite limiter les autorisations AWS Identity and Access Management (IAM) d'un utilisateur ou d’une application AWS Elastic Beanstalk lorsque je crée un environnement Elastic Beanstalk.

Brève description

Vous pouvez restreindre les autorisations d'un utilisateur ou d'un rôle IAM à l'aide d'une stratégie IAM. La stratégie peut restreindre l'accès à un seul environnement ou à une seule application.

Suivez les étapes décrites dans l'une des sections ci-dessous :

  • Restreindre l'accès IAM à un seul environnement ou à une seule application
  • Restreindre l'accès IAM au service Elastic Beanstalk uniquement

Remarque : Pour obtenir un exemple de combinaison de stratégies IAM afin de limiter l'accès à une seule application, consultez Exemples de stratégies basées sur des stratégies gérées ou Exemples de stratégies basées sur des autorisations de ressources.

Solution

Restreindre l'accès IAM à un seul environnement ou à une seule application

Créez une stratégie IAM qui restreint l'accès à votre environnement ou application Elastic Beanstalk.

Tenez compte des éléments suivants :

  • Dans Elastic Beanstalk, vous ne pouvez pas limiter directement les autorisations à votre application car sa structure est un ensemble de composants (tels que des environnements, des versions et des configurations d'environnement). Cependant, vous pouvez restreindre les autorisations à un niveau plus précis à l'aide d'actions, de ressources et de clés de condition.
  • Les stratégies IAM ne permettent pas de sécuriser les ressources sous-jacentes de manière efficace. Par exemple, vous pouvez limiter les interactions des utilisateurs avec les API Elastic Beanstalk à l'aide de la stratégie IAM appropriée, mais vous ne pouvez pas empêcher les utilisateurs disposant d'autorisations Elastic Beanstalk de créer des ressources dans d'autres services AWS qui ne sont pas liés à Elastic Beanstalk.
  • Certaines des ressources intégrées par Elastic Beanstalk ne prennent pas en charge les autorisations au niveau des ressources. Pour plus d'informations, consultez la rubrique Services AWS qui fonctionnent avec IAM.

Consultez l'exemple suivant de stratégie IAM qui accorde un accès complet à deux applications Elastic Beanstalk, App1 et App2 :

{
    "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"]
                }
            }
        }
    ]
}

Important : Si vous n'utilisez pas le profil d'instance et le rôle de service Elastic Beanstalk par défaut, mettez à jour la stratégie IAM précédente avec votre rôle de service personnalisé et votre profil d'instance.

Pour plus d'informations sur la limitation de l'accès aux applications Elastic Beanstalk, consultez Ressources et conditions pour les actions Elastic Beanstalk.

Restreindre l'accès IAM au service Elastic Beanstalk uniquement

Important : les étapes suivantes s'appliquent uniquement aux nouveaux environnements ou applications Elastic Beanstalk.

  1. Créez un compte AWS distinct pour votre environnement ou application Elastic Beanstalk.
  2. Connectez le compte distinct à votre compte AWS principal à l'aide d'AWS Organizations.

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?