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
Anda dapat menulis dan menjalankan kode untuk membuat kode URL yang memungkinkan pengguna yang masuk ke jaringan organisasi Anda mengakses jaringan organisasi Anda dengan aman mengakses. AWS Management Console URLIni mencakup token masuk yang Anda dapatkan dari AWS dan yang mengautentikasi pengguna. AWS Sesi konsol yang dihasilkan mungkin termasuk yang berbeda AccessKeyId
karena federasi. Untuk melacak penggunaan kunci akses untuk login federasi melalui CloudTrail acara terkait, lihat Logging IAM dan AWS STS API panggilan dengan AWS CloudTrail dan acara AWS Management Console login.
catatan
Jika organisasi Anda menggunakan penyedia identitas (IdP) yang kompatibel dengannyaSAML, Anda dapat menyiapkan akses konsol tanpa menulis kode. Ini berfungsi dengan penyedia seperti Layanan Federasi Direktori Aktif Microsoft atau Shibboleth sumber terbuka. Untuk detailnya, lihat Mengaktifkan pengguna federasi SAMP 2.0 untuk mengakses AWS Management Console.
Untuk memungkinkan pengguna organisasi Anda mengakses AWS Management Console, Anda dapat membuat pialang identitas khusus yang melakukan langkah-langkah berikut:
-
Pastikan bahwa pengguna diautentikasi oleh sistem identitas lokal Anda.
-
Hubungi AWS Security Token Service (AWS STS) AssumeRole(disarankan) atau GetFederationTokenAPIoperasi untuk mendapatkan kredensi keamanan sementara bagi pengguna. Untuk mempelajari tentang berbagai metode yang dapat Anda gunakan untuk menjalankan peran, lihat Metode untuk mengambil peran. Untuk mempelajari cara mengirimkan tag sesi opsional saat Anda mendapatkan kredensial keamanan Anda, lihat Lulus tag sesi di AWS STS.
-
Jika Anda menggunakan salah satu
AssumeRole*
API operasi untuk mendapatkan kredenal keamanan sementara untuk sebuah peran, Anda dapat menyertakanDurationSeconds
parameter tersebut dalam panggilan Anda. Parameter ini menentukan durasi sesi peran Anda, dari 900 detik (15 menit) hingga setelan durasi sesi maksimum untuk peran tersebut. Saat Anda menggunakanDurationSeconds
dalam suatuAssumeRole*
operasi, Anda harus menyebutnya sebagai IAM pengguna 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. -
Jika Anda menggunakan
GetFederationToken
API operasi untuk mendapatkan kredensi, Anda dapat menyertakanDurationSeconds
parameter 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 API panggilan ini hanya dengan menggunakan kredensi AWS keamanan jangka panjang dari pengguna. IAM Anda juga dapat melakukan panggilan ini menggunakan Pengguna root akun AWS kredensi, 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).
-
-
Panggil titik akhir AWS federasi dan berikan kredensi keamanan sementara untuk meminta token masuk.
-
Buat konsol yang mencakup token: URL
-
Jika Anda menggunakan salah satu
AssumeRole*
API operasi di AndaURL, Anda dapat memasukkanSessionDuration
HTTP parameter. Parameter ini menentukan durasi sesi konsol, dari 900 detik (15 menit) hingga 43200 detik (12 jam). -
Jika Anda menggunakan
GetFederationToken
API operasi di AndaURL, Anda dapat memasukkanDurationSeconds
parameter. 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 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
SessionDuration
HTTP parameter jika Anda mendapatkan kredensi sementara dengan.GetFederationToken
Melakukan hal itu akan menyebabkan kegagalan operasi. -
Menggunakan kredensi untuk satu peran untuk mengasumsikan peran berbeda disebut rantai peran. 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 EC2 instans, aplikasi tersebut tidak terkena batasan ini.
-
-
Berikan URL ke pengguna atau panggil URL atas nama pengguna.
URLYang disediakan oleh titik akhir federasi berlaku selama 15 menit setelah dibuat. Ini berbeda dari durasi (dalam detik) sesi kredensi keamanan sementara yang dikaitkan dengan. URL Kredensial tersebut berlaku selama durasi yang Anda tentukan saat membuatnya, dimulai sejak saat informasi tersebut dibuat.
penting
Ini URL memberikan akses ke AWS sumber daya Anda melalui izin AWS Management Console jika Anda telah mengaktifkan izin di kredenal keamanan sementara terkait. Karena alasan ini, Anda harus memperlakukan URL sebagai rahasia. Kami menyarankan mengembalikan URL melalui pengalihan aman, misalnya, dengan menggunakan kode status HTTP respons 302 melalui koneksiSSL. Untuk informasi selengkapnya tentang kode status HTTP respons 302, kunjungi RFC2616, bagian
Untuk menyelesaikan tugas-tugas ini, Anda dapat menggunakan HTTPSQuery API for AWS Identity and Access Management (IAM) dan AWS Security Token Service (AWS STS). Atau, Anda dapat menggunakan bahasa pemrograman, seperti Java, Ruby, atau C#, bersama dengan yang sesuai. AWS SDK
Topik
Contoh kode menggunakan API operasi IAM kueri
Anda dapat membuat sebuah URL yang memberi akses langsung kepada pengguna gabungan ke. AWS Management Console Tugas ini menggunakan IAM dan AWS STS HTTPS QueryAPI. Untuk informasi selengkapnya tentang membuat permintaan pertanyaan, lihat Membuat Permintaan Kueri.
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 akses kepada pengguna gabungan ke sumber daya Anda dari AWS Management Console
-
Autentikasi pengguna di sistem identitas dan otorisasi Anda.
-
Dapatkan kredensial keamanan sementara untuk pengguna. Kredensi sementara terdiri dari access key ID, secret access key, dan token sesi. Untuk informasi lebih lanjut tentang membuat kredensial sementara, lihat Kredensi keamanan sementara di IAM.
Untuk mendapatkan kredensi sementara, Anda menelepon AWS STS AssumeRoleAPI(disarankan) atau. GetFederationTokenAPI Untuk informasi selengkapnya tentang perbedaan antara API operasi ini, lihat Memahami API Opsi untuk Mendelegasikan Akses dengan Aman ke AWS Akun Anda
di Blog AWS Keamanan. penting
Saat Anda menggunakan kredensi keamanan sementara, Anda harus menentukan izin yang diberikan kredensi tersebut kepada pengguna yang memegang peran tersebut. GetFederationTokenAPI Untuk setiap API operasi yang dimulai
AssumeRole*
, Anda menggunakan IAM peran untuk menetapkan izin. Untuk API operasi lainnya, mekanisme bervariasi denganAPI. Untuk detail selengkapnya, lihat Izin untuk kredensial keamanan sementara. Sebagai tambahan, jika Anda menggunakanAssumeRole*
API operasi, Anda harus menyebutnya sebagai IAM pengguna dengan kredensi jangka panjang. Jika tidak, panggilan ke titik akhir federasi pada langkah 3 gagal. -
Setelah Anda mendapatkan kredensi keamanan sementara, masukkan ke dalam string JSON sesi 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 ***
"} -
URLdikode
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, fungsiURLEncoder.encode
di Java, atau fungsiCGI.escape
di Ruby. Lihat contoh-contoh ini nanti dalam topik ini. -
catatan
AWS mendukung POST permintaan di sini.
Kirim permintaan Anda ke titik akhir AWS federasi:
https://
region-code
.signin.aws.amazon.com/federationUntuk daftar kemungkinanĀ
region-code
nilai, lihat kolom Region di titik akhir AWS Masuk. Anda dapat secara opsional menggunakan titik akhir federasi AWS Masuk default:https://signin.aws.amazon.com/federation
Permintaan harus menyertakan
Action
danSession
parameter, dan (opsional) jika Anda menggunakanAssumeRole*
APIoperasi,SessionDuration
HTTP parameter seperti yang ditunjukkan pada 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 GET permintaan.
SessionDuration
HTTPParameter ini menentukan durasi sesi konsol. Ini terpisah dari durasi kredensial sementara yang Anda tentukan menggunakan parameterDurationSeconds
. Anda dapat menentukan nilai maksimalSessionDuration
adalah 43.200 (12 jam). JikaSessionDuration
parameter tidak ada, sesi secara default menjadi durasi kredenal yang Anda ambil dari langkah 2 (yang AWS STS secara default menjadi satu jam). Lihat dokumentasiAssumeRole
API untuk rincian tentang cara menentukan durasi menggunakanDurationSeconds
parameter. Kemampuan untuk membuat sesi konsol yang lebih lama dari satu jam bersifat intrinsik bagigetSigninToken
operasi titik akhir federasi.catatan
-
Jangan gunakan
SessionDuration
HTTP parameter jika Anda mendapatkan kredensi sementara dengan.GetFederationToken
Melakukan hal itu akan menyebabkan kegagalan operasi. -
Menggunakan kredensi untuk satu peran untuk mengasumsikan peran berbeda disebut rantai peran. 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 EC2 instans, aplikasi tersebut tidak terkena batasan ini.
Saat Anda mengaktifkan sesi konsol dengan durasi yang diperpanjang, Anda meningkatkan risiko eksposur kredensial. Untuk membantu mengurangi risiko ini, Anda dapat segera menonaktifkan sesi konsol aktif untuk peran apa pun dengan memilih Mencabut Sesi di halaman konsol Ringkasan Peran. IAM Untuk informasi selengkapnya, lihat Mencabut kredensi IAM keamanan sementara peran.
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 JSON dokumen dengan
SigninToken
nilai. Ini akan terlihat serupa dengan contoh berikut.{"SigninToken":"
*** the SigninToken string ***
"} -
-
catatan
AWS mendukung POST permintaan di sini.
Terakhir, buat URL yang dapat digunakan oleh pengguna gabungan Anda untuk mengakses file. AWS Management Console URLIni adalah URL titik akhir federasi yang sama yang Anda gunakan diTahapĀ 5, 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
Instruksi berikut dalam langkah ini hanya berfungsi menggunakan GETAPI.
Contoh berikut menunjukkan seperti URL apa akhir itu. URLIni berlaku selama 15 menit sejak dibuat. Kredensi keamanan sementara dan sesi konsol yang disematkan di dalamnya valid selama durasi yang Anda tentukan di
SessionDuration
HTTP parameter saat Anda memintanya untuk pertama kali. URLhttps://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
Contoh berikut menunjukkan cara menggunakan Python untuk secara terprogram menyusun sebuah URL yang memberikan akses langsung kepada pengguna gabungan ke. AWS Management Console Berikut ini adalah dua contoh:
-
Federasi melalui GET permintaan untuk AWS
-
Federasi melalui POST permintaan untuk AWS
Kedua contoh menggunakan AWS SDK for Python (Boto3)
Gunakan GET Permintaan
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 federated user # 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 POST Permintaan
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 federated user # 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);
Contoh kode menggunakan Java
Contoh berikut menunjukkan cara menggunakan Java untuk secara terprogram menyusun URL yang memberikan akses langsung kepada pengguna gabungan ke. AWS Management Console Cuplikan kode berikut menggunakan AWS SDKuntuk
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;