

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Erstellen einer vorsignierten URL für Amazon S3 S3-Objekte mit CloudShell
<a name="tutorial-presigned-url"></a>

Dieses Tutorial zeigt Ihnen, wie Sie eine vorsignierte URL erstellen, um ein Amazon S3 S3-Objekt mit anderen zu teilen. Da Objekteigentümer beim Teilen ihre eigenen Sicherheitsdaten angeben, kann jeder, der die vorsignierte URL erhält, für eine begrenzte Zeit auf das Objekt zugreifen.

## Voraussetzungen
<a name="prerequesities-presigned"></a>
+ Ein IAM-Benutzer mit den in der Richtlinie vorgesehenen Zugriffsberechtigungen. **AWSCloudShellFullAccess**
+ Informationen zu den IAM-Berechtigungen, die zum Erstellen einer vorsignierten URL erforderlich sind, finden Sie im *Amazon Simple Storage Service-Benutzerhandbuch* unter [Ein Objekt mit anderen teilen](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html).

## Schritt 1: Erstellen Sie eine IAM-Rolle, um Zugriff auf den Amazon S3 S3-Bucket zu gewähren
<a name="create-role-for-sharing"></a>

In diesem Schritt wird beschrieben, wie Sie eine IAM-Rolle erstellen, um Zugriff auf den Amazon S3 S3-Bucket zu gewähren.

1. Rufen Sie den `get-caller-identity` Befehl von auf, um Ihre IAM-Details abzurufen, die gemeinsam genutzt werden können. AWS CloudShell

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

   Wenn der Aufruf erfolgreich ist, wird in der Befehlszeile eine Antwort angezeigt, die der folgenden ähnelt.

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

1. Nehmen Sie die Benutzerinformationen, die Sie im vorherigen Schritt erhalten haben, und fügen Sie sie einer CloudFormation Vorlage hinzu. Diese Vorlage erstellt eine IAM-Rolle. Diese Rolle gewährt Ihrem Mitarbeiter die geringsten Rechte für die gemeinsam genutzten Ressourcen.

   ```
   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. Speichern Sie die CloudFormation Vorlage in einer Datei mit dem Namen. `template.yaml`

1. Verwenden Sie die Vorlage, um den Stack bereitzustellen und die IAM-Rolle zu erstellen, indem Sie den `deploy` Befehl aufrufen.

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

## Generieren Sie die vorsignierte URL
<a name="generate-the-url"></a>

In diesem Schritt wird beschrieben, wie die vorsignierte URL generiert wird.

1. Fügen Sie mit Ihrem Editor den folgenden Code hinzu. AWS CloudShell Dieser Code erstellt eine URL, die Verbundbenutzern direkten Zugriff auf die AWS-Managementkonsole bietet.

   ```
   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. Speichern Sie den Code in einer Datei namens`share.py`.

1. Führen Sie den folgenden Befehl über die Befehlszeile aus, um den Amazon-Ressourcennamen (ARN) der IAM-Rolle CloudFormation abzurufen. Verwenden Sie ihn dann im Python Skript, um temporäre Sicherheitsanmeldedaten abzurufen.

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

   Das Skript gibt eine URL zurück, auf die ein Mitarbeiter klicken kann, um ihn aufzurufen AWS CloudShell . AWS-Managementkonsole Der Mitarbeiter hat für die nächsten 3.600 Sekunden (1 Stunde) die volle Kontrolle über den `myfolder/` Ordner im Amazon S3 S3-Bucket. Die Anmeldeinformationen laufen nach einer Stunde ab. Nach Ablauf dieser Zeit kann der Mitarbeiter nicht mehr auf den Bucket zugreifen. 