

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

# Aktifkan akses broker identitas khusus ke AWS konsol
<a name="id_roles_providers_enable-console-custom-url"></a>

Anda dapat menulis dan menjalankan kode untuk membuat URL yang memungkinkan pengguna yang masuk ke jaringan organisasi Anda mengakses Konsol Manajemen AWS. URL menyertakan token masuk yang Anda dapatkan AWS dan yang mengautentikasi pengguna. AWS Sesi konsol yang dihasilkan mungkin mencakup perbedaan `AccessKeyId` karena federasi. Untuk melacak penggunaan kunci akses untuk login federasi melalui CloudTrail acara terkait, lihat [Mencatat panggilan IAM dan AWS STS API dengan AWS CloudTrail](cloudtrail-integration.md) dan acara [Konsol Manajemen AWS login](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-aws-console-sign-in-events.html). 

**catatan**  
Jika organisasi Anda menggunakan penyedia identitas (IdP) yang kompatibel dengan SAML, Anda dapat menyiapkan akses ke konsol tanpa menulis kode. Ini berfungsi dengan penyedia seperti Layanan Federasi Direktori Aktif Microsoft atau Shibboleth sumber terbuka. Untuk detailnya, lihat [Mengaktifkan prinsip federasi SAMP 2.0 untuk mengakses Konsol Manajemen AWS](id_roles_providers_enable-console-saml.md). 

Untuk memungkinkan pengguna organisasi Anda mengakses Konsol Manajemen AWS, Anda dapat membuat *pialang identitas* khusus yang melakukan langkah-langkah berikut:

1. Pastikan bahwa pengguna diautentikasi oleh sistem identitas lokal Anda.

