amazon web services - que - AWS crea función-Tiene campo prohibido
que es amazon web services (2)
Estoy probando un ejemplo simple sugerido por la documentación de AWS para crear un rol usando un archivo json de políticas http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html Y recibo el error
A client error (MalformedPolicyDocument) occurred when calling the CreateRole operation: Has prohibited field Resource
Aquí está el comando,
>> aws iam create-role --role-name test-service-role --assume-role-policy-document file:///home/ec2-user/policy.json
A client error (MalformedPolicyDocument) occurred when calling the CreateRole operation: Has prohibited field Resource
La política es exactamente igual a la mencionada en el ejemplo.
>> cat policy.json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::example_bucket"
}
}
Mi versión parece estar al día.
>> aws --version
aws-cli/1.9.9 Python/2.7.10 Linux/4.1.10-17.31.amzn1.x86_64 botocore/1.3.9
El documento de política debe ser algo como:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
Esto se llama como documento de política de relación de confianza. Esto es diferente del documento de política. todo lo que haya pegado es para la política adjunta a una función que se realiza mediante la función adjuntar política .
Incluso el documento de rol anterior se encuentra en el enlace que ha pegado. Esto debería funcionar. He trabajado en roles y políticas y puedo decir con certeza.
Incluso en la consola aws, para los roles, puede ver que hay una pestaña separada para la relación de confianza. También ha adjuntado políticas en la pestaña de permisos.
El mensaje de AWS, Se produjo un error (MalformedPolicyDocument) al llamar a la operación CreateRole: esta política contiene Json no válido aparece si no usa la ruta de acceso completa. Por ejemplo, usando
--assume-role-policy-document myfile.json
o incluso un inexistente.file.json, causa el problema.
La solución es utilizar.
--assume-role-policy-document file://myfile.json
Aquí está el contenido de mi flujo de entrega de Kinesis Firehose
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "firehose.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}