Simple Log Serviceを使用すると、クエリや分析ページ、ダッシュボードページなどのコンソールページを自己管理型webアプリケーションに埋め込むことができます。 これにより、他のユーザーとページを共有でき、ユーザーはパスワードなしのアクセスモードでログデータを表示できます。 共有ページのURLは、ログオンフリーURLと呼ばれる。
制御ポリシー機能の動作
ユーザーがパスワードフリーモードでログデータを表示できるようにするには、チケットソリューションの使用を推奨しました。 詳細については、「コンソールページの埋め込みとログデータの共有 (新バージョン) 」をご参照ください。
Resource Access Management (RAM) によって提供されるシングルサインオン (SSO) サービス (signin.aliyun.com
) は、ログオンURLへのログオントークンの統合をサポートします。 ユーザーがログオンなしのURLにアクセスすると、まずSSOが呼び出されます。 SSOが有効なログオントークンを検出すると、ユーザーは指定されたページにリダイレクトされます。 このようにして、ユーザーはパスワードなしのアクセスモードでページ上のログデータを表示できます。 次の図は、アクセスプロセスを示しています。
ユーザーがwebアプリケーションにアクセスします。
webサーバーは、Security Token Service (STS) にアクセスして、必要なRAMユーザーのAccessKeyペアを使用してセキュリティトークンを取得します。
STSはセキュリティトークンを返します。
webサーバーは、セキュリティトークンを使用してSSOにアクセスし、ログオントークンを取得します。
SSOはログオントークンを返します。
webサーバーは、Simple Log ServiceコンソールのページにログオンなしのURLを作成し、そのURLをクライアントに返します。 クライアントは、ログオンなしのURLを使用してページにアクセスします。
注意事項
コンソールページ埋め込み機能を使用する前に、次の項目に注意してください。
この機能は、RAMロールベースのアクセスのみをサポートします。
STSで生成されたトークンは一時的な資格情報です。 認証情報を使用して、ブラウザで1回だけ埋め込みページのログイン不要URLにアクセスできます。 資格情報を使用してURLに繰り返しアクセスすると、SigninToken関連のエラーが報告されます。
検証ロジックはバックエンドで使用されます。 SigninTokenの有効期限が切れる5分前に、埋め込みページのログオンフリーURLを再生成することを推奨します。 ログオンなしのURLを時間内に再生成しないと、SigninTokenの有効期限が切れると、埋め込みページへのアクセスが無効になり、SigninToken関連のエラーが報告されます。
完全なクエリと分析ページ、クエリページ、およびダッシュボードページのみを埋め込むことができます。 アラートページを埋め込むことはできません。
手順
保留中の共有URLの準備
共有するクエリと分析ページまたはダッシュボードページのURLを取得します。
説明完全なクエリと分析ページ、クエリページ、およびダッシュボードページのみを埋め込むことができます。 アラートページを埋め込むことはできません。
完全なクエリと分析ページ:
https://sls.console.aliyun.com/lognext/project/<Project name>/logsearch/<Logstore name>?slsRegion=<Region of the project>&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
検索ページ
https://sls.console.aliyun.com/lognext/project/<Project name>/logsearch/<Logstore name>?slsRegion=<Region of the project>&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
ダッシュボードページ
https://sls.console.aliyun.com/lognext/project/<Project name>/dashboard/<Dashboard ID>?slsRegion=<Region of the project>&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
説明上記のダッシュボードIDは、ダッシュボードページのURLにのみ表示されます。 IDはダッシュボードに表示される名前ではありません。
フルスタック表示ページ
この例では、トレース分析ページが使用されます。 詳細については、「完全スタック監視ページの埋め込み」をご参照ください。
https://sls4service.console.aliyun.com/lognext/app/observability/trace/<Project name>/<ID of a Full-stack Observability instance>?resource=/trace/<ID of a Full-stack Observability instance>/explorer&hideTopbar=true&isShare=true
URLのホストアドレスを
sls4service.console.aliyun.com
に置き換えます。たとえば、Simple Log Serviceコンソールで次のURLを使用してアクセスできるダッシュボードページを共有できます。
https://sls.console.aliyun.com/lognext/project/project_name/dashboard/dashboard-1651116703628-54041
ホストアドレス
sls.console.aliyun.com
をsls4service.console.aliyun.com
に置き換えて、次の保留共有URLを生成します。https://sls4service.console.aliyun.com/lognext/project/project_name/dashboard/dashboard-1651116703628-54041
RAMユーザーとRAMロールの作成
RAMユーザーを作成し、RAMロールを引き受ける権限を付与します。 次に、RAMロールを作成し、ダッシュボードページなど、共有するページにアクセスする権限を付与します。
RAMユーザーの作成
RAM ユーザーを作成します。 詳細については、「RAMユーザーを作成し、RAMユーザーにSimple Log Serviceへのアクセスを許可する」をご参照ください。 RAMユーザーの作成時に [OpenAPI Access] を選択します。 RAMユーザーの作成後、ユーザーのAccessKeyペアを記録します。
RAMユーザーにRAMロールを引き受ける権限を付与します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*" } ] }
RAMロールの作成
現在のAlibaba Cloudアカウント内のRAMユーザーまたはRAMロールが引き受けることができるRAMロールを作成します。 詳細については、「信頼できるエンティティがAlibaba CloudアカウントであるRAMロールを作成し、RAMロールにSimple Log Serviceにアクセスする権限を付与する」をご参照ください。
共有するページのURLにアクセスする権限をRAMロールに付与します。 たとえば、Simple Log Serviceに対して読み取り専用権限を付与できます。
{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*", "log:Query*" ], "Resource": "*", "Effect": "Allow" } ] }
RAMロールのAlibaba Cloudリソース名 (ARN) を
acs:ram::137 ****** 44:role/role-Name
形式で記録します。
ログオン不要URLの生成
共有するコンソールページのログインなしのURLを生成して、コンソールページへのパスワードなしのアクセスを許可します。 JavaやPythonなどのプログラミング言語で記述されたサンプルコードの詳細については、「サンプルコード」をご参照ください。
RAMユーザーの
AccessKey
を使用してSTSにアクセスし、セキュリティトークンを取得します。 トークンの有効期間は、ビジネス要件に基づいて指定できます。 サンプルコード:DefaultProfile.addEndpoint("", "", "Sts", stsHost); IClientProfile profile = DefaultProfile.getProfile("", <AccessKeyId>, <AccessKeySecret>); DefaultAcsClient client = new DefaultAcsClient(profile); AssumeRoleRequest assumeRoleReq = new AssumeRoleRequest(); assumeRoleReq.setRoleArn(roleArn); // The ARN of the RAM role. assumeRoleReq.setRoleSessionName(roleSession); assumeRoleReq.setMethod(MethodType.POST); assumeRoleReq.setDurationSeconds(3600L); AssumeRoleResponse assumeRoleRes = client.getAcsResponse(assumeRoleReq);
SSOにアクセスし、ログオントークンを取得します。 次の例は、アクセス要求の形式を示しています。
TicketType
の値がmini
であることを確認します。http://signin.aliyun.com/federation?Action=GetSigninToken &AccessKeyId=<The AccessKey ID of the temporary AccessKey pair that is returned by STS> &AccessKeySecret=<The AccessKey secret of the temporary AccessKey pair that is returned by STS> &SecurityToken=<The token that is returned by STS> &TicketType=mini
返されるデータ:
{ "RequestId": "02b47c77c5fd48789d23773af853e9f7_936be_1706585994094_1.229", "SigninToken": "svX6LGcBbWLExKD5hcwdLu6RsLQbv36fWZN36WhxkTXpTcDpmzs2K6X8uFvCqGsBTU4KWJMffYz2rAVbdJXHMECgUfyzS869wh2DBdFEQo3e2fJgZ5YtcMSVnoX7pterS2f7926jFvdBXVFEF54JkUCMrDAutNRv1u7ZReC7v8oQoG5UmjJBbHUyvLTn5UDDvDfNowMVyRskrZRFUKT2qAMZ4Gnc****" }
ログオントークンを保留中の共有URLに追加して、ログオンなしのURLを生成します。
http://signin.aliyun.com/federation?Action=Login &LoginUrl=<The URL to which you are redirected when your logon fails. We recommend that you specify the URL to which you are redirected when the HTTP status code 302 is returned on your self-managed application. You must use encodeURL to transcode the URL. > &Destination=<The pending-sharing URL of the query and analysis page or dashboard page that you want to share. If parameters are configured, you must use encodeURL to transcode the parameters. > &SigninToken=<The logon token that is obtained. You must use encodeURL to transcode the token. >
ログイン不要のURLをiFrameとして埋め込む
ログイン不要のURLをwebページにiFrameとして埋め込みます。
ブラウザで初めてログオン不要なURLにアクセスするときに、そのURLをテストできます。 テストが完了すると、使用されるログオントークンは無効になります。 ログオンなしのURLを再生成する必要があります。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Share a console page</title>
</head>
<body>
<iframe width="1280" height="720" src="Logon-free URL"> </iframe>
</body>
</html>
サンプルコード
PHP、Python、およびGoで記述されたサンプルコードの詳細については、次のリンクを参照してください。
次のサンプルコードは、JavaでのMaven依存関係を示しています。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-sts</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.5.0</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.68.noneautotype</version> </dependency>
よくある質問
問題の説明
ログオンなしのURLがwebページにiFrameとして埋め込まれている場合、次のエラーが報告されます。
Refused to frame 'https://signin.aliyun.com/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' *.aliyun.com"
原因
セキュリティ上の理由から、クロスドメインiFramesはサポートされていません。
解決策
Content-Security-Policy (CSP) ヘッダーを変更します。
CSPディレクティブで正確なドメイン名またはワイルドカードドメイン名を指定して、指定したWebサイトからページを埋め込むことができます。 たとえば、次のCSPディレクティブを使用して、
aliyun.com
および* .aliyun.com
Webサイトからページを埋め込むことができます。Content-Security-Policy: frame-ancestors 'self' aliyun.com *.aliyun.com;
CSPディレクティブでワイルドカード文字 (*) を使用して、すべてのWebサイトからページを埋め込むことができます。 例:
Content-Security-Policy: frame-ancestors *;
すべてのWebサイトからページの埋め込みを許可すると、セキュリティリスクが発生します。 必要な場合を除き、すべてのWebサイトからのページ埋め込みを許可しないことを推奨します。 詳細については、https://content-security-policy.com/ をご覧ください。