2016-11-06 12 views
6

Jestem nowicjuszem IAM w AWS. I chcę ograniczyć zapytanie dla różnych użytkowników tylko do wpisów w tabeli, w których klucz podstawowy pasuje do identyfikatora cognito. Aby to osiągnąć, stworzyłem zasadę:AWS IAM - Korzystanie z warunków

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "AllowAccessToOnlyItemsMatchingUserID", 
     "Effect": "Allow", 
     "Action": [ 
      "dynamodb:GetItem", 
      "dynamodb:BatchGetItem", 
      "dynamodb:Query", 
      "dynamodb:PutItem", 
      "dynamodb:UpdateItem", 
      "dynamodb:DeleteItem", 
      "dynamodb:BatchWriteItem" 
     ], 
     "Resource": [ 
      "arn:aws:dynamodb:us-east-1:XXXXXXXXXXX:table/User" 
     ], 
     "Condition": { 
      "ForAllValues:StringEquals": { 
       "dynamodb:LeadingKeys": [ 
        "${cognito-identity.amazonaws.com:sub}" 
       ] 
      } 
     } 
    } 
] 

}

Ale kiedy jestem odpytywanie tabeli przy użyciu Postman, jak pokazano poniżej:
enter image description here

otrzymuję następujący błąd:

"__type": "com.amazon.coral.service#AccessDeniedException", 


"Message": "User: arn:aws:sts::XXXXXXXXXXXXX:assumed-role/Achintest/BackplaneAssumeRoleSession is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:XXXXXXXXXXXXX:table/User" 

Czy ktoś może mi powiedzieć, jaki błąd robię?


======== ======== UPDATE

Próbowałem przy użyciu sim polityki, a ja jestem w stanie zrozumieć, dlaczego Query bez LeadingKey jak pokazano na rys poniżej jest dozwolone.

enter image description here

i kiedy zapewniają wiodącą klucza, to mówi zaprzeczyć. Patrz poniżej pic:

enter image description here

+0

Komunikat o błędzie jest całkiem jasny. Stwierdza, że ​​wywołujący użytkownik (np. 'Arn: aws: sts :: 049428796662: założony ...') nie ma uprawnień do wywołania procesu/mechanizmu 'dynamodb: Query' na zasobie:' arn: aws: dynamodb. ..'. – FDavidov

+0

Tak. Ale mój identyfikator cognito jest taki sam jak klucz podstawowy w tabeli. dlaczego pojawia się ten błąd pomimo prawidłowego podania wszystkich poświadczeń? – achin

+0

Nie mogę podać konkretnej odpowiedzi, ale domyślam się, że nie ma to nic wspólnego z poprawnością poświadczeń i ma to związek z ustawieniami bezpieczeństwa po stronie serwera (jest to dzikie domysły, ponieważ ja ". nie znam AWS). – FDavidov

Odpowiedz

0

To może zależeć od wniosku, że jesteś wydającego. Twoja zasada IAM używa numeru ForAllValues, który uwzględnia każdy klucz żądania. Twoje zasady mogą zwracać fałsz, jeśli jakiś klucz w twoim żądaniu nie pasuje do wartości warunku w wyniku.

Spróbuj użyć ForAnyValue i to może wystarczyć.

Aby uzyskać więcej informacji, zobacz here.

Powiązane problemy