

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

# Creazione di un URL predefinito per oggetti Amazon S3 utilizzando CloudShell
<a name="tutorial-presigned-url"></a>

Questo tutorial mostra come creare un URL predefinito per condividere un oggetto Amazon S3 con altri. Poiché i proprietari degli oggetti specificano le proprie credenziali di sicurezza durante la condivisione, chiunque riceva l'URL predefinito può accedere all'oggetto per un periodo di tempo limitato.

## Prerequisiti
<a name="prerequesities-presigned"></a>
+ Un utente IAM con autorizzazioni di accesso fornite dalla policy. **AWSCloudShellFullAccess**
+ Per le autorizzazioni IAM necessarie per creare un URL predefinito, consulta [Share an object with others](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html) nella *Amazon Simple Storage Service User* Guide.

## Fase 1: creare un ruolo IAM per concedere l'accesso al bucket Amazon S3
<a name="create-role-for-sharing"></a>

Questo passaggio descrive come creare un ruolo IAM per concedere l'accesso al bucket Amazon S3.

1. Per ottenere i dettagli IAM che possono essere condivisi, chiama il `get-caller-identity` comando from. AWS CloudShell

   ```
   aws sts get-caller-identity
   ```

   Se la chiamata ha esito positivo, la riga di comando visualizza una risposta simile alla seguente.

   ```
   {
       "Account": "123456789012", 
       "UserId": "AROAXXOZUUOTTWDCVIDZ2:redirect_session", 
       "Arn": "arn:aws:sts::531421766567:assumed-role/Feder08/redirect_session"
   }
   ```

1. Prendi le informazioni sull'utente ottenute nel passaggio precedente e aggiungile a un CloudFormation modello. Questo modello crea un ruolo IAM. Questo ruolo concede al tuo collaboratore le autorizzazioni con il minimo privilegio per le risorse condivise.

   ```
   Resources:
     CollaboratorRole:
       Type: AWS::IAM::Role
       Properties: 
         AssumeRolePolicyDocument: 
           Version: 2012-10-17		 	 	 
           Statement: 
             - Effect: Allow
               Principal:
                 AWS: "arn:aws:iam::531421766567:role/Feder08"
               Action: "sts:AssumeRole"
         Description: Role used by my collaborators
         MaxSessionDuration: 7200
     CollaboratorPolicy:
       Type: AWS::IAM::Policy
       Properties: 
         PolicyDocument: 
           Version: 2012-10-17		 	 	 
           Statement:
             - Effect: Allow
               Action:
                 - 's3:*'
               Resource: 'arn:aws:s3:::<YOUR_BUCKET_FOR_FILE_TRANSFER>'
               Condition:
                 StringEquals:
                   s3:prefix:
                    - "myfolder/*"
         PolicyName: S3ReadSpecificFolder
         Roles: 
           - !Ref CollaboratorRole
   Outputs:
     CollaboratorRoleArn:
       Description: Arn for the Collaborator's Role
       Value: !GetAtt CollaboratorRole.Arn
   ```

1. Salva il CloudFormation modello in un file denominato. `template.yaml`

1. Usa il modello per distribuire lo stack e creare il ruolo IAM chiamando il `deploy` comando.

   ```
   aws cloudformation deploy --template-file ./template.yaml --stack-name CollaboratorRole --capabilities CAPABILITY_IAM
   ```

## Genera l'URL predefinito
<a name="generate-the-url"></a>

Questo passaggio descrive come generare l'URL predefinito.

1. Utilizzando il tuo editor AWS CloudShell, aggiungi il codice seguente. Questo codice crea un URL che fornisce agli utenti federati l'accesso diretto a. Console di gestione AWS

   ```
   import urllib, json, sys
   import requests
   import boto3
   import os
   
   def main():
     sts_client = boto3.client('sts')
     assume_role_response = sts_client.assume_role(
         RoleArn=os.environ.get(ROLE_ARN),
         RoleSessionName="collaborator-session"
     )
     credentials = assume_role_response['Credentials']
     url_credentials = {}
     url_credentials['sessionId'] = credentials.get('AccessKeyId')
     url_credentials['sessionKey'] = credentials.get('SecretAccessKey')
     url_credentials['sessionToken'] = credentials.get('SessionToken')
     json_string_with_temp_credentials = json.dumps(url_credentials)
     print(f"json string {json_string_with_temp_credentials}")
   
     request_parameters = f"?Action=getSigninToken&Session={urllib.parse.quote(json_string_with_temp_credentials)}"
     request_url = "https://signin.aws.amazon.com/federation" + request_parameters
     r = requests.get(request_url)
     signin_token = json.loads(r.text)
     request_parameters = "?Action=login" 
     request_parameters += "&Issuer=Example.org" 
     request_parameters += "&Destination=" + urllib.parse.quote("https://us-west-2.console.aws.amazon.com/cloudshell")
     request_parameters += "&SigninToken=" + signin_token["SigninToken"]
     request_url = "https://signin.aws.amazon.com/federation" + request_parameters
   
     # Send final URL to stdout
     print (request_url)
   
   if __name__ == "__main__":
     main()
   ```

1. Salva il codice in un file chiamato`share.py`.

1. Esegui quanto segue dalla riga di comando per recuperare l'Amazon Resource Name (ARN) del ruolo IAM da. CloudFormation Quindi, usalo nello Python script per ottenere credenziali di sicurezza temporanee.

   ```
   ROLE_ARN=$(aws cloudformation describe-stacks --stack-name CollaboratorRole --query "Stacks[*].Outputs[?OutputKey=='CollaboratorRoleArn'].OutputValue" --output text) python3 ./share.py 
   ```

   Lo script restituisce un URL su cui un collaboratore può fare clic per inserirlo AWS CloudShell . Console di gestione AWS Il collaboratore ha il pieno controllo della `myfolder/` cartella nel bucket Amazon S3 per i prossimi 3.600 secondi (1 ora). Le credenziali scadono dopo un'ora. Dopo questo periodo, il collaboratore non può più accedere al bucket. 