> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.generaltranslation.app/llms.txt
> Use this file to discover all available pages before exploring further.

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

> Auth0のシングルサインオン（SSO）にAmazon Web Services（AWS）を構成する方法について説明します。

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [processedChildren, setProcessedChildren] = useState(children);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        let processedChildren = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          processedChildren = processedChildren.replace(new RegExp(key, "g"), value);
        }
        setProcessedChildren(processedChildren);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  return <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
      {processedChildren}
    </CodeBlock>;
};

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

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=single-sign-on" tip="シングルサインオン（SSO）: ユーザーが1つのアプリケーションにログインした後、そのユーザーを他のアプリケーションに自動的にログインさせるサービス。" cta="用語集の表示">SSO</Tooltip>にAWSを構成するには、以下の手順を完了させる必要があります。

1. AWSで外部IDプロバイダーを作成します。
2. Auth0アプリケーションにSAML2 Webアプリのアドオンを構成します。
3. AWSのIDプロバイダーの構成を完了させます。
4. AWS IAMロールを作成します。
5. AWSロールをユーザーにマッピングします。

<div id="create-an-external-identity-provider-in-aws">
  ## AWSで外部のIDプロバイダーを作成します。
</div>

1. AWS提供の「[外部 ID プロバイダーを管理する](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html)」ガイドに従って、AWSで外部IDプロバイダーを設定しますが、以下の1つだけ変更します。

   1. AWSのメタデータファイルをダウンロードする代わりに、 **［個々のメタデータ値を表示］** をクリックします。
   2. **AWS SSO発行者URL** と **AWS SSO ACS URL** の値をコピーします。これらは次のセクションで使用します。
2. このページはブラウザーで開いたままにしておいてください。後のセクションで構成を完了させる必要があります。

<div id="configure-saml-sso-for-auth0">
  ## Auth0にSAML SSOを構成する
</div>

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=auth0-dashboard" tip="Auth0 Dashboard: サービスを構成するためのAuth0の主製品。" cta="用語集の表示">Auth0 Dashboard</Tooltip>を使用して、アプリケーションにSAML2 Webアプリのアドオンを構成します。詳細については、「[Amazon Web ServicesにAuth0をIDプロバイダーとして設定する](/docs/ja-JP/ja-jp/authenticate/single-sign-on/outbound-single-sign-on/configure-auth0-saml-identity-provider/configure-saml2-web-app-addon-for-aws)」をお読みください。

<div id="complete-aws-identity-provider-configuration">
  ## AWSのIDプロバイダーの構成を完了させる
</div>

1. ブラウザーで開いたままにしてあったAWS SSOのIDプロバイダーページに戻ります。
2. 前のセクションでダウンロードして保存したメタデータファイルをアップロードします。
3. IDソースの変更内容を見直して、 **確認** します。

<div id="create-aws-iam-role">
  ## AWS IAMロールを作成する
</div>

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

