As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criar um URL pré-assinado para objetos do Amazon S3 utilizando o CloudShell
Este tutorial mostra como criar um URL pré-assinado para compartilhar um objeto do Amazon S3 com terceiros. Como os proprietários do objeto especificam suas próprias credenciais de segurança ao compartilhar, qualquer pessoa que receba um URL pré-assinado pode acessar o objeto por tempo limitado.
Pré-requisitos
Um usuário do IAM com permissões de acesso fornecidas pela política AWSCloudShellFullAccess.
Para obter as permissões do IAM necessárias para criar um URL pré-assinado, consulte Compartilhar um objeto com terceiros no Guia do usuário do Amazon Simple Storage Service.
Etapa 1: criar um perfil do IAM para conceder acesso ao bucket do Amazon S3
Esta etapa descreve como criar um perfil do IAM para conceder acesso ao bucket do Amazon S3.
Para obter detalhes do IAM que possam ser compartilhados, chame o comando
get-caller-identitydo AWS CloudShell.aws sts get-caller-identitySe a chamada tiver êxito, a linha de comando exibirá uma resposta semelhante à seguinte.
{ "Account": "123456789012", "UserId": "AROAXXOZUUOTTWDCVIDZ2:redirect_session", "Arn": "arn:aws:sts::531421766567:assumed-role/Feder08/redirect_session" }Pegue as informações do usuário que você obteve na etapa anterior e adicione-as a um modelo CloudFormation. Esse modelo cria um perfil do IAM. Esse perfil concede ao seu colaborador permissões de privilégio mínimo para os recursos compartilhados.
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.ArnSalve o modelo CloudFormation em um arquivo chamado
template.yaml.Use o modelo para implantar a pilha e criar o perfil do IAM chamando o comando
deploy.aws cloudformation deploy --template-file ./template.yaml --stack-name CollaboratorRole --capabilities CAPABILITY_IAM
Como gerar o URL pré-assinado
Esta etapa descreve como gerar o URL pré-assinado.
Usando seu editor no AWS CloudShell, adicione o código a seguir. Esse código cria um URL que fornece aos usuários federados acesso direto ao Console de gerenciamento da 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()Salve o código em um arquivo chamado
share.py.Execute o seguinte na linha de comando para recuperar o nome do recurso da Amazon (ARN) do perfil do IAM no CloudFormation. Em seguida, use-o no script Python para obter credenciais de segurança temporárias.
ROLE_ARN=$(aws cloudformation describe-stacks --stack-name CollaboratorRole --query "Stacks[*].Outputs[?OutputKey=='CollaboratorRoleArn'].OutputValue" --output text) python3 ./share.pyO script retorna um URL no qual um colaborador pode clicar para acessá-lo no AWS CloudShell pelo Console de gerenciamento da AWS. O colaborador tem controle total sobre a pasta
myfolder/no bucket do Amazon S3 pelos próximos 3.600 segundos (uma hora). As credenciais expiram após uma hora. Após esse período, o colaborador não poderá mais acessar o bucket.