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"
}
ポリシーシミュレーターで実行しましたが、問題ないようです!
今日これをいじって、以下を取得しました。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"
}
]
}
私の場合(Go V2にはAWS SDKを使用しました)、両方が必要でしたssm:GetParametersByPath
およびssm:GetParameter
動作させる。
今日も同じエラーに遭遇しました。次のJavaコードは、_encrypted = false
_およびparamName
が暗号化されていないパラメーターを参照したときに発生しました
_ GetParameterRequest request = new GetParameterRequest()
.withName(paramName)
.withWithDecryption(encrypted);
GetParameterResult resultPacket = ssmClient.getParameter(request);
_
修正は、WithDecryption
フラグを設定せずに暗号化されていないパラメーターリクエストを作成することでした-GetParameterRequest request = new GetParameterRequest().withName(paramName);