Esempi di policy basate su identità di Amazon API Gateway - Amazon API Gateway

Esempi di policy basate su identità di Amazon API Gateway

Per impostazione predefinita, gli utenti e i ruoli IAM non dispongono dell'autorizzazione per creare o modificare le risorse di API Gateway. Inoltre, non sono in grado di eseguire attività utilizzando la AWS Management Console, AWS CLI o gli SDK AWS. Un amministratore IAM deve creare policy IAM che concedono a utenti e ruoli l'autorizzazione per eseguire operazioni API specifiche sulle risorse specificate di cui hanno bisogno. L'amministratore devi quindi collegare queste policy a utenti o IAM che richiedono tali autorizzazioni.

Per informazioni sulla creazione di policy IAM, consulta Creazione di policy nella scheda JSON della Guida per l'utente di IAM. Per informazioni sulle operazioni, le risorse e le condizioni specifiche di API Gateway, consulta Operazioni, risorse e chiavi di condizione per Amazon API Gateway Management e Operazioni, risorse e chiavi di condizione per Amazon API Gateway Management V2.

Best practice per le policy

Le policy basate su identità determinano se qualcuno può creare, accedere o eliminare risorse API Gateway nell'account. Queste azioni possono comportare costi aggiuntivi per l'Account AWS. Quando crei o modifichi policy basate su identità, segui queste linee guida e raccomandazioni:

  • Nozioni di base sulle policy gestite da AWSe passaggio alle autorizzazioni con privilegio minimo: per le informazioni di base su come concedere autorizzazioni a utenti e carichi di lavoro, utilizza le policy gestite da AWSche concedono le autorizzazioni per molti casi d'uso comuni. Sono disponibili nel tuo Account AWS. Ti consigliamo pertanto di ridurre ulteriormente le autorizzazioni definendo policy gestite dal cliente di AWS specifiche per i tuoi casi d'uso. Per ulteriori informazioni, consulta Policy gestite da AWSo Policy gestite da AWSper le funzioni dei processi nella Guida per l'utente IAM.

  • Applica le autorizzazioni con privilegio minimo: quando imposti le autorizzazioni con le policy IAM, concedi solo le autorizzazioni richieste per eseguire un'attività. Puoi farlo definendo le azioni che possono essere intraprese su risorse specifiche in condizioni specifiche, note anche come autorizzazioni con privilegi minimi. Per ulteriori informazioni sull'utilizzo di IAM per applicare le autorizzazioni, consulta Policy e autorizzazioni in IAM nella Guida per l'utente IAM.

  • Condizioni d'uso nelle policy IAM per limitare ulteriormente l'accesso: per limitare l'accesso a operazioni e risorse puoi aggiungere una condizione alle tue policy. Ad esempio, è possibile scrivere una condizione di policy per specificare che tutte le richieste devono essere inviate utilizzando SSL. Puoi inoltre utilizzare le condizioni per concedere l'accesso alle operazioni di servizio, ma solo se vengono utilizzate tramite uno specifico Servizio AWS, ad esempio AWS CloudFormation. Per ulteriori informazioni, consulta la sezione Elementi delle policy JSON di IAM: condizione nella Guida per l'utente IAM.

  • Utilizzo di IAM Access Analyzer per convalidare le policy IAM e garantire autorizzazioni sicure e funzionali: IAM Access Analyzer convalida le policy nuove ed esistenti in modo che aderiscano alla sintassi della policy IAM (JSON) e alle best practice di IAM. IAM Access Analyzer offre oltre 100 controlli delle policy e consigli utili per creare policy sicure e funzionali. Per ulteriori informazioni, consulta Convalida delle policy per il Sistema di analisi degli accessi AWS IAM nella Guida per l'utente IAM.

  • Richiesta dell'autenticazione a più fattori (MFA): se hai uno scenario che richiede utenti IAM o utenti root nel tuo Account AWS, attiva MFA per una maggiore sicurezza. Per richiedere la MFA quando vengono chiamate le operazioni API, aggiungi le condizioni MFA alle policy. Per ulteriori informazioni, consulta Protezione dell'accesso API con MFA nella Guida per l'utente IAM.

Per maggiori informazioni sulle best practice in IAM, consulta Best practice di sicurezza in IAM nella Guida per l'utente di IAM.

Consentire agli utenti di visualizzare le loro autorizzazioni

Questo esempio mostra in che modo è possibile creare una policy che consente agli utenti IAM di visualizzare le policy inline e gestite che sono cpllegate alla relativa identità utente. Questa policy include le autorizzazioni per completare questa operazione sulla console o a livello di codice utilizzando AWS CLI o l'API AWS.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

Autorizzazioni di lettura semplici

