Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Si supponga di avere ambienti separati in cui ogni ambiente mantiene la propria versione di una tabella denominata ProductCatalog
. Se crei due ProductCatalog
tabelle nello stesso AWS account, lavorare in un ambiente potrebbe influire sull'altro ambiente a causa del modo in cui sono impostate le autorizzazioni. Ad esempio, le quote sul numero di operazioni simultanee del piano di controllo (ad esempioCreateTable
) vengono impostate a livello di account. AWS
Di conseguenza, ogni operazione in un ambiente riduce il numero di operazioni disponibili nell'altro ambiente. Vi è, inoltre, il rischio che il codice in un ambiente possa accedere per errore alle tabelle nell'altro ambiente.
Nota
Se desideri separare i carichi di lavoro di produzione e di test per controllare il potenziale "raggio di esplosione" di un evento, la best practice consiste nel creare account AWS separati per i carichi di lavoro di test e produzione. Per ulteriori informazioni, consulta Gestione e separazione degli account AWS.
Si supponga di avere due sviluppatori, Amit e Alice, che stanno eseguendo il test della tabella ProductCatalog
. Invece di richiedere a ogni sviluppatore un AWS account separato, i tuoi sviluppatori possono condividere lo stesso account di test AWS . In questo account di test puoi creare per ogni sviluppatore una copia della stessa tabella su cui lavorare, ad esempio Alice_ProductCatalog
e Amit_ProductCatalog
. In questo caso, puoi creare gli utenti Alice e Amit nell' AWS account che hai creato per l'ambiente di test. È quindi possibile concedere a questi utenti le autorizzazioni per eseguire le operazioni DynamoDB sulle tabelle di loro proprietà.
Per concedere queste autorizzazioni utente IAM, è possibile completare una delle operazioni seguenti:
-
Crea una policy separata per ogni utente e quindi collegare separatamente ogni policy al proprio utente. Ad esempio, è possibile collegare la seguente policy all'utente Alice per consentire l'accesso a tutte le operazioni DynamoDB sulla tabella
Alice_ProductCatalog
:{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllAPIActionsOnAliceTable", "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:DescribeContributorInsights", "dynamodb:RestoreTableToPointInTime", "dynamodb:ListTagsOfResource", "dynamodb:CreateTableReplica", "dynamodb:UpdateContributorInsights", "dynamodb:CreateBackup", "dynamodb:DeleteTable", "dynamodb:UpdateTableReplicaAutoScaling", "dynamodb:UpdateContinuousBackups", "dynamodb:TagResource", "dynamodb:DescribeTable", "dynamodb:GetItem", "dynamodb:DescribeContinuousBackups", "dynamodb:BatchGetItem", "dynamodb:UpdateTimeToLive", "dynamodb:BatchWriteItem", "dynamodb:ConditionCheckItem", "dynamodb:UntagResource", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "dynamodb:DeleteTableReplica", "dynamodb:DescribeTimeToLive", "dynamodb:RestoreTableFromBackup", "dynamodb:UpdateTable", "dynamodb:DescribeTableReplicaAutoScaling", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:DescribeLimits", "dynamodb:ListStreams" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Alice_ProductCatalog/*" } ] }
Quindi, è possibile creare una policy simile con una risorsa diversa (la tabella
Amit_ProductCatalog
) per l'utente Amit. -
Invece di collegare le policy ai singoli utenti, puoi utilizzare variabili di policy IAM per scrivere un'unica policy e collegarla a un gruppo. È necessario creare un gruppo e, per questo esempio, aggiungervi entrambi gli utenti Alice e Amit. Nel seguente esempio vengono concesse le autorizzazioni per eseguire tutte le operazioni DynamoDB sulla tabella
${aws:username}_ProductCatalog
. Quando la policy viene valutata, la variabile${aws:username}
viene sostituita dal nome utente del richiedente. Ad esempio, se Alice invia una richiesta di aggiunta di un item, l'operazione è consentita solo se l'item viene aggiunto alla tabellaAlice_ProductCatalog
.{ "Version": "2012-10-17", "Statement": [ { "Sid": "ActionsOnUserSpecificTable", "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:ConditionCheckItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_ProductCatalog" }, { "Sid": "AdditionalPrivileges", "Effect": "Allow", "Action": [ "dynamodb:ListTables", "dynamodb:DescribeTable", "dynamodb:DescribeContributorInsights" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/*" } ] }
Nota
Quando si utilizzano le variabili di policy IAM, è necessario specificare esplicitamente la versione 2012-10-17
del linguaggio di policy IAM nella policy. La versione predefinita del linguaggio di policy IAM (2008-10-17
) non supporta le variabili di policy.
Invece di identificare una tabella specifica come risorsa come si farebbe normalmente, è possibile utilizzare un carattere jolly (*) per concedere le autorizzazioni su tutte le tabelle il cui nome abbia il prefisso del nome dell'utente che sta effettuando la richiesta, come mostrato di seguito:
"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"