Tutorial: Criar um URL pré-assinado para objetos do Amazon S3 usandoAWS CloudShell - AWS CloudShell

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

Tutorial: Criar um URL pré-assinado para objetos do Amazon S3 usandoAWS CloudShell

Este tutorial mostra como criar um URL pré-assinado para compartilhar um objeto do Amazon S3 com outras pessoas. Como os proprietários de objetos especificam suas próprias credenciais de segurança ao compartilhar, qualquer pessoa que receba a URL pré-assinada pode acessar o objeto por um tempo limitado.

Pré-requisitos

  • Um usuário do IAM com permissões de acesso fornecidas pela AWSCloudShellFullAccesspolítica.

  • Para obter as permissões do IAM necessárias para criar um URL pré-assinado, consulte Compartilhar um objeto com outras pessoas 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

  1. Para obter os detalhes do IAM que podem ser compartilhados, chame oget-caller-identity comando deAWS CloudShell.

    aws sts get-caller-identity

    Se a chamada for bem-sucedida, a linha de comando exibirá uma resposta similar.

    { "Account": "123456789012", "UserId": "AROAXXOZUUOTTWDCVIDZ2:redirect_session", "Arn": "arn:aws:sts::531421766567:assumed-role/Feder08/redirect_session" }
  2. Pegue as informações do usuário obtidas na etapa anterior e adicione-as a umAWS CloudFormation modelo. Esse modelo cria um perfil do IAM. Essa função concede ao seu colaborador o mínimo de privilégios 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.Arn
  3. Salve oAWS CloudFormation modelo em um arquivo chamadotemplate.yaml.

  4. Use o modelo para implantar a pilha e criar a função do IAM chamando odeploy comando.

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

Gere o URL pré-assinado

  1. Usando seu editor emAWS CloudShell, adicione o código a seguir. Esse código cria uma URL que fornece aos usuários federados acesso direto aoAWS Management Console.

    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()
  2. Salve o código em um arquivo chamadoshare.py.

  3. Execute o comando a seguir para recuperar o nome do recurso da Amazon (ARN) do perfil do IAMAWS CloudFormation. Em seguida, use-o noPython script 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.py

    O script retorna uma URL na qual um colaborador pode clicar paraAWS CloudShell acessá-loAWS Management Console. O colaborador tem controle total sobre amyfolder/ pasta no bucket do Amazon S3 pelos próximos 3.600 segundos (1 hora). As credenciais expiram após uma hora. Após esse período, o colaborador não poderá mais acessar o bucket.