

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Membuat URL presigned untuk objek Amazon S3 menggunakan CloudShell
<a name="tutorial-presigned-url"></a>

Tutorial ini menunjukkan cara membuat URL presigned untuk berbagi objek Amazon S3 dengan orang lain. Karena pemilik objek menentukan kredensi keamanan mereka sendiri saat berbagi, siapa pun yang menerima URL presigned dapat mengakses objek untuk waktu yang terbatas.

## Prasyarat
<a name="prerequesities-presigned"></a>
+ Pengguna IAM dengan izin akses yang disediakan oleh kebijakan. **AWSCloudShellFullAccess**
+ Untuk izin IAM yang diperlukan untuk membuat URL yang telah ditetapkan sebelumnya, lihat [Berbagi objek dengan orang lain](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html) di Panduan Pengguna *Layanan Penyimpanan Sederhana Amazon*.

## Langkah 1: Buat peran IAM untuk memberikan akses ke bucket Amazon S3
<a name="create-role-for-sharing"></a>

Langkah ini menjelaskan cara membuat peran IAM untuk memberikan akses ke bucket Amazon S3.

1. Untuk mendapatkan detail IAM Anda yang dapat dibagikan, hubungi `get-caller-identity` perintah dari AWS CloudShell.

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

   Jika panggilan berhasil, baris perintah menampilkan respons yang mirip dengan yang berikut ini.

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

1. Ambil informasi pengguna yang Anda peroleh di langkah sebelumnya, dan tambahkan ke CloudFormation template. Template ini menciptakan peran IAM. Peran ini memberikan izin hak istimewa paling sedikit kepada kolaborator Anda untuk sumber daya bersama.

   ```
   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. Simpan CloudFormation template dalam file yang diberi nama`template.yaml`.

1. Gunakan template untuk menyebarkan tumpukan dan membuat peran IAM dengan memanggil perintah. `deploy`

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

## Hasilkan URL yang telah ditentukan sebelumnya
<a name="generate-the-url"></a>

Langkah ini menjelaskan cara menghasilkan URL yang telah ditetapkan sebelumnya.

1. Dengan menggunakan editor Anda AWS CloudShell, tambahkan kode berikut. Kode ini membuat URL yang menyediakan pengguna federasi dengan akses langsung ke file. Konsol Manajemen 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()
   ```

1. Simpan kode dalam file bernama`share.py`.

1. Jalankan yang berikut ini dari baris perintah untuk mengambil Amazon Resource Name (ARN) dari peran IAM dari. CloudFormation Kemudian, gunakan dalam Python skrip untuk mendapatkan kredenal keamanan sementara.

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

   Skrip mengembalikan URL yang dapat diklik kolaborator untuk membawanya AWS CloudShell masuk Konsol Manajemen AWS. Kolaborator memiliki kontrol penuh atas `myfolder/` folder di bucket Amazon S3 selama 3.600 detik berikutnya (1 jam). Kredensialnya kedaluwarsa setelah satu jam. Setelah waktu ini, kolaborator tidak dapat lagi mengakses bucket. 