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
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
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 nella Amazon Simple Storage Service User Guide.
Fase 1: creare un ruolo IAM per concedere l'accesso al bucket Amazon S3
Questo passaggio descrive come creare un ruolo IAM per concedere l'accesso al bucket Amazon S3.
Per ottenere i dettagli IAM che possono essere condivisi, chiama il
get-caller-identitycomando from. AWS CloudShellaws sts get-caller-identitySe 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" }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.ArnSalva il CloudFormation modello in un file denominato.
template.yamlUsa il modello per distribuire lo stack e creare il ruolo IAM chiamando il
deploycomando.aws cloudformation deploy --template-file ./template.yaml --stack-name CollaboratorRole --capabilities CAPABILITY_IAM
Genera l'URL predefinito
Questo passaggio descrive come generare l'URL predefinito.
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()Salva il codice in un file chiamato
share.py.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.pyLo 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.