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
Para obter os detalhes do IAM que podem ser compartilhados, chame o
get-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" }
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
Salve oAWS CloudFormation modelo em um arquivo chamado
template.yaml
.Use o modelo para implantar a pilha e criar a função do IAM chamando o
deploy
comando.aws cloudformation deploy --template-file ./template.yaml --stack-name CollaboratorRole --capabilities CAPABILITY_IAM
Gere o URL pré-assinado
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()
Salve o código em um arquivo chamado
share.py
.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 a
myfolder/
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.