シングルサインオンにAmazon Web Servicesを構成する

Auth0をAWSと統合すると、サポートされているIDプロバイダーを使って、ユーザーがAWSにログインできるようになります。

SSOにAWSを構成するには、以下の手順を完了させる必要があります。

  1. AWSで外部IDプロバイダーを作成します。

  2. Auth0アプリケーションにSAML2 Webアプリのアドオンを構成します。

  3. AWSのIDプロバイダーの構成を完了させます。

  4. AWS IAMロールを作成します。

  5. AWSロールをユーザーにマッピングします。

AWSで外部のIDプロバイダーを作成します。

  1. AWS提供の「外部 ID プロバイダーを管理する」ガイドに従って、AWSで外部IDプロバイダーを設定しますが、以下の1つだけ変更します。

    1. AWSのメタデータファイルをダウンロードする代わりに、[個々のメタデータ値を表示]をクリックします。

    2. AWS SSO発行者URLAWS SSO ACS URLの値をコピーします。これらは次のセクションで使用します。

  2. このページはブラウザーで開いたままにしておいてください。後のセクションで構成を完了させる必要があります。

Auth0にSAML SSOを構成する

Auth0 Dashboardを使用して、アプリケーションにSAML2 Webアプリのアドオンを構成します。詳細については、「Amazon Web ServicesにAuth0をIDプロバイダーとして設定する」をお読みください。

AWSのIDプロバイダーの構成を完了させる

  1. ブラウザーで開いたままにしてあったAWS SSOのIDプロバイダーページに戻ります。

  2. 前のセクションでダウンロードして保存したメタデータファイルをアップロードします。

  3. IDソースの変更内容を見直して、確認します。

AWS IAMロールを作成する

プロバイダーを使用するには、ロールの信頼ポリシーにあるプロバイダーを使ってIAMロールを作成する必要があります。

  1. サイドバーで、[アクセス管理][ロール]に移動します。[ロールの作成]をクリックします。

  2. 次のページで、信頼されたエンティティーのタイプを選択するよう求められます。[SAML 2.0フェデレーション]を選択します。

  3. プロンプトが表示されたら、上記で作成したプロバイダーをSAMLプロバイダーとして設定します。[プログラムによるアクセスと AWS Management Console によるアクセスを許可する]を選択します。[次へ]をクリックして続行します。

  4. [アクセス許可ポリシーをアタッチする]ページで、ロールにアタッチする適切なポリシーを選択します。これにより、このロールを持つユーザーがAWSで付与されるアクセス権が決定されます。たとえば、ユーザーにIAMへの読み取り専用アクセスを付与するには、IAMReadOnlyAccessポリシーをフィルターで絞り込んで選択します。完了したら、[次のステップ]をクリックします。

  5. 3番目の[ロールの作成]画面は、[タグの追加]です。多数のロールを作成する予定の場合には、作成するロールを整理するためにタグを使うことができます。

  6. [確認]ページで、[ロール名]を設定し、設定を確認します。以下のパラメーターの値を入力します。

    フィールド 説明
    Role name(ロール名) ロールの説明的な名前。
    Role description(ロールの説明) ロールを使用する目的の説明。

  7. [信頼されたエンティティー][ポリシー]の情報を確認してから、[ロールの作成]をクリックします。

AWSロールをユーザーにマッピングする

指定されたAWSロールは、AWSコンソールを含むリソースへのアクセスタイプを統括するIAMポリシーに関連付けられます。ロールとポリシーの詳細については、「IAMロールを作成する」をお読みください。

  1. 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の識別子はカンマの後にあります。

    1. ルールを使うと、これらの2つの値を複数の方法で取得できます。前の手順でAWSに作成した項目を左のサイドバーから選択すると、これらの値を取得することができます。IDプロバイダーと作成したロールの両方にARNがあり、これらをコンソールで選択すると、コピーできます。

    2. 上の例では、これらの値は両方ともルールに埋め込まれています。これらの値は、ユーザープロファイルに保管するか、他の属性を使って指定することもできます。たとえば、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属性を設定して、セッションの持続時間を変更します。

codeblockOld.header.login.configureSnippet
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?

/

構成をテストする

  1. [Dashboard]>[Applications(アプリケーション)]>[Applications(アプリケーション)]に移動し、アプリケーションの名前をクリックします。

  2. [Addons(アドオン)]タブで[SAML2 Web App(SAML2 Webアプリ)]アドオンを選択します。

  3. [Usage(使用状況)]タブで、[Identity Provider Login URL(IDプロバイダーのログインURL)]を見つけます。Auth0アカウントのログインページにリダイレクトされます。ログインに成功すると、AWSにリダイレクトされます。

もっと詳しく