J'essaie de créer un rôle IAM dans AWS, mais je suis confronté à une erreur lors de la création.
"Nous avons rencontré les erreurs suivantes lors du traitement de votre demande: Problème lors de l'attachement d'une autorisation au rôle. Le rôle sera créé sans autorisation. La stratégie a échoué lors de l'analyse syntaxique" "
{"Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Action": [
"sqs:SendMessage",
"sqs:GetQueueUrl"
],
"Effect": "Allow",
"Resource": "arn:aws:sqs:ap-northeast-1:SOME_ID_HERE:test-messages"
}]}
J'ai eu cette erreur et je ne pouvais pas le comprendre. Un collègue et moi avons parcouru la page, puis nous avons remarqué que j'avais laissé une variable de substitution sans le Fn::Sub
, par exemple.
"Resource": "arn:aws:logs::${AWS::AccountId}:*
causera cette erreur, et bien sûr devrait être
"Resource": { "Fn::Sub": "arn:aws:logs::${AWS::AccountId}:*" }
BTW, dans mon expérience, je suis d'accord avec E.J. Brennan ci-dessus, vous ne pouvez pas utiliser de caractère générique pour une région, laissez-le vide, comme je l'ai fait là-bas.
Les problèmes de cloudwatch Logs ARNS peuvent comporter 6: symboles car il y a un extra entre le groupe de journaux et le flux de journaux. Par exemple:
"Resource": "arn:aws:logs:us-west-2:123456789012:/my/log/group:log-stream"
ou pour votre cas:
"Resource": "arn:aws:logs:*:*:*:*
J'ai constaté que certains ARN tels que l'exemple plus spécifique ci-dessus donnent cette erreur si un 6ème: n'est pas ajouté. Je me rends compte que cela contredit la documentation (y compris la documentation fournie par E.J), donc c'est peut-être un bogue dans AWS quelque part.
http://docs.aws.Amazon.com/AmazonCloudWatch/latest/logs/iam-identity-based-access-control-cwl.html
Je ne pense pas que vous puissiez utiliser une région générique sur l'arn, alors vous aurez peut-être besoin de quelque chose comme ceci:
arn:aws:logs:us-east-1:*:*
, où vous spécifiez la région que vous utilisez à la place de us-east-1.
Plus d'informations ici:
http://docs.aws.Amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-cloudwatch-logs
Je penserais que tu pourrais faire
"Resource": "arn:aws:logs:us-west-2:123456789012:*"
mais si ce n'est pas le cas, vous pouvez mapper vos comptes sur la région avec un mappage:
"mAWSRegionToAccountsMap": {
"us-west-2": {
"prod": "444444444673",
"dev": "678333333333"
},
"us-gov-west-1": {
"dev": "12345678903",
"prod": "234345345345"
}
}
Intégrez ensuite le mappage dans une jointure en utilisant un ":" pour le délimiteur
"Resource": {
"Fn::Join": [
":",
[
"arn:aws:logs",
{
"Ref": "AWS::Region"
},
{
"Fn::FindInMap": [
"mAWSRegionToAccountsMap", {
"Ref": "AWS::Region"
},
"prod"
]
},
"/*"
]
]
}
Peut-être besoin de modifier la fin