1. サイドバーで、 **［アクセス管理］** の[\*\* ［ロール］\*\* ](https://console.aws.amazon.com/iam/home#/roles)に移動します。 **［ロールの作成］** をクリックします。
2. 次のページで、信頼されたエンティティーのタイプを選択するよう求められます。 **［SAML 2.0フェデレーション］** を選択します。
3. プロンプトが表示されたら、上記で作成したプロバイダーを **SAMLプロバイダー** として設定します。 **［プログラムによるアクセスと AWS Management Console によるアクセスを許可する］** を選択します。 **［次へ］** をクリックして続行します。
4. **［アクセス許可ポリシーをアタッチする］** ページで、ロールにアタッチする適切なポリシーを選択します。これにより、このロールを持つユーザーがAWSで付与されるアクセス権が決定されます。たとえば、ユーザーにIAMへの読み取り専用アクセスを付与するには、`IAMReadOnlyAccess`ポリシーをフィルターで絞り込んで選択します。完了したら、 **［次のステップ］** をクリックします。
5. 3番目の **［ロールの作成］** 画面は、 **［タグの追加］** です。多数のロールを作成する予定の場合には、作成するロールを整理するためにタグを使うことができます。
6. **［確認］** ページで、 **［ロール名］** を設定し、設定を確認します。以下のパラメーターの値を入力します。

<table class="table">
  <thead>
    <tr>
      <th><b>フィールド</b></th>
      <th><b>説明</b></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><b>Role name（ロール名）</b></td>
      <td>ロールの説明的な名前。</td>
    </tr>

    <tr>
      <td><b>Role description（ロールの説明）</b></td>
      <td>ロールを使用する目的の説明。</td>
    </tr>
  </tbody>
</table>

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

<div id="map-aws-role-to-a-user">
  ## AWSロールをユーザーにマッピングする
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  高度なユースケースでロールを割り当てるサーバー側ルールについては、[Amazon API Gatewayのチュートリアル](/docs/ja-JP/ja-jp/customize/integrations/aws/aws-api-gateway-delegation/aws-api-gateway-delegation-5)を参照してください。
</Callout>

指定された **AWSロール** は、AWSコンソールを含むリソースへのアクセスタイプを統括する **IAMポリシー** に関連付けられます。ロールとポリシーの詳細については、「[IAMロールを作成する](http://docs.aws.amazon.com/IAM/latest/UserGuide/roles-creatingrole.html)」をお読みください。

1. AWSロールをユーザーにマッピングするには、[ルール](/docs/ja-JP/ja-jp/customize/rules)を作成します。

   ```javascript lines theme={null}
   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);

   }
   ```

   上の例にあるコードのスニペットでは、`user.awsRole`がAWSロールとIdPを識別します。AWSロールの識別子はカンマの前に、IdPの識別子はカンマの後にあります。

   1. ルールを使うと、これらの2つの値を複数の方法で取得できます。前の手順でAWSに作成した項目を左のサイドバーから選択すると、これらの値を取得することができます。IDプロバイダーと作成したロールの両方にARNがあり、これらをコンソールで選択すると、コピーできます。
   2. 上の例では、これらの値は両方ともルールに埋め込まれています。これらの値は、ユーザープロファイルに保管するか、他の属性を使って指定することもできます。たとえば、Active Directoryを使用している場合、ユーザーに関連付けられた`group`などのプロパティを、適切なAWSロールにマッピングすることができます。

      ```text lines theme={null}
      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',
      };
      ```

<div id="map-multiple-roles">
  ### 複数のロールをマッピングする
</div>

ロールのマッピングに配列を割り当てることもできます（その場合は`awsRoles: role1`ではなく、`awsRoles = [ role1, role2 ]`になります）。

たとえば、以下の構造を持つActive Directoryグループがあるとします。

```javascript lines theme={null}
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"
    }
  }
};
```

この場合、ルールは次のようになります。

```javascript lines theme={null}
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);

}
```

<div id="configure-session-expiration">
  ## セッションの有効期限を構成する
</div>

AWSセッションが期限切れになるまでの猶予時間（3600秒）を延長するには、カスタム[ルール](/docs/ja-JP/ja-jp/customize/rules)を使用します。ルールで[**SessionDuration** 属性](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html)を設定して、セッションの持続時間を変更します。

export const codeExample = `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);
}`;

<AuthCodeBlock children={codeExample} language="javascript" />

<div id="test-configuration">
  ## 構成をテストする
</div>

1. [［Dashboard］>［Applications（アプリケーション）］>［Applications（アプリケーション）］](https://manage.auth0.com/#/applications)に移動し、アプリケーションの名前をクリックします。
2. **［Addons（アドオン）］** タブで **［SAML2 Web App（SAML2 Webアプリ）］** アドオンを選択します。
3. **［Usage（使用状況）］** タブで、 **［Identity Provider Login URL（IDプロバイダーのログインURL）］** を見つけます。Auth0アカウントのログインページにリダイレクトされます。ログインに成功すると、AWSにリダイレクトされます。

<div id="learn-more">
  ## もっと詳しく
</div>

* [Amazon Web ServicesをSAMLサービスプロバイダーとして構成する](/docs/ja-JP/ja-jp/authenticate/single-sign-on/outbound-single-sign-on/configure-auth0-saml-identity-provider/configure-saml2-web-app-addon-for-aws)
