Modelli di policy - AWS Identity and Access Management

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à.

Modelli di policy

I modelli di policy sono un nuovo costrutto IAM progettato per definire le autorizzazioni temporanee che i partner richiedono negli account dei clienti. Come le normali policy IAM, definiscono le autorizzazioni utilizzando istruzioni con elementi Effect, Action, Resource e Condition. La differenza principale è che i modelli di policy includono parametri (come @ {bucketName}) che vengono sostituiti con valori effettivi quando si crea una richiesta di delega.

Come funzionano i modelli di policy

Come parte del processo di onboarding, registri i tuoi modelli di polizza con. AWS AWS assegna a ogni modello un ARN univoco a cui si fa riferimento durante la creazione delle richieste di delega.

Quando si crea una richiesta di delega, si specifica:

  • Il modello di policy ARN

  • Valori dei parametri da sostituire nel modello

AWS combina il modello con i valori dei parametri per generare una policy IAM standard. I clienti esaminano questa politica finale renderizzata al momento dell'approvazione della richiesta di delega, per vedere esattamente quali autorizzazioni verranno concesse.

Nota

La politica renderizzata finale ha un limite di dimensione massima di 2048 caratteri.

Ecco un semplice esempio che mostra come funziona la sostituzione dei modelli.

Modello di policy:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::@{bucketName}/*" } ] }

Parametri forniti nella richiesta di delega:

{ "Name": "bucketName", "Values": ["customer-data-bucket"], "Type": "String" }

Politica finale visualizzata (cosa vedono i clienti):

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::customer-data-bucket/*" } ] }

Sintassi del modello

I modelli di policy utilizzano due funzionalità chiave per garantire flessibilità: la sostituzione dei parametri e le istruzioni condizionali. La sostituzione dei parametri consente di definire segnaposti nel modello che vengono sostituiti con valori effettivi durante la creazione di una richiesta di delega. Le istruzioni condizionali consentono di includere o escludere intere dichiarazioni di policy basate sui valori dei parametri.

Sostituzione e tipi di parametri

Utilizzate la sintassi @ {parameterName} per definire i parametri nel modello di policy. Quando si crea una richiesta di delega, è necessario specificare il tipo di ciascun parametro.

Stringa

Un singolo valore che viene sostituito direttamente nel modello.

Modello:

"Resource": "arn:aws:s3:::@{bucketName}/*"

Parametri:

{ "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }

Risultato renderizzato:

"Resource": "arn:aws:s3:::my-bucket/*"

StringList

Valori multipli che generano più voci di risorse. Quando un StringList parametro viene utilizzato in un ARN di risorse, si espande per creare voci di risorse separate per ogni valore.

Modello:

"Resource": "arn:aws:s3:::@{bucketNames}/*"

Parametri:

{ "Name": "bucketNames", "Values": ["bucket-1", "bucket-2"], "Type": "StringList" }

Risultato renderizzato:

"Resource": [ "arn:aws:s3:::bucket-1/*", "arn:aws:s3:::bucket-2/*" ]

Comportamento tra prodotti

Quando vengono utilizzati più parametri nella stessa risorsa ARN, StringList i parametri creano un prodotto incrociato di tutte le combinazioni.

Modello:

"Resource": "arn:aws:s3:::@{bucketNames}/@{prefix}/*"

Parametri:

[ { "Name": "bucketNames", "Values": ["bucket-1", "bucket-2"], "Type": "StringList" }, { "Name": "prefix", "Values": ["data"], "Type": "String" } ]

Risultato renderizzato:

"Resource": [ "arn:aws:s3:::bucket-1/data/*", "arn:aws:s3:::bucket-2/data/*" ]

Dichiarazioni condizionali

Utilizzate la direttiva @Enabled per includere o escludere in modo condizionale intere istruzioni basate sui valori dei parametri.

Sintassi:

  • @Enabled: «ParameterName» - Include l'istruzione quando il valore del parametro è «True»

  • @Enabled: «! ParameterName» - Include l'istruzione quando il valore del parametro NON è «True» (negazione)

Modello:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" }, { "@Enabled": "ENABLE_S3_WRITE", "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::@{bucketName}/*" } ] }

Parametri (quando ENABLE_S3_WRITE è «True»):

[ { "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }, { "Name": "ENABLE_S3_WRITE", "Values": ["True"], "Type": "String" } ]

Risultato renderizzato:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" }, { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::my-bucket/*" } ] }

Parametri (quando ENABLE_S3_WRITE è «False»):

[ { "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }, { "Name": "ENABLE_S3_WRITE", "Values": ["False"], "Type": "String" } ]

Risultato renderizzato:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" } ] }

Quando ENABLE_S3_WRITE è impostato su «True», viene inclusa l'istruzione condizionale. Quando è impostata su «False», l'istruzione viene esclusa dalla politica renderizzata.

Esempi aggiuntivi

Gli esempi seguenti mostrano modelli comuni per l'utilizzo dei modelli di policy nella delega temporanea. Si concentrano sulla creazione di ruoli IAM con limiti di autorizzazione per l'accesso a lungo termine e mostrano diverse strategie per l'ambito delle autorizzazioni a risorse specifiche. Questi esempi illustrano come bilanciare flessibilità e sicurezza utilizzando tecniche come prefissi ARN, codifica delle risorse e aggiornamenti dei limiti delle autorizzazioni.

Esempio 1: concessione dell'accesso a lungo termine a risorse specifiche

Il seguente limite di autorizzazione viene inviato come "SQSAccessorLimite» per «partner.com»:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }
Nota

Ciò include la condizione dello stesso account per evitare di concedere l'accesso alle code di altri account con politiche relative alle risorse aperte. Non è possibile includere un riferimento diretto all'ID dell'account del cliente perché il limite è condiviso tra tutti i clienti e non può essere modellato.

Poiché questa è la prima versione di questa politica, il suo ARN è arn:aws:iam: :partner: _20250115 policy/partner.com/SQSAccessorBoundary

Il seguente modello di policy viene inviato per le autorizzazioni di accesso temporanee:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ListQueues" ], "Resource": "arn:aws:sqs:*:*:*" }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/partner.com/SQSAccessorBoundary_20250115" } } } ] }

Esempio 2: utilizzo dei prefissi ARN

Il limite di autorizzazione può specificare un prefisso ARN della risorsa per limitare l'accesso:

"Resource": "arn:aws:sqs:*:@{AccountId}:PartnerPrefix*"

Ciò limita l'accesso solo alle risorse con quel prefisso, riducendo l'ambito delle risorse accessibili.

Esempio 3: utilizzo dei tag per il controllo dell'accesso alle risorse

È possibile etichettare le risorse durante l'accesso delegato temporaneo e fare affidamento su tali tag per il controllo degli accessi a lungo termine.

Limite di autorizzazione che consente l'accesso alle risorse contrassegnate:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "Null": { "aws:ResourceTag/ManagedByPartnerDotCom": "false" }, "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }

Modello di policy per etichettare nuove code al momento della creazione:

{ "Effect": "Allow", "Action": [ "sqs:CreateQueue", "sqs:TagQueue" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "Null": { "aws:RequestTag/ManagedByPartnerDotCom": "false" } } }

Modello di policy per etichettare le code preesistenti e creare il ruolo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:TagQueue" ], "Resource": "arn:aws:sqs:*:@{AccountId}:@{QueueName}", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": "ManagedByPartnerDotCom" } } }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/partner.com/SQSAccessorBoundary_20250115" } } } ] }

Questo approccio consente ai clienti di confermare esplicitamente a quali risorse specifiche è possibile accedere a lungo termine.

Esempio 4: aggiornamento del limite di autorizzazione

Per aggiornare un limite di autorizzazione, registra una nuova versione con un nuovo suffisso di data e richiedi l'autorizzazione per sostituirlo.

Limite di autorizzazione aggiornato con autorizzazioni aggiuntive:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:PurgeQueue", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }

Come seconda versione, questa politica ha l'ARN: arn:aws:iam: :partner: _2025_01_20 policy/partner.com/SQSAccessorBoundary

Modello di policy per aggiornare il limite di autorizzazione sul ruolo esistente:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PutRolePermissionsBoundary" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/partner.com/SQSAccessorBoundary_2025_01_20" } } } ] }

I clienti devono approvare questa richiesta di delega per aggiornare il limite di autorizzazione sul ruolo esistente.