web-dev-qa-db-ja.com

AWS Lambdaで役割を引き受け、SSM呼び出しでアクセスが拒否されました

SSMを呼び出すLambda関数でエラーが発生しています。

AccessDeniedException:ユーザー:arn:aws:sts :: redacted:assumed-role/LambdaBackend_master_lambda/SpikeLambdaは実行を許可されていません:リソースのssm:GetParameter:arn:aws:ssm:eu-west-1:redacted:parameter/default /キー/ API

しかし、私はこれを正しく設定したと確信しています:

ロール。LambdaのAssumeRoleを使用します(ただし、エラーメッセージから機能することがわかっています)。

λ 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"
    }
}

そして私のポリシー:

λ 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"
}

ポリシーシミュレーターで実行しましたが、問題ないようです!

AWS IAM policy sim

13
Oli

今日これをいじって、以下を取得しました。ssm:GetParametersからsをドロップし、ssm:GetParameterを使用すると、GetParameterアクションを使用するときに機能するようです。すなわちAWS_PROFILE=pstore aws ssm get-parameter --name param_name iamアクションドキュメントでこれをまったく見つけることができないため、これは少し奇妙に感じました here 。ただし、動作するように見え、ssmはまだ文書化されていません。

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

私の場合(Go V2にはAWS SDKを使用しました)、両方が必要でしたssm:GetParametersByPathおよびssm:GetParameter動作させる。

6
Ali

今日も同じエラーに遭遇しました。次のJavaコードは、_encrypted = false_およびparamNameが暗号化されていないパラメーターを参照したときに発生しました

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

修正は、WithDecryptionフラグを設定せずに暗号化されていないパラメーターリクエストを作成することでした-GetParameterRequest request = new GetParameterRequest().withName(paramName);

0
Ross Kerr