web-dev-qa-db-fra.com

Rôle supposé dans AWS Lambda, accès refusé lors d'un appel SSM

Je reçois une erreur dans ma fonction Lambda, qui appelle SSM:

AccessDeniedException: utilisateur: arn: aws: sts :: redaged: assume-role/LambdaBackend_master_lambda/SpikeLambda n'est pas autorisé à effectuer: ssm: GetParameter on resource: arn: aws: ssm: eu-west-1: caviardé: paramètre/par défaut/clé/api

Cependant, je suis presque sûr d'avoir configuré cela correctement:

Rôle, avec AssumeRole pour Lambda (bien que nous sachions que cela fonctionne à partir du message d'erreur).

λ aws iam get-role --role-name LambdaBackend_master_lambda
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "lambda.amazonaws.com"
                    }
                }
            ]
        },
        "RoleId": "redacted",
        "CreateDate": "2017-06-23T20:49:37Z",
        "RoleName": "LambdaBackend_master_lambda",
        "Path": "/",
        "Arn": "arn:aws:iam::redacted:role/LambdaBackend_master_lambda"
    }
}

Et ma politique:

λ aws iam list-role-policies --role-name LambdaBackend_master_lambda
{
    "PolicyNames": [
        "ssm_read"
    ]
}
λ aws iam get-role-policy --role-name LambdaBackend_master_lambda --policy-name ssm_read
{
    "RoleName": "LambdaBackend_master_lambda",
    "PolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ssm:DescribeParameters"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "ssm:GetParameters"
                ],
                "Resource": "arn:aws:ssm:eu-west-1:redacted:parameter/*",
                "Effect": "Allow"
            }
        ]
    },
    "PolicyName": "ssm_read"
}

Je l'ai fait passer par le simulateur de politique et ça semble bien!

AWS IAM policy sim

13
Oli

Joué avec cela aujourd'hui et obtenu ce qui suit, en supprimant le s de ssm:GetParameters et en utilisant ssm:GetParameter semble fonctionner lors de l'utilisation de l'action GetParameter. c'est à dire AWS_PROFILE=pstore aws ssm get-parameter --name param_name Cela m'a un peu dérangé parce que je ne trouve rien du tout dans les documents d'action iam ici . Cependant, cela semble fonctionner, et ssm est encore un peu sous-documenté.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ssm:DescribeParameters"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ssm:GetParameter"
            ],
            "Resource": "arn:aws:ssm:eu-west-1:redacted:parameter/*",
            "Effect": "Allow"
        }
    ]
}
22
jeffrey

Dans mon cas (j'ai utilisé AWS SDK pour Go V2), j'avais besoin des deux ssm:GetParametersByPath et ssm:GetParameter pour le faire fonctionner.

6
Ali

Ran dans la même erreur aujourd'hui. Le code Java Java l'a provoqué lorsque encrypted = false Et paramName ont fait référence à un paramètre non chiffré

    GetParameterRequest request = new GetParameterRequest()
        .withName(paramName)
        .withWithDecryption(encrypted);
    GetParameterResult resultPacket = ssmClient.getParameter(request);

Le correctif consistait à créer la demande de paramètre non chiffrée sans définir l'indicateur WithDecryption - GetParameterRequest request = new GetParameterRequest().withName(paramName);

0
Ross Kerr