シングルサインオンにAmazon Web Servicesを構成する
Auth0をAWSと統合すると、サポートされているIDプロバイダーを使って、ユーザーがAWSにログインできるようになります。
SSOにAWSを構成するには、以下の手順を完了させる必要があります。
AWSで外部IDプロバイダーを作成します。
Auth0アプリケーションにSAML2 Webアプリのアドオンを構成します。
AWSのIDプロバイダーの構成を完了させます。
AWS IAMロールを作成します。
AWSロールをユーザーにマッピングします。
AWSで外部のIDプロバイダーを作成します。
AWS提供の「外部 ID プロバイダーを管理する」ガイドに従って、AWSで外部IDプロバイダーを設定しますが、以下の1つだけ変更します。
AWSのメタデータファイルをダウンロードする代わりに、[個々のメタデータ値を表示]をクリックします。
AWS SSO発行者URLとAWS SSO ACS URLの値をコピーします。これらは次のセクションで使用します。
このページはブラウザーで開いたままにしておいてください。後のセクションで構成を完了させる必要があります。
Auth0にSAML SSOを構成する
Auth0 Dashboardを使用して、アプリケーションにSAML2 Webアプリのアドオンを構成します。詳細については、「Amazon Web ServicesにAuth0をIDプロバイダーとして設定する」をお読みください。
AWSのIDプロバイダーの構成を完了させる
ブラウザーで開いたままにしてあったAWS SSOのIDプロバイダーページに戻ります。
前のセクションでダウンロードして保存したメタデータファイルをアップロードします。
IDソースの変更内容を見直して、確認します。
AWS IAMロールを作成する
プロバイダーを使用するには、ロールの信頼ポリシーにあるプロバイダーを使ってIAMロールを作成する必要があります。
サイドバーで、[アクセス管理]の[ロール]に移動します。[ロールの作成]をクリックします。
次のページで、信頼されたエンティティーのタイプを選択するよう求められます。[SAML 2.0フェデレーション]を選択します。
プロンプトが表示されたら、上記で作成したプロバイダーをSAMLプロバイダーとして設定します。[プログラムによるアクセスと AWS Management Console によるアクセスを許可する]を選択します。[次へ]をクリックして続行します。
[アクセス許可ポリシーをアタッチする]ページで、ロールにアタッチする適切なポリシーを選択します。これにより、このロールを持つユーザーがAWSで付与されるアクセス権が決定されます。たとえば、ユーザーにIAMへの読み取り専用アクセスを付与するには、
IAMReadOnlyAccess
ポリシーをフィルターで絞り込んで選択します。完了したら、[次のステップ]をクリックします。3番目の[ロールの作成]画面は、[タグの追加]です。多数のロールを作成する予定の場合には、作成するロールを整理するためにタグを使うことができます。
[確認]ページで、[ロール名]を設定し、設定を確認します。以下のパラメーターの値を入力します。
フィールド 説明 Role name(ロール名) ロールの説明的な名前。 Role description(ロールの説明) ロールを使用する目的の説明。 [信頼されたエンティティー]と[ポリシー]の情報を確認してから、[ロールの作成]をクリックします。
AWSロールをユーザーにマッピングする
指定されたAWSロールは、AWSコンソールを含むリソースへのアクセスタイプを統括するIAMポリシーに関連付けられます。ロールとポリシーの詳細については、「IAMロールを作成する」をお読みください。
AWSロールをユーザーにマッピングするには、ルールを作成します。
上の例にあるコードのスニペットでは、function (user, context, callback) { user.awsRole = 'arn:aws:iam::951887872838:role/TestSAML,arn:aws:iam::951887872838:saml-provider/MyAuth0'; user.awsRoleSession = user.name; context.samlConfiguration.mappings = { 'https://aws.amazon.com/SAML/Attributes/Role': 'awsRole', 'https://aws.amazon.com/SAML/Attributes/RoleSessionName': 'awsRoleSession' }; callback(null, user, context); }
Was this helpful?
/user.awsRole
がAWSロールとIdPを識別します。AWSロールの識別子はカンマの前に、IdPの識別子はカンマの後にあります。ルールを使うと、これらの2つの値を複数の方法で取得できます。前の手順でAWSに作成した項目を左のサイドバーから選択すると、これらの値を取得することができます。IDプロバイダーと作成したロールの両方にARNがあり、これらをコンソールで選択すると、コピーできます。
上の例では、これらの値は両方ともルールに埋め込まれています。これらの値は、ユーザープロファイルに保管するか、他の属性を使って指定することもできます。たとえば、Active Directoryを使用している場合、ユーザーに関連付けられた
group
などのプロパティを、適切なAWSロールにマッピングすることができます。var awsRoles = { 'DomainUser': 'arn:aws:iam::951887872838:role/TestSAML,arn:aws:iam::95123456838:saml-provider/MyAuth0', 'DomainAdmins': 'arn:aws:iam::957483571234:role/SysAdmins,arn:aws:iam::95123456838:saml-provider/MyAuth0' }; user.awsRole = awsRoles[user.group]; user.awsRoleSession = user.email; context.samlConfiguration.mappings = { 'https://aws.amazon.com/SAML/Attributes/Role': 'awsRole', 'https://aws.amazon.com/SAML/Attributes/RoleSessionName': 'awsRoleSession', };
Was this helpful?
/
複数のロールをマッピングする
ロールのマッピングに配列を割り当てることもできます(その場合はawsRoles: role1
ではなく、awsRoles = [ role1, role2 ]
になります)。
たとえば、以下の構造を持つActive Directoryグループがあるとします。
var user = {
app_metadata: {
ad_groups: {
"admins": "some info not aws related",
"aws_dev_Admin": "arn:aws:iam::123456789111:role/Admin,arn:aws:iam::123456789111:saml-provider / Auth0",
"aws_prod_ReadOnly": "arn:aws:iam::123456789999:role/ReadOnly,arn:aws:iam::123456789999:saml-provider / Auth0"
}
}
};
Was this helpful?
この場合、ルールは次のようになります。
function (user, context, callback) {
var userGroups = user.app_metadata.ad_groups;
function awsFilter(group) {
return group.startsWith('aws_');
}
function mapGroupToRole(awsGroup) {
return userGroups[awsGroup];
}
user.awsRole = Object.keys(userGroups).filter(awsFilter).map(mapGroupToRole);
user.awsRoleSession = 'myawsuser'; // unique per user http://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html
context.samlConfiguration.mappings = {
'https://aws.amazon.com/SAML/Attributes/Role': 'awsRole',
'https://aws.amazon.com/SAML/Attributes/RoleSessionName': 'awsRoleSession'
};
callback(null, user, context);
}
Was this helpful?
セッションの有効期限を構成する
AWSセッションが期限切れになるまでの猶予時間(3600秒)を延長するには、カスタムルールを使用します。ルールでSessionDuration属性を設定して、セッションの持続時間を変更します。
function (user, context, callback) {
if(context.clientID !== '{yourClientId}'){
return callback(null, user, context);
}
user.awsRole = '{yourArn}';
user.awsRoleSession = '{yourRoleSession}';
user.time = 1000; // time until expiration in seconds
context.samlConfiguration.mappings = {
'https://aws.amazon.com/SAML/Attributes/Role': '{yourAwsRoleName}',
'https://aws.amazon.com/SAML/Attributes/RoleSessionName': '{yourAwsRoleSessionName}',
'https://aws.amazon.com/SAML/Attributes/SessionDuration': 'time' };
callback(null, user, context);
}
Was this helpful?
構成をテストする
[Dashboard]>[Applications(アプリケーション)]>[Applications(アプリケーション)]に移動し、アプリケーションの名前をクリックします。
[Addons(アドオン)]タブで[SAML2 Web App(SAML2 Webアプリ)]アドオンを選択します。
[Usage(使用状況)]タブで、[Identity Provider Login URL(IDプロバイダーのログインURL)]を見つけます。Auth0アカウントのログインページにリダイレクトされます。ログインに成功すると、AWSにリダイレクトされます。