開発プラットフォームまたはツールプラットフォームに URL を埋め込むことで、Data Management (DMS) コンソールへのログイン不要アクセスを提供できます。これにより、ユーザーは Alibaba Cloud アカウントまたは RAM ユーザーとしてサインインすることなく、DMS コンソールおよびその機能に直接アクセスできます。本トピックでは、ログイン不要アクセス用の URL を作成する方法について説明します。
操作手順
-
DMS にアクセスするための RAM ロールを作成し、権限を付与します。その後、RAM ユーザーを作成し、そのユーザーに
AliyunSTSAssumeRoleAccess権限を付与します。詳細については、「前提条件」をご参照ください。 -
ロールを偽装して一時的な認証情報を取得します。これらの認証情報(AccessKey ID、AccessKey Secret、セキュリティトークン)は、
SigninTokenの取得に使用されます。詳細については、「ステップ 1:一時的な認証情報の取得」をご参照ください。 -
ログイン不要アクセス URL の作成に必要な
SigninTokenを取得します。詳細については、「ステップ 2:SigninToken の取得」をご参照ください。 -
ログイン不要アクセス URL を作成します。詳細については、「ステップ 3:ログイン不要アクセス URL の作成」をご参照ください。
前提条件
以下のすべての前提条件を満たしている場合は、ステップ 1 に進んでください。
-
DMS にアクセスするための RAM ロールを作成します。詳細については、「信頼された Alibaba Cloud アカウント向け RAM ロールの作成」をご参照ください。
-
RAM ロールに権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。
-
RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。
-
RAM ユーザーに
AliyunSTSAssumeRoleAccess権限を付与します。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
ステップ 1:一時的な認証情報の取得
AssumeRole 操作を呼び出して、RAM ロールを偽装することで一時的な認証情報を取得します。AssumeRole 操作の詳細については、「AssumeRole」をご参照ください。
以下の Java コードがその例です。
/**
* AssumeRole 操作を呼び出して一時的な認証情報を取得します。
*/
private static AssumeRoleResponse.AssumeRoleResponseBodyCredentials assumeRole(
String accountId, String accessKeyId,
String accessKeySecret, String ramRoleArn) throws Exception {
// STS クライアントを構成します。
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret)
// 注記:セキュリティトークンサービス (STS) のエンドポイントはグローバルで固定されています。通常は sts.cn-hangzhou.aliyuncs.com エンドポイントを使用します。
.setEndpoint("sts.cn-hangzhou.aliyuncs.com");
Client client = new Client(config);
AssumeRoleRequest request = new AssumeRoleRequest();
// ARN (Alibaba Cloud リソースネーム) は、RAM ロールを指定するグローバルなリソース識別子です。
request.setRoleArn(ramRoleArn);
// 異なるトークンを区別するためのカスタムパラメーターです。ユーザー単位のアクセス監査に使用できます。形式:^[a-zA-Z0-9\.@\-_]+$
request.setRoleSessionName("session-name");
request.setDurationSeconds(3600L); // 有効期間を秒単位で明示的に設定します。
RuntimeOptions runtime = new RuntimeOptions();
AssumeRoleResponse response = client.assumeRoleWithOptions(request, runtime);
return response.getBody().getCredentials();
}
ステップ 2:SigninToken の取得
GetSigninToken 操作を呼び出して SigninToken を取得します。
以下の Java コードがその例です。
/**
* セキュリティトークンを使用して SigninToken を取得します。
*
* @param accesskeyId
* @param accessKeySecret
* @param securityToken
* @return
* @throws IOException
* @throws URISyntaxException
*/
private static String getSignInToken(String accesskeyId, String accessKeySecret, String securityToken)
throws IOException, URISyntaxException {
URIBuilder builder = new URIBuilder("http://signin.aliyun.com/federation");
builder.setParameter("Action", "GetSigninToken")
.setParameter("AccessKeyId", accesskeyId)
.setParameter("AccessKeySecret", accessKeySecret)
.setParameter("SecurityToken", securityToken)
.setParameter("TicketType", "normal");
HttpGet request = new HttpGet(builder.build());
CloseableHttpClient httpclient = HttpClients.createDefault();
try (CloseableHttpResponse response = httpclient.execute(request)) {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String context = EntityUtils.toString(response.getEntity());
JSONObject jsonObject = JSON.parseObject(context);
return jsonObject.getString("SigninToken");
} else {
System.out.println(response.getStatusLine());
}
}
return null;
}
ステップ 3:ログイン不要アクセス URL の作成
各 SigninToken は 1 回限り使用可能です。別のログイン不要アクセス URL を作成するには、新しいトークンを取得する必要があります。
以下の Java コードがその例です。
リクエスト例:
private static String getDmsLoginUrl(String pageUrl, String signInToken) throws URISyntaxException {
URIBuilder builder = new URIBuilder("http://signin.aliyun.com/federation");
builder.setParameter("Action", "Login");
// セッションの有効期限切れ時にユーザーがリダイレクトされる URL です。通常は、302 リダイレクトが構成されたご利用の Web サーバー上の URL です。
builder.setParameter("LoginUrl", "https://signin.aliyun.com/login.htm");
// ユーザーがアクセスする DMS ページです。
builder.setParameter("Destination", pageUrl);
builder.setParameter("SigninToken", signInToken);
HttpGet request = new HttpGet(builder.build());
return request.getURI().toString();
}
応答例:
Expiration: 2020-11-30T06:16:20Z
Access Key Id: STS.NT7L6Jp5Y8W9LNvGQku2x****
Access Key Secret: 4nU8F6rv8MCDR8tygMDnXvN9yCNBCVrxnqArj1n1****
Security Token: CAIS/gF1q6Ft5B2yfSjIr5e****+nep4j5XSTmjHo1E+eb1Ujo7xijz2IH9IeXhpB****/43nWlU7PkYlrloRoReREvCKM1565kSqFn6O11Qf****+5qsoasPETOITyZtZagToeUZdfZfejXGDKgvyRvwLz****/Vli+S/OggoJmadJlNWvRL0AxZrFsKxBltdUROF****+pKWSKuGfLC1dysQcO4gEWq4bHm5zAs0OH1QOhlrVP+N+qfqLJNZc8YM1NNP6ux/Fze6b71ypd1gNH7q8ejtYfpmua74jBXgUAuU3faraOrYd1SwZ9Z7knH****/n6ifBjpvw9Hlk0R9OcVhqAAXpZx****+STGa8vctRwyTWdMM5LByes3cr1D46jaj0****/lTMkoXCwjMlCs7sc+DA9xjJCcl57eKC7A3ThnJAWQyyeKZfIGgeHN7yUS5ND8r7TBn6bMUqwvfVX****/cbkzBX6iV6jrataHZPZdtQYHH6GgvQ5XZUZJjoD****
Your SigninToken is: 06ec409b9d8c48f6ac5dcd18a0513ee1dhUkhcRn5CMsDqffC4wxsuFt9xjYtYePmYTHEWSMVKLFyXXnSq3IUbon1v46wCmKPwrAejDvw2i8rilolPSuxpKRDxz****
Your PageUrl is : http://signin.aliyun.com/federation?Action=Login&LoginUrl=https%3A%2F%2Fsignin.aliyun.com%2Flogin.htm&Destination=https%3A%2F%2Fdms.aliyun.com&SigninToken=06ec409b9d8c48f6ac5dcd18a0513ee1dhUkhcRn5CMsDqffC4wxsuFt9xjYtYePmYTHEWSMVKLFyXXnSq3IUbon1v46wCmKPwrAejDvw2i8rilolPSuxpKRDxzD****
以下の例は、ログイン不要アクセス URL (PageUrl) のフォーマットを示しています。
http://signin.aliyun.com/federation?Action=Login
&LoginUrl=<your-redirect-url-on-expiration>
&Destination=<your-target-dms-url>
&SigninToken=<your-signin-token>
Destination パラメーターの DMS ページ URL は、TicketType の値によって異なります。
-
値が
normalの場合、対応する DMS ドメインはhttp://dms.aliyun.comです。 -
値が
miniの場合、通常は BID 仮想オペレーター向けに使用され、対応するドメインはhttp://dms-ent4service.aliyun.comです。
次のステップ
ログイン不要アクセス URL (PageUrl) を開いて、DMS コンソールにアクセスします。ログイン後、ユーザー ID は DMS コンソールの右上隅に {RAM ロール名}/{RoleSessionName} の形式で表示されます(例:aliyunlogintest/session-name-123)。