1. Panggil operasi AWS Security Token Service (AWS STS) [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)(disarankan) atau [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)API untuk mendapatkan kredenal keamanan sementara bagi pengguna. Untuk mempelajari tentang berbagai metode yang dapat Anda gunakan untuk menjalankan peran, lihat [Metode untuk mengambil peran](id_roles_manage-assume.md). Untuk mempelajari cara mengirimkan tag sesi opsional saat Anda mendapatkan kredensial keamanan Anda, lihat [Lulus tag sesi di AWS STS](id_session-tags.md).
   + Jika Anda menggunakan salah satu dari Operasi API `AssumeRole*` untuk mendapatkan kredensial keamanan sementara untuk sebuah peran, Anda dapat menyertakan parameter `DurationSeconds` dalam panggilan Anda. Parameter ini menentukan durasi sesi peran Anda, dari 900 detik (15 menit) hingga setelan durasi sesi maksimum untuk peran tersebut. Ketika Anda menggunakan `DurationSeconds` dalam `AssumeRole*` operasi, Anda harus menyebutnya sebagai pengguna IAM dengan kredensi jangka panjang. Jika tidak, panggilan ke titik akhir federasi pada langkah 3 gagal. Untuk mempelajari cara melihat atau mengubah nilai maksimum untuk peran, lihat [Memperbarui durasi sesi maksimum untuk peran](id_roles_update-role-settings.md#id_roles_update-session-duration).
   + Jika Anda menggunakan operasi API `GetFederationToken` untuk mendapatkan kredensial, Anda bisa menyertakan parameter `DurationSeconds` dalam panggilan Anda. Parameter ini menentukan durasi sesi peran Anda. Nilai dapat berkisar dari 900 detik (15 menit) hingga 129.600 detik (36 jam). Anda dapat melakukan panggilan API ini hanya dengan menggunakan kredenal AWS keamanan jangka panjang dari pengguna IAM. Anda juga dapat melakukan panggilan ini menggunakan Pengguna root akun AWS kredensional, tetapi kami tidak merekomendasikannya. Jika Anda membuat panggilan ini sebagai pengguna akar, sesi default berlangsung selama satu jam. Atau Anda dapat menentukan sesi dari 900 detik (15 menit) hingga 3.600 detik (satu jam). 

1. Hubungi titik akhir AWS federasi dan berikan kredensi keamanan sementara untuk meminta token masuk.

1. Buat URL untuk konsol yang mencakup token:
   + Jika Anda menggunakan salah satu dari operasi API `AssumeRole*` di URL Anda, Anda dapat menyertakan Parameter HTTP `SessionDuration`. Parameter ini menentukan durasi sesi konsol, dari 900 detik (15 menit) hingga 43200 detik (12 jam).
   + Jika Anda menggunakan operasi API `GetFederationToken` di URL Anda, Anda dapat menyertakan Parameter `DurationSeconds`. Parameter ini menentukan durasi sesi konsol federasi. Nilai dapat berkisar dari 900 detik (15 menit) hingga 129.600 detik (36 jam). 
**catatan**  
Anda `SessionDuration` tidak boleh lebih besar dari atau sama dengan pengaturan durasi sesi maksimum untuk peran yang Anda asumsikan. Misalnya, Anda telah menetapkan durasi sesi maksimum untuk peran yang ingin Anda asumsikan menjadi 5 jam. `SessionDuration`Parameter Anda bisa 16524 detik atau 4 jam 59 detik.
Jangan gunakan parameter `SessionDuration` HTTP saat Anda mendapatkan kredensi sementara. `GetFederationToken` Operasi akan gagal.
Menggunakan kredensi untuk satu peran untuk mengambil peran yang berbeda disebut rantai [*peran*](id_roles.md#iam-term-role-chaining). Saat Anda menggunakan rantai peran, kredensial baru Anda dibatasi hingga durasi maksimum satu jam. Saat Anda menggunakan peran untuk [memberikan izin ke aplikasi yang berjalan pada instans EC2](id_roles_use_switch-role-ec2.md), aplikasi tersebut tidak terkena batasan ini.
Jangan gunakan parameter `SessionDuration` HTTP saat Anda mendapatkan kredensi sementara melalui rantai peran. Operasi akan gagal.

1. Berikan URL ke pengguna atau panggil URL atas nama pengguna.

URL yang disediakan oleh titik akhir federasi berlaku selama 15 menit setelah dibuat. Ini berbeda dari durasi (dalam detik) sesi kredensial keamanan sementara yang dikaitkan dengan URL. Kredensial tersebut berlaku selama durasi yang Anda tentukan saat membuatnya, dimulai sejak saat informasi tersebut dibuat.

**penting**  
URL memberikan akses ke AWS sumber daya Anda melalui Konsol Manajemen AWS jika Anda telah mengaktifkan izin di kredenial keamanan sementara terkait. Karena alasan ini, Anda harus memperlakukan URL sebagai rahasia. Kami menyarankan mengembalikan URL melalui pengalihan aman, misalnya, dengan menggunakan kode status respons HTTP 302 melalui koneksi SSL. Untuk informasi lebih lanjut tentang kode status respons HTTP 302, kunjungi [RFC 2616, bagian 10.3.3](https://datatracker.ietf.org/doc/html/rfc2616#section-10.3.3).

Untuk menyelesaikan tugas-tugas ini, Anda dapat menggunakan [HTTPS Query API for AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/APIReference/) dan [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/). Atau, Anda dapat menggunakan bahasa pemrograman, seperti Java, Ruby, atau C\#, bersama dengan [SDK AWS](https://aws.amazon.com/tools/) yang sesuai. Masing-masing metode ini dijelaskan dalam topik-topik berikut.

**Topics**
+ [Contoh kode menggunakan operasi API kueri IAM](#STSConsoleLink_manual)
+ [Contoh kode menggunakan Python](#STSConsoleLink_programPython)
+ [Contoh kode menggunakan Java](#STSConsoleLink_programJava)
+ [Contoh menunjukkan cara membangun URL (Ruby)](#STSConsoleLink_programRuby)

## Contoh kode menggunakan operasi API kueri IAM
<a name="STSConsoleLink_manual"></a>

Anda dapat membuat URL yang memberikan peran dan kepala sekolah federasi akses langsung ke file. Konsol Manajemen AWS Tugas ini menggunakan IAM dan AWS STS HTTPS Query API. Untuk informasi selengkapnya tentang membuat permintaan pertanyaan, lihat [Membuat Permintaan Kueri](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html).

**catatan**  
Prosedur berikut berisi contoh string teks. Untuk meningkatkan keterbacaan, jeda baris telah ditambahkan ke beberapa contoh yang lebih panjang. Saat Anda membuat string ini untuk Anda gunakan sendiri, Anda harus mengurangi setiap pecahan baris.

**Untuk memberikan peran dan kepala sekolah federasi akses ke sumber daya Anda dari Konsol Manajemen AWS**

1. Autentikasi pengguna di sistem identitas dan otorisasi Anda.

1. Dapatkan kredensial keamanan sementara untuk pengguna. Kredensi sementara terdiri dari ID kunci akses, kunci akses rahasia, dan token sesi. Untuk informasi lebih lanjut tentang membuat kredensial sementara, lihat [Kredensial keamanan sementara di IAM](id_credentials_temp.md).

   Untuk mendapatkan kredensi sementara, Anda memanggil AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)API (disarankan) atau API. [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) Untuk informasi selengkapnya tentang perbedaan antara operasi API ini, lihat [Memahami Opsi API untuk Mendelegasikan Akses ke AWS Akun Anda dengan](https://aws.amazon.com/blogs/security/understanding-the-api-options-for-securely-delegating-access-to-your-aws-account) Aman di Blog AWS Keamanan.
**penting**  
Saat Anda menggunakan API [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) untuk membuat kredensial keamanan sementara, Anda harus menentukan izin yang diberikan kredensial tersebut kepada pengguna yang memegang peran tersebut. Untuk setiap operasi API yang dimulai dengan `AssumeRole*`, Anda menggunakan peran IAM untuk menetapkan izin. Untuk operasi API lainnya, mekanisme bervariasi dengan API. Untuk lebih detailnya, lihat [Izin untuk kredensial keamanan sementara](id_credentials_temp_control-access.md). Sebagai tambahan, jika Anda menggunakan operasi API `AssumeRole*`, Anda harus menyebutnya sebagai pengguna IAM dengan kredensial jangka panjang. Jika tidak, panggilan ke titik akhir federasi pada langkah 3 gagal.  


1. Setelah Anda mendapatkan kredensial keamanan sementara, masukkan ke dalam rangkaian sesi JSON untuk menukarnya dengan token masuk. Contoh berikut menunjukkan cara mengkode kredensial. Anda mengganti teks placeholder dengan nilai yang sesuai dari kredensial yang Anda terima di langkah sebelumnya.

   ```
   {"sessionId":"{{*** temporary access key ID ***}}",
   "sessionKey":"{{*** temporary secret access key ***}}",
   "sessionToken":"{{*** session token ***}}"}
   ```

1. [URL dikode](https://en.wikipedia.org/wiki/Percent-encoding) string sesi dari langkah sebelumnya. Karena informasi yang Anda encoding itu sensitif, kami menganjurkan agar Anda menghindari penggunaan layanan web untuk encoding ini. Alih-alih, gunakan fungsi atau fitur yang dipasang secara lokal di perangkat pengembangan Anda untuk mengenkode informasi ini dengan aman. Anda dapat menggunakan fungsi `urllib.quote_plus` di Python, fungsi `URLEncoder.encode` di Java, atau fungsi `CGI.escape` di Ruby. Lihat contoh-contoh ini nanti dalam topik ini.

1. <a name="STSConsoleLink_manual_step5"></a>
**catatan**  
AWS mendukung permintaan POST di sini.

   Kirim permintaan Anda ke titik akhir AWS federasi:

   `https://{{region-code}}.signin.aws.amazon.com/federation` 

   Untuk daftar {{region-code}} nilai yang mungkin, lihat kolom **Wilayah** di titik [akhir AWS Masuk](https://docs.aws.amazon.com/general/latest/gr/signin-service.html). Anda dapat secara opsional menggunakan titik akhir federasi AWS Masuk default:

   `https://signin.aws.amazon.com/federation` 

   Permintaan tersebut harus menyertakan parameter `Action` dan `Session`, dan (secara opsional) jika Anda menggunakan operasi API [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html), sebuah parameter HTTP `SessionDuration` seperti ditunjukkan dalam contoh berikut.

   ```
   Action = getSigninToken
   SessionDuration = {{time in seconds}}
   Session = {{*** the URL encoded JSON string created in steps 3 & 4 ***}}
   ```
**catatan**  
Petunjuk berikut dalam langkah ini hanya berfungsi menggunakan permintaan GET.

   Parameter HTTP `SessionDuration` ini menentukan durasi sesi konsol federasi. Ini terpisah dari durasi kredensial sementara yang Anda tentukan menggunakan parameter `DurationSeconds`. Anda dapat menentukan nilai maksimal `SessionDuration` adalah 43.200 (12 jam). Jika `SessionDuration` parameter tidak ada, maka sesi default ke durasi kredensional yang Anda ambil dari AWS STS langkah 2 (yang defaultnya satu jam). Lihat dokumentasi [ untuk `AssumeRole` API](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) untuk detail tentang cara menentukan durasi menggunakan parameter `DurationSeconds`. Kemampuan untuk membuat sesi konsol yang lebih lama dari satu jam bersifat intrinsik bagi `getSigninToken` operasi titik akhir federasi.
**catatan**  
Anda `SessionDuration` tidak boleh lebih besar dari atau sama dengan pengaturan durasi sesi maksimum untuk peran yang Anda asumsikan. Misalnya, Anda telah menetapkan durasi sesi maksimum untuk peran yang ingin Anda asumsikan menjadi 5 jam. `SessionDuration`Parameter Anda bisa 16524 detik atau 4 jam 59 detik.
Jangan gunakan parameter `SessionDuration` HTTP saat Anda mendapatkan kredensi sementara. `GetFederationToken` Operasi akan gagal.
Menggunakan kredensi untuk satu peran untuk mengambil peran yang berbeda disebut rantai [*peran*](id_roles.md#iam-term-role-chaining). Saat Anda menggunakan rantai peran, kredensial baru Anda dibatasi hingga durasi maksimum satu jam. Saat Anda menggunakan peran untuk [memberikan izin ke aplikasi yang berjalan pada instans EC2](id_roles_use_switch-role-ec2.md), aplikasi tersebut tidak terkena batasan ini.
Jangan gunakan parameter `SessionDuration` HTTP saat Anda mendapatkan kredensi sementara melalui rantai peran. Operasi akan gagal.

   Saat Anda mengaktifkan sesi konsol dengan durasi yang diperpanjang, Anda meningkatkan risiko eksposur kredensial. Untuk membantu Anda mengurangi risiko ini, Anda dapat segera menonaktifkan sesi konsol aktif untuk peran apa pun dengan memilih **Mencabut Sesi** pada **Ringkasan Peran** IAM halaman konsol. Untuk informasi selengkapnya, lihat [Mencabut kredensi keamanan sementara peran IAM](id_roles_use_revoke-sessions.md). 

    Berikut ini adalah contoh seperti apa permintaan Anda. Garis dibungkus di sini agar mudah dibaca, tetapi Anda harus mengirimkannya sebagai string satu baris.

   ```
   https://signin.aws.amazon.com/federation
   ?Action=getSigninToken
   &SessionDuration=1800
   &Session=%7B%22sessionId%22%3A+%22ASIAJUMHIZPTOKTBMK5A%22%2C+%22sessionKey%22
   %3A+%22LSD7LWI%2FL%2FN%2BgYpan5QFz0XUpc8s7HYjRsgcsrsm%22%2C+%22sessionToken%2
   2%3A+%22FQoDYXdzEBQaDLbj3VWv2u50NN%2F3yyLSASwYtWhPnGPMNmzZFfZsL0Qd3vtYHw5A5dW
   AjOsrkdPkghomIe3mJip5%2F0djDBbo7SmO%2FENDEiCdpsQKodTpleKA8xQq0CwFg6a69xdEBQT8
   FipATnLbKoyS4b%2FebhnsTUjZZQWp0wXXqFF7gSm%2FMe2tXe0jzsdP0O12obez9lijPSdF1k2b5
   PfGhiuyAR9aD5%2BubM0pY86fKex1qsytjvyTbZ9nXe6DvxVDcnCOhOGETJ7XFkSFdH0v%2FYR25C
   UAhJ3nXIkIbG7Ucv9cOEpCf%2Fg23ijRgILIBQ%3D%3D%22%7D
   ```

   Respons dari titik akhir federasi adalah dokumen JSON dengan nilai `SigninToken`. Ini akan terlihat serupa dengan contoh berikut.

   ```
   {"SigninToken":"{{*** the SigninToken string ***}}"}
   ```

1. 
**catatan**  
AWS mendukung permintaan POST di sini.

   Terakhir, buat URL yang dapat digunakan pengguna Anda untuk mengakses file Konsol Manajemen AWS. URL adalah titik akhir URL federasi yang sama yang Anda gunakan di [Step 5](#STSConsoleLink_manual_step5), ditambah parameter berikut:

   ```
   ?Action = login
   &Issuer = {{*** the form-urlencoded URL for your internal sign-in page ***}}
   &Destination = {{*** the form-urlencoded URL to the desired AWS console page ***}}
   &SigninToken = {{*** the value of SigninToken received in the previous step ***}}
   ```
**catatan**  
Petunjuk berikut dalam langkah ini hanya berfungsi menggunakan GET API.

   Contoh berikut menunjukkan seperti apa URL akhir itu. URL valid selama 15 menit sejak dibuat. Kredensial keamanan sementara dan sesi konsol yang disematkan dalam URL valid selama durasi yang Anda tentukan di parameter HTTP `SessionDuration` saat Anda memintanya untuk pertama kali. 

   ```
   https://signin.aws.amazon.com/federation
   ?Action=login
   &Issuer=https%3A%2F%2Fexample.com
   &Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F
   &SigninToken=VCQgs5qZZt3Q6fn8Tr5EXAMPLEmLnwB7JjUc-SHwnUUWabcRdnWsi4DBn-dvC
   CZ85wrD0nmldUcZEXAMPLE-vXYH4Q__mleuF_W2BE5HYexbe9y4Of-kje53SsjNNecATfjIzpW1
   WibbnH6YcYRiBoffZBGExbEXAMPLE5aiKX4THWjQKC6gg6alHu6JFrnOJoK3dtP6I9a6hi6yPgm
   iOkPZMmNGmhsvVxetKzr8mx3pxhHbMEXAMPLETv1pij0rok3IyCR2YVcIjqwfWv32HU2Xlj471u
   3fU6uOfUComeKiqTGX974xzJOZbdmX_t_lLrhEXAMPLEDDIisSnyHGw2xaZZqudm4mo2uTDk9Pv
   9l5K0ZCqIgEXAMPLEcA6tgLPykEWGUyH6BdSC6166n4M4JkXIQgac7_7821YqixsNxZ6rsrpzwf
   nQoS14O7R0eJCCJ684EXAMPLEZRdBNnuLbUYpz2Iw3vIN0tQgOujwnwydPscM9F7foaEK3jwMkg
   Apeb1-6L_OB12MZhuFxx55555EXAMPLEhyETEd4ZulKPdXHkgl6T9ZkIlHz2Uy1RUTUhhUxNtSQ
   nWc5xkbBoEcXqpoSIeK7yhje9Vzhd61AEXAMPLElbWeouACEMG6-Vd3dAgFYd6i5FYoyFrZLWvm
   0LSG7RyYKeYN5VIzUk3YWQpyjP0RiT5KUrsUi-NEXAMPLExMOMdoODBEgKQsk-iu2ozh6r8bxwC
   RNhujg
   ```

## Contoh kode menggunakan Python
<a name="STSConsoleLink_programPython"></a>

Contoh berikut menunjukkan bagaimana menggunakan Python untuk secara terprogram membangun URL yang memberikan pengguna akses langsung ke URL. Konsol Manajemen AWS Berikut ini adalah dua contoh:
+ Federasi melalui GET permintaan ke AWS
+ Federasi melalui permintaan POST untuk AWS

Kedua contoh menggunakan [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)API [AWS SDK untuk Python (Boto3)](https://aws.amazon.com/tools/)dan untuk mendapatkan kredenal keamanan sementara.

Jangan sertakan `SessionDuration` jika `AssumeRoleSession` kredensional Anda berasal dari rantai peran. Jika Anda memasukkan`SessionDuration`, operasi akan gagal.

### Gunakan Permintaan GET
<a name="post-api-py-example"></a>

```
import urllib, json, sys
import requests # 'pip install requests'
import boto3 # AWS SDK for Python (Boto3) 'pip install boto3'

# Step 1: Authenticate user in your own identity system.

# Step 2: Using the access keys for an IAM user in your Akun AWS,
# call "AssumeRole" to get temporary access keys for the role or federated principal

# Note: Calls to AWS STS AssumeRole must be signed using the access key ID 
# and secret access key of an IAM user or using existing temporary credentials.
# The credentials can be in Amazon EC2 instance metadata, in environment variables, 
# or in a configuration file, and will be discovered automatically by the 
# client('sts') function. For more information, see the Python SDK docs:
# http://boto3.readthedocs.io/en/latest/reference/services/sts.html
# http://boto3.readthedocs.io/en/latest/reference/services/sts.html#STS.Client.assume_role
sts_connection = boto3.client('sts')

assumed_role_object = sts_connection.assume_role(
    RoleArn="arn:aws:iam::{{account-id}}:role/ROLE-NAME",
    RoleSessionName="AssumeRoleSession",
)

# Step 3: Format resulting temporary credentials into JSON
url_credentials = {}
url_credentials['sessionId'] = assumed_role_object.get('Credentials').get('AccessKeyId')
url_credentials['sessionKey'] = assumed_role_object.get('Credentials').get('SecretAccessKey')
url_credentials['sessionToken'] = assumed_role_object.get('Credentials').get('SessionToken')
json_string_with_temp_credentials = json.dumps(url_credentials)

# Step 4. Make request to AWS federation endpoint to get sign-in token. Construct the parameter string with
# the sign-in action request, a 12-hour session duration, and the JSON document with temporary credentials 
# as parameters.
request_parameters = "?Action=getSigninToken"
request_parameters += "&SessionDuration=43200"
if sys.version_info[0] < 3:
    def quote_plus_function(s):
        return urllib.quote_plus(s)
else:
    def quote_plus_function(s):
        return urllib.parse.quote_plus(s)
request_parameters += "&Session=" + quote_plus_function(json_string_with_temp_credentials)
request_url = "https://signin.aws.amazon.com/federation" + request_parameters
r = requests.get(request_url)
# Returns a JSON document with a single element named SigninToken.
signin_token = json.loads(r.text)

# Step 5: Create URL where users can use the sign-in token to sign in to 
# the console. This URL must be used within 15 minutes after the
# sign-in token was issued.
request_parameters = "?Action=login" 
request_parameters += "&Issuer=Example.org" 
request_parameters += "&Destination=" + quote_plus_function("https://console.aws.amazon.com/")
request_parameters += "&SigninToken=" + signin_token["SigninToken"]
request_url = "https://signin.aws.amazon.com/federation" + request_parameters

# Send final URL to stdout
print (request_url)
```

### Gunakan Permintaan POST
<a name="get-api-py-example-1"></a>

```
import urllib, json, sys
import requests # 'pip install requests'
import boto3 # AWS SDK for Python (Boto3) 'pip install boto3'
import os
from selenium import webdriver # 'pip install selenium', 'brew install chromedriver'

# Step 1: Authenticate user in your own identity system.

# Step 2: Using the access keys for an IAM user in your A Akun AWS,
# call "AssumeRole" to get temporary access keys for the role or federated principal

# Note: Calls to AWS STS AssumeRole must be signed using the access key ID 
# and secret access key of an IAM user or using existing temporary credentials.
# The credentials can be in Amazon EC2 instance metadata, in environment variables, 

# or in a configuration file, and will be discovered automatically by the 
# client('sts') function. For more information, see the Python SDK docs:
# http://boto3.readthedocs.io/en/latest/reference/services/sts.html
# http://boto3.readthedocs.io/en/latest/reference/services/sts.html#STS.Client.assume_role
if sys.version_info[0] < 3:
    def quote_plus_function(s):
        return urllib.quote_plus(s)
else:
    def quote_plus_function(s):
        return urllib.parse.quote_plus(s)

sts_connection = boto3.client('sts')

assumed_role_object = sts_connection.assume_role(
    RoleArn="arn:aws:iam::account-id:role/ROLE-NAME",
    RoleSessionName="AssumeRoleDemoSession",
)

# Step 3: Format resulting temporary credentials into JSON
url_credentials = {}
url_credentials['sessionId'] = assumed_role_object.get('Credentials').get('AccessKeyId')
url_credentials['sessionKey'] = assumed_role_object.get('Credentials').get('SecretAccessKey')
url_credentials['sessionToken'] = assumed_role_object.get('Credentials').get('SessionToken')
json_string_with_temp_credentials = json.dumps(url_credentials)

# Step 4. Make request to AWS federation endpoint to get sign-in token. Construct the parameter string with
# the sign-in action request, a 12-hour session duration, and the JSON document with temporary credentials 
# as parameters.
request_parameters = {}
request_parameters['Action'] = 'getSigninToken'
request_parameters['SessionDuration'] = '43200'
request_parameters['Session'] = json_string_with_temp_credentials

request_url = "https://signin.aws.amazon.com/federation"
r = requests.post( request_url, data=request_parameters)

# Returns a JSON document with a single element named SigninToken.
signin_token = json.loads(r.text)

# Step 5: Create a POST request where users can use the sign-in token to sign in to 
# the console. The POST request must be made within 15 minutes after the
# sign-in token was issued.
request_parameters = {}
request_parameters['Action'] = 'login'
request_parameters['Issuer']='Example.org'
request_parameters['Destination'] = 'https://console.aws.amazon.com/'
request_parameters['SigninToken'] =signin_token['SigninToken']

jsrequest = '''
var form = document.createElement('form');
form.method = 'POST';
form.action = '{request_url}';
request_parameters = {request_parameters}
for (var param in request_parameters) {{
    if (request_parameters.hasOwnProperty(param)) {{
        const hiddenField = document.createElement('input');
        hiddenField.type = 'hidden';
        hiddenField.name = param;
        hiddenField.value = request_parameters[param];
        form.appendChild(hiddenField);
    }}
}}
document.body.appendChild(form);
form.submit();
'''.format(request_url=request_url, request_parameters=request_parameters)

driver = webdriver.Chrome()
driver.execute_script(jsrequest)
input("Press Enter to close the browser window...")
```

## Contoh kode menggunakan Java
<a name="STSConsoleLink_programJava"></a>

Contoh berikut menunjukkan bagaimana menggunakan Java untuk secara terprogram membangun URL yang memberikan pengguna akses langsung ke. Konsol Manajemen AWS Ptongan kode berikut menggunakan [SDK for Java AWS](https://aws.amazon.com/documentation/sdkforjava/).

```
import java.net.URLEncoder;
import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
// Available at http://www.json.org/java/index.html
import org.json.JSONObject;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest;
import com.amazonaws.services.securitytoken.model.GetFederationTokenResult;


/* Calls to AWS STS API operations must be signed using the access key ID 
   and secret access key of an IAM user or using existing temporary 
   credentials. The credentials should not be embedded in code. For 
   this example, the code looks for the credentials in a 
   standard configuration file.
*/
AWSCredentials credentials = 
  new PropertiesCredentials(
         AwsConsoleApp.class.getResourceAsStream("AwsCredentials.properties"));

AWSSecurityTokenServiceClient stsClient = 
  new AWSSecurityTokenServiceClient(credentials);

GetFederationTokenRequest getFederationTokenRequest = 
  new GetFederationTokenRequest();
getFederationTokenRequest.setDurationSeconds(1800);
getFederationTokenRequest.setName("UserName");

// A sample policy for accessing Amazon Simple Notification Service (Amazon SNS) in the console.

String policy = "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Action\":\"sns:*\"," +
  "\"Effect\":\"Allow\",\"Resource\":\"*\"}]}";

getFederationTokenRequest.setPolicy(policy);

GetFederationTokenResult federationTokenResult = 
  stsClient.getFederationToken(getFederationTokenRequest);

Credentials federatedCredentials = federationTokenResult.getCredentials();

// The issuer parameter specifies your internal sign-in
// page, for example https://mysignin.internal.mycompany.com/.
// The console parameter specifies the URL to the destination console of the
// AWS Management Console. This example goes to Amazon SNS. 
// The signin parameter is the URL to send the request to.

String issuerURL = "https://mysignin.internal.mycompany.com/";
String consoleURL = "https://console.aws.amazon.com/sns";
String signInURL = "https://signin.aws.amazon.com/federation";
  
// Create the sign-in token using temporary credentials,
// including the access key ID,  secret access key, and session token.
String sessionJson = String.format(
  "{\"%1$s\":\"%2$s\",\"%3$s\":\"%4$s\",\"%5$s\":\"%6$s\"}",
  "sessionId", federatedCredentials.getAccessKeyId(),
  "sessionKey", federatedCredentials.getSecretAccessKey(),
  "sessionToken", federatedCredentials.getSessionToken());
              
// Construct the sign-in request with the request sign-in token action, a
// 12-hour console session duration, and the JSON document with temporary 
// credentials as parameters.

String getSigninTokenURL = signInURL + 
                           "?Action=getSigninToken" +
                           "&DurationSeconds=43200" + 
                           "&SessionType=json&Session=" + 
                           URLEncoder.encode(sessionJson,"UTF-8");

URL url = new URL(getSigninTokenURL);

// Send the request to the AWS federation endpoint to get the sign-in token
URLConnection conn = url.openConnection ();

BufferedReader bufferReader = new BufferedReader(new 
  InputStreamReader(conn.getInputStream()));  
String returnContent = bufferReader.readLine();

String signinToken = new JSONObject(returnContent).getString("SigninToken");

String signinTokenParameter = "&SigninToken=" + URLEncoder.encode(signinToken,"UTF-8");

// The issuer parameter is optional, but recommended. Use it to direct users
// to your sign-in page when their session expires.

String issuerParameter = "&Issuer=" + URLEncoder.encode(issuerURL, "UTF-8");

// Finally, present the completed URL for the AWS console session to the user

String destinationParameter = "&Destination=" + URLEncoder.encode(consoleURL,"UTF-8");
String loginURL = signInURL + "?Action=login" +
                     signinTokenParameter + issuerParameter + destinationParameter;
```

## Contoh menunjukkan cara membangun URL (Ruby)
<a name="STSConsoleLink_programRuby"></a>

Contoh berikut menunjukkan bagaimana menggunakan Ruby untuk secara terprogram membangun URL yang memberikan pengguna akses langsung ke. Konsol Manajemen AWS Potongan kode ini menggunakan [SDK for Ruby AWS](https://aws.amazon.com/documentation/sdkforruby/). 

```
require 'rubygems'
require 'json'
require 'open-uri'
require 'cgi'
require 'aws-sdk'

# Create a new STS instance
# 
# Note: Calls to AWS STS API operations must be signed using an access key ID 
# and secret access key. The credentials can be in EC2 instance metadata 
# or in environment variables and will be automatically discovered by
# the default credentials provider in the AWS Ruby SDK. 
sts = Aws::STS::Client.new()

# The following call creates a temporary session that returns 
# temporary security credentials and a session token.
# The policy grants permissions to work
# in the AWS SNS console.

session = sts.get_federation_token({
  duration_seconds: 1800,
  name: "UserName",
  policy: "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":{\"Effect\":\"Allow\",\"Action\":\"sns:*\",\"Resource\":\"*\"}}",
})

# The issuer value is the URL where users are directed (such as
# to your internal sign-in page) when their session expires.
#
# The console value specifies the URL to the destination console.
# This example goes to the Amazon SNS console.
#
# The sign-in value is the URL of the AWS STS federation endpoint.
issuer_url = "https://mysignin.internal.mycompany.com/"
console_url = "https://console.aws.amazon.com/sns"
signin_url = "https://signin.aws.amazon.com/federation"

# Create a block of JSON that contains the temporary credentials
# (including the access key ID, secret access key, and session token).
session_json = {
  :sessionId => session.credentials[:access_key_id],
  :sessionKey => session.credentials[:secret_access_key],
  :sessionToken => session.credentials[:session_token]
}.to_json

# Call the federation endpoint, passing the parameters
# created earlier and the session information as a JSON block. 
# The request returns a sign-in token that's valid for 15 minutes.
# Signing in to the console with the token creates a session 
# that is valid for 12 hours.
get_signin_token_url = signin_url + 
                       "?Action=getSigninToken" + 
                       "&SessionType=json&Session=" + 
                       CGI.escape(session_json)

returned_content = URI.parse(get_signin_token_url).read

# Extract the sign-in token from the information returned
# by the federation endpoint.
signin_token = JSON.parse(returned_content)['SigninToken']
signin_token_param = "&SigninToken=" + CGI.escape(signin_token)

# Create the URL to give to the user, which includes the
# sign-in token and the URL of the console to open.
# The "issuer" parameter is optional but recommended.
issuer_param = "&Issuer=" + CGI.escape(issuer_url)
destination_param = "&Destination=" + CGI.escape(console_url)
login_url = signin_url + "?Action=login" + signin_token_param + 
  issuer_param + destination_param
```