AWS 콘솔에 커스텀 아이덴티티 브로커 접근 활성화
AWS 콘솔에 커스텀 아이덴티티 브로커 접근 활성화 (Enable custom identity broker access to the AWS console)
조직의 네트워크에 로그인하는 사용자가 AWS Management Console에 안전하게 접근할 수 있게 하는 URL을 만드는 코드를 작성하고 실행할 수 있어요. URL은 AWS에서 받는 로그인 토큰을 포함하며, 이 토큰이 사용자를 AWS에 인증해요. 결과 콘솔 세션은 페더레이션 때문에 별도의 AccessKeyId를 포함할 수 있어요. 페더레이션 로그인의 접근 키 사용을 관련 CloudTrail 이벤트로 추적하려면 AWS CloudTrail로 IAM 및 AWS STS API 호출 로깅과 AWS Management Console 로그인 이벤트를 참고하세요.
출처: 문서
본문
참고
조직이 SAML 호환 아이덴티티 프로바이더(IdP)를 사용한다면 코드를 작성하지 않고도 콘솔 접근을 설정할 수 있어요. 이는 Microsoft의 Active Directory Federation Services나 오픈소스 Shibboleth 같은 프로바이더에서 동작해요. 자세한 내용은 SAML 2.0 페더레이션 프린시펄의 AWS Management Console 접근 활성화를 참고하세요.
조직의 사용자가 AWS Management Console에 접근할 수 있게 하려면 다음 단계를 수행하는 커스텀 아이덴티티 브로커를 만들 수 있어요.
- 사용자가 로컬 아이덴티티 시스템에서 인증됐는지 확인해요.
- AWS Security Token Service(AWS STS)
AssumeRole(권장) 또는GetFederationTokenAPI 작업을 호출해 사용자의 임시 보안 자격 증명을 얻어요. 역할을 수임하는 여러 방법은 역할 수임 방법을, 보안 자격 증명을 얻을 때 선택적 세션 태그를 전달하는 방법은 AWS STS에서 세션 태그 전달을 참고하세요.- 역할의 임시 보안 자격 증명을 얻기 위해
AssumeRole*API 작업 중 하나를 사용한다면, 호출에DurationSeconds파라미터를 포함할 수 있어요. 이 파라미터는 역할 세션의 지속 시간을 900초(15분)부터 역할의 최대 세션 지속 시간 설정까지 지정해요.AssumeRole*작업에서DurationSeconds를 사용할 때는 장기 자격 증명을 가진 IAM 사용자로 호출해야 해요. 그렇지 않으면 3단계의 페더레이션 엔드포인트 호출이 실패해요. 역할의 최대 값을 보거나 변경하는 방법은 역할의 최대 세션 지속 시간 업데이트를 참고하세요. GetFederationTokenAPI 작업으로 자격 증명을 얻는다면 호출에DurationSeconds파라미터를 포함할 수 있어요. 이 파라미터는 역할 세션의 지속 시간을 지정해요. 값의 범위는 900초(15분)부터 129,600초(36시간)까지예요. 이 API 호출은 IAM 사용자의 장기 AWS 보안 자격 증명으로만 만들 수 있어요. AWS 계정 루트 사용자 자격 증명으로도 호출할 수 있지만 권장하지 않아요. 루트 사용자로 호출하면 기본 세션이 1시간 동안 지속돼요. 또는 900초(15분)부터 3,600초(1시간)까지 세션을 지정할 수 있어요.
- 역할의 임시 보안 자격 증명을 얻기 위해
- AWS 페더레이션 엔드포인트를 호출하고 임시 보안 자격 증명을 제공해 로그인 토큰을 요청해요.
- 토큰을 포함한 콘솔 URL을 구성해요.
- URL에서
AssumeRole*API 작업 중 하나를 사용했다면SessionDurationHTTP 파라미터를 포함할 수 있어요. 이 파라미터는 콘솔 세션의 지속 시간을 900초(15분)부터 43,200초(12시간)까지 지정해요. - URL에서
GetFederationTokenAPI 작업을 사용했다면DurationSeconds파라미터를 포함할 수 있어요. 이 파라미터는 페더레이션 콘솔 세션의 지속 시간을 지정해요. 값의 범위는 900초(15분)부터 129,600초(36시간)까지예요. -
참고
SessionDuration은 수임 중인 역할의 최대 세션 지속 시간 설정보다 크거나 같을 수 없어요. 예를 들어 수임하려는 역할의 최대 세션 지속 시간을 5시간으로 설정했다면SessionDuration파라미터는 16,524초(4시간 59초)가 될 수 있어요.GetFederationToken으로 임시 자격 증명을 얻을 때는SessionDurationHTTP 파라미터를 사용하지 마세요. 작업이 실패해요. 한 역할의 자격 증명으로 다른 역할을 수임하는 것을 **역할 체이닝(role chaining)**이라고 해요. 역할 체이닝을 사용하면 새 자격 증명은 최대 1시간으로 제한돼요. EC2 인스턴스에서 실행되는 애플리케이션에 권한을 부여하기 위해 역할을 사용할 때는 이 제한이 적용되지 않아요. 역할 체이닝으로 임시 자격 증명을 얻을 때는SessionDurationHTTP 파라미터를 사용하지 마세요. 작업이 실패해요.
- URL에서
- URL을 사용자에게 주거나 사용자를 대신해 URL을 호출해요.
페더레이션 엔드포인트가 제공하는 URL은 생성된 후 15분 동안 유효해요. 이는 URL과 연관된 임시 보안 자격 증명 세션의 지속 시간(초)과 달라요. 그 자격 증명은 생성 시 지정한 기간 동안, 생성된 시점부터 유효해요.
중요
URL은 연관된 임시 보안 자격 증명에 권한을 활성화했다면 AWS Management Console을 통해 AWS 리소스에 접근을 부여해요. 이런 이유로 URL을 비밀로 취급해야 해요. SSL 연결을 통한 302 HTTP 응답 상태 코드 사용 같은 보안 리다이렉트로 URL을 반환하길 권장해요. 302 HTTP 응답 상태 코드에 대한 자세한 내용은 RFC 2616, 섹션 10.3.3을 참고하세요.
이 작업을 완료하려면 IAM(AWS Identity and Access Management)과 AWS STS의 HTTPS Query API를 사용할 수 있어요. 또는 Java, Ruby, C# 같은 프로그래밍 언어를 적절한 AWS SDK와 함께 사용할 수 있어요. 각 방법은 다음 주제에 설명돼요.
다루는 주제
- IAM query API 작업을 사용한 예시 코드
- Python을 사용한 예시 코드
- Java를 사용한 예시 코드
- URL 구성 방법을 보여주는 예시 (Ruby)
IAM query API 작업을 사용한 예시 코드
역할과 페더레이션 프린시펄에게 AWS Management Console에 직접 접근을 주는 URL을 구성할 수 있어요. 이 작업은 IAM과 AWS STS HTTPS Query API를 사용해요. Query 요청을 만드는 방법은 Query 요청 만들기를 참고하세요.
참고
다음 절차에는 텍스트 문자열의 예시가 포함돼요. 가독성을 위해 일부 긴 예시에 줄 바꿈이 추가됐어요. 직접 사용할 때는 줄 바꿈을 제거해야 해요.
역할과 페더레이션 프린시펄에게 AWS Management Console에서 리소스 접근 권한 부여
- 아이덴티티·인가 시스템에서 사용자를 인증해요.
- 사용자의 임시 보안 자격 증명을 얻어요. 임시 자격 증명은 접근 키 ID, 비밀 접근 키, 세션 토큰으로 구성돼요. 임시 자격 증명 생성에 대한 자세한 내용은 IAM의 임시 보안 자격 증명을 참고하세요.
- 임시 자격 증명을 얻으려면 AWS STS
AssumeRoleAPI(권장) 또는GetFederationTokenAPI를 호출해요. 이 API 작업들의 차이에 대한 자세한 내용은 AWS Security Blog의 AWS 계정에 접근을 안전하게 위임하는 API 옵션 이해를 참고하세요. -
중요
GetFederationTokenAPI로 임시 보안 자격 증명을 만들 때는, 자격 증명이 역할을 수임하는 사용자에게 부여할 권한을 지정해야 해요.AssumeRole*로 시작하는 API 작업의 경우 IAM 역할로 권한을 할당해요. 다른 API 작업의 경우 메커니즘이 API마다 달라요. 자세한 내용은 임시 보안 자격 증명의 권한을 참고하세요. 또한AssumeRole*API 작업을 사용한다면 장기 자격 증명을 가진 IAM 사용자로 호출해야 해요. 그렇지 않으면 3단계의 페더레이션 엔드포인트 호출이 실패해요.
- 임시 자격 증명을 얻으려면 AWS STS
- 임시 보안 자격 증명을 얻은 뒤, 이를 JSON 세션 문자열로 만들어 로그인 토큰과 교환해요. 다음 예시는 자격 증명을 인코딩하는 방법을 보여줘요. 자리표시자 텍스트를 이전 단계에서 받은 자격 증명의 적절한 값으로 바꿔요.
{ "sessionId": "*** temporary access key ID ***", "sessionKey": "*** temporary secret access key ***", "sessionToken": "*** session token ***" } - 이전 단계의 세션 문자열을 URL 인코딩해요. 인코딩하는 정보가 민감하므로, 이 인코딩에 웹 서비스를 사용하지 않는 것을 권장해요. 대신 개발 도구 키트의 로컬 설치 함수나 기능으로 안전하게 인코딩해요. Python의
urllib.quote_plus함수, Java의URLEncoder.encode함수, Ruby의CGI.escape함수를 사용할 수 있어요. 이 문서의 뒷부분 예시를 참고하세요.-
참고
AWS는 여기서 POST 요청을 지원해요.
-
- 요청을 AWS 페더레이션 엔드포인트
https://region-code.signin.aws.amazon.com/federation으로 보내요.- 가능한
region-code값 목록은 AWS Sign-In 엔드포인트의 Region 열을 참고하세요. 선택적으로 기본 AWS Sign-In 페더레이션 엔드포인트https://signin.aws.amazon.com/federation을 사용할 수 있어요. - 요청은
Action과Session파라미터를 포함해야 하며,AssumeRole*API 작업을 사용했다면 (선택적으로)SessionDurationHTTP 파라미터를 다음 예시처럼 포함해야 해요.
Action = getSigninToken SessionDuration = time in seconds Session = *** the URL encoded JSON string created in steps 3 & 4 ***-
참고
이 단계의 다음 지침은 GET 요청에서만 동작해요. SessionDurationHTTP 파라미터는 콘솔 세션의 지속 시간을 지정해요. 이는DurationSeconds파라미터로 지정하는 임시 자격 증명의 지속 시간과 별개예요.SessionDuration최대 값을 43,200(12시간)으로 지정할 수 있어요.SessionDuration파라미터가 없으면 세션은 2단계에서 AWS STS에서 검색한 자격 증명의 지속 시간(기본 1시간)으로 기본 설정돼요.DurationSeconds파라미터로 기간을 지정하는 방법은AssumeRoleAPI의 문서를 참고하세요. 1시간보다 긴 콘솔 세션을 만드는 기능은 페더레이션 엔드포인트의getSigninToken작업에 내재돼 있어요.-
참고
SessionDuration은 수임 중인 역할의 최대 세션 지속 시간 설정보다 크거나 같을 수 없어요.GetFederationToken으로 임시 자격 증명을 얻을 때는SessionDurationHTTP 파라미터를 사용하지 마세요. 작업이 실패해요. 역할 체이닝으로 임시 자격 증명을 얻을 때는SessionDurationHTTP 파라미터를 사용하지 마세요. 작업이 실패해요. - 연장된 지속 시간으로 콘솔 세션을 활성화하면 자격 증명 노출 위험이 높아져요. 이 위험을 완화하는 데 도움이 되도록 IAM 콘솔 페이지의 Role Summary에서 Revoke Sessions를 선택해 어떤 역할의 활성 콘솔 세션이든 즉시 비활성화할 수 있어요. 자세한 내용은 IAM 역할 임시 보안 자격 증명 철회를 참고하세요.
- 다음은 요청이 어떤 모습인지 보여주는 예시예요. 가독성을 위해 줄이 잘렸지만 한 줄 문자열로 제출해야 해요.
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 - 가능한
- 페더레이션 엔드포인트의 응답은
SigninToken값을 가진 JSON 문서예요. 다음 예시와 비슷해요.{ "SigninToken": "*** the SigninToken string ***" }-
참고
AWS는 여기서 POST 요청을 지원해요.
-
- 마지막으로 사용자가 AWS Management Console에 접근하는 데 사용할 URL을 만들어요. URL은 5단계에서 사용한 페더레이션 URL 엔드포인트에 다음 파라미터를 더한 것이에요.
?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 ***-
참고
이 단계의 다음 지침은 GET API에서만 동작해요. - 다음 예시는 최종 URL이 어떤 모습인지 보여줘요. URL은 생성된 시점부터 15분 동안 유효해요. URL에 내장된 임시 보안 자격 증명과 콘솔 세션은 처음 요청할 때
SessionDurationHTTP 파라미터로 지정한 기간 동안 유효해요.
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 -
Python을 사용한 예시 코드
다음 예시는 Python으로 사용자에게 AWS Management Console에 직접 접근을 주는 URL을 프로그래밍 방식으로 구성하는 방법을 보여줘요. 두 가지 예시가 있어요.
- AWS에 GET 요청으로 페더레이션
- AWS에 POST 요청으로 페더레이션
두 예시 모두 AWS SDK for Python(Boto3)과 AssumeRole API로 임시 보안 자격 증명을 얻어요.
AssumeRoleSession 자격 증명이 역할 체이닝 출처라면 SessionDuration을 포함하지 마세요. SessionDuration을 포함하면 작업이 실패해요.
GET 요청 사용
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 AWS account,
# 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.
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.
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)
POST 요청 사용
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'
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.
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...")
Java를 사용한 예시 코드
다음 예시는 Java로 사용자에게 AWS Management Console에 직접 접근을 주는 URL을 프로그래밍 방식으로 구성하는 방법을 보여줘요. 다음 코드 스니펫은 AWS SDK for Java를 사용해요.
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. */
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/.
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());
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;
URL 구성 방법을 보여주는 예시 (Ruby)
다음 예시는 Ruby로 사용자에게 AWS Management Console에 직접 접근을 주는 URL을 프로그래밍 방식으로 구성하는 방법을 보여줘요. 이 코드 스니펫은 AWS SDK for Ruby를 사용해요.
require 'rubygems'
require 'json'
require 'open-uri'
require 'cgi'
require 'aws-sdk'
# Create a new STS instance
sts = Aws::STS::Client.new()
# The following call creates a temporary session that returns
# temporary security credentials and a session token.
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.
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.
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.
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
더 알아보기 (Learn more)
- 역할 수임 방법 — 역할을 수임하는 다양한 방법을 확인해 보세요.
- AWS STS에서 세션 태그 전달 — 자격 증명을 얻을 때 세션 태그를 전달하는 방법을 살펴보세요.
- 임시 보안 자격 증명 — 임시 자격 증명의 개념을 참고하세요.