Questa policy di esempio consente a un utente di ottenere informazioni su tutte le risorse di un'API HTTP o WebSocket con l'identificatore di a123456789 nella Regione AWS us-east-1. La risorsa arn:aws:apigateway:us-east-1::/apis/a123456789/* include tutte le risorse secondarie dell'API, ad esempio autorizzatori e distribuzioni.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:GET" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis/a123456789/*" ] } ] }

Creare solo autorizzatori REQUEST o JWT

Questa policy di esempio consente a un utente di creare API solo con autori di autorizzatori REQUEST o JWT, anche tramite l'importazione. Nella sezione Resource della policy, arn:aws:apigateway:us-east-1::/apis/?????????? richiede che le risorse abbiano un massimo di 10 caratteri, che escludono le risorse secondarie di un'API. Questo esempio utilizza ForAllValues nella sezione Condition perché gli utenti possono creare più autorizzatori contemporaneamente importando un'API.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "OnlyAllowSomeAuthorizerTypes", "Effect": "Allow", "Action": [ "apigateway:PUT", "apigateway:POST", "apigateway:PATCH" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/??????????", "arn:aws:apigateway:us-east-1::/apis/*/authorizers", "arn:aws:apigateway:us-east-1::/apis/*/authorizers/*" ], "Condition": { "ForAllValues:StringEqualsIfExists": { "apigateway:Request/AuthorizerType": [ "REQUEST", "JWT" ] } } } ] }

Richiedere che l'endpoint predefinito execute-api sia disabilitato

Questa policy di esempio consente agli utenti di creare, aggiornare o importare un'API, con il requisito che DisableExecuteApiEndpoint sia true. Quando DisableExecuteApiEndpoint è true, i client non possono utilizzare l'endpoint execute-api predefinito per richiamare un'API.

Usiamo la condizione BoolIfExists per gestire una chiamata per aggiornare un'API che non ha la chiave di condizione DisableExecuteApiEndpoint popolata. Quando un utente tenta di creare o importare un'API, la chiave di condizione DisableExecuteApiEndpoint viene sempre popolata.

Poiché la risorsa apis/* acquisisce anche risorse secondarie come autorizzatori o metodi, è esplicitamente mirata solo alle API con un'istruzione Deny.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DisableExecuteApiEndpoint", "Effect": "Allow", "Action": [ "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/*" ], "Condition": { "BoolIfExists": { "apigateway:Request/DisableExecuteApiEndpoint": true } } }, { "Sid": "ScopeDownToJustApis", "Effect": "Deny", "Action": [ "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis/*/*" ] } ] }

Consentire agli utenti di creare o aggiornare solo API REST private

Questa policy di esempio utilizza delle chiavi di condizione richiesta per richiedere che un utente crei solo API PRIVATE e per impedire gli aggiornamenti che potrebbero modificare un'API da PRIVATE a un altro tipo, ad esempio REGIONAL.

Utilizziamo ForAllValues per richiedere che ogni EndpointType aggiunto a un'API sia PRIVATE. Utilizziamo una chiave di condizione delle risorse per consentire qualsiasi aggiornamento a un'API fino a quando è PRIVATE. ForAllValues si applica soltanto quando è presente una chiave di condizione.

Usiamo il matcher non avido (?) per abbinare esplicitamente gli ID API al fine di evitare di consentire risorse non API come autorizzatori.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ScopePutToPrivateApis", "Effect": "Allow", "Action": [ "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis", "arn:aws:apigateway:us-east-1::/restapis/??????????" ], "Condition": { "ForAllValues:StringEquals": { "apigateway:Resource/EndpointType": "PRIVATE" } } }, { "Sid": "ScopeToPrivateApis", "Effect": "Allow", "Action": [ "apigateway:DELETE", "apigateway:PATCH", "apigateway:POST" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis", "arn:aws:apigateway:us-east-1::/restapis/??????????" ], "Condition": { "ForAllValues:StringEquals": { "apigateway:Request/EndpointType": "PRIVATE", "apigateway:Resource/EndpointType": "PRIVATE" } } }, { "Sid": "AllowResourcePolicyUpdates", "Effect": "Allow", "Action": [ "apigateway:UpdateRestApiPolicy" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis/*" ] } ] }

Richiedere che i route API abbiano l'autorizzazione

Questa policy fa sì che i tentativi di creare o aggiornare un route (anche attraverso l'importazione) non riescono se il route non dispone di autorizzazione. ForAnyValue restituisce false se la chiave non è presente, ad esempio quando un route non viene creato o aggiornato. Usiamo ForAnyValue perché più route possono essere creati attraverso l'importazione.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUpdatesOnApisAndRoutes", "Effect": "Allow", "Action": [ "apigateway:POST", "apigateway:PATCH", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/??????????", "arn:aws:apigateway:us-east-1::/apis/*/routes", "arn:aws:apigateway:us-east-1::/apis/*/routes/*" ] }, { "Sid": "DenyUnauthorizedRoutes", "Effect": "Deny", "Action": [ "apigateway:POST", "apigateway:PATCH", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/*" ], "Condition": { "ForAnyValue:StringEqualsIgnoreCase": { "apigateway:Request/RouteAuthorizationType": "NONE" } } } ] }

Questa policy impedisce a un utente di creare o aggiornare un collegamento VPC. Un collegamento VPC consente di esporre risorse all'interno di Amazon VPC ai client esterni a VPC.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyVPCLink", "Effect": "Deny", "Action": [ "apigateway:POST", "apigateway:PUT", "apigateway:PATCH" ], "Resource": [ "arn:aws:apigateway:us-east-1::/vpclinks", "arn:aws:apigateway:us-east-1::/vpclinks/*" ] } ] }