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

> Auth0 で Amazon Web Services（AWS）のシングルサインオン（SSO）を設定する方法を説明します。

# Amazon Web Services のシングルサインオンを設定する

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****マスク済み*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

Auth0 を AWS と統合すると、サポートされている任意の <Tooltip tip="IDプロバイダー（IdP）：デジタル ID を保存および管理するサービス。" cta="用語集を表示" href="/ja/docs/glossary?term=identity+provider">IDプロバイダー</Tooltip>を使用して、ユーザーが AWS にログインできるようになります。

AWS で <Tooltip tip="シングルサインオン（SSO）：ユーザーが 1 つのアプリケーションにログインすると、他のアプリケーションにも自動的にログインできるようにするサービス。" cta="用語集を表示" href="/ja/docs/glossary?term=SSO">SSO</Tooltip> を設定するには、次の手順を実行する必要があります。

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

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

1. AWS の [Connect to your External Identity Provider](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html) ガイドに従って、1 点だけ変更して AWS で外部 IDプロバイダーを設定します。

   1. AWS のメタデータファイルをダウンロードする代わりに、**Show Individual Metadata Values** をクリックします。
   2. **AWS SSO issuer URL** と **AWS SSO ACS URL** の値をコピーします。これらは次のセクションで使用します。
2. 後続のセクションで設定を完了する必要があるため、このページはブラウザーで開いたままにしておいてください。

<div id="configure-saml-sso-for-auth0">
  ## Auth0 の SAML SSO を設定する
</div>

<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要な製品です。" cta="用語集を表示" href="/ja/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> を使用して、アプリケーションの SAML2 Web App アドオンを設定します。設定方法については、[Amazon Web Services 向けに Auth0 を IDプロバイダーとして設定する](/ja/docs/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 ソースを変更する内容を確認し、**Confirm** をクリックします。

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

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

1. サイドバーで **Access Management** の **Roles** に移動するか、[**Roles**](https://console.aws.amazon.com/iam/home#/roles) を開きます。**Create Role** をクリックします。
2. 次のページで、信頼するエンティティの種類を選択するよう求められます。**SAML 2.0 Federation** を選択します。
3. 求められたら、先ほど作成したプロバイダーを **SAML provider** として設定します。**Allow programmatic and AWS Management Console access** を選択します。続行するには **Next** をクリックします。
4. **Attach Permission Policies** ページで、ロールにアタッチする適切なポリシーを選択します。これにより、このロールを付与されたユーザーが AWS で持つ権限が決まります。たとえば、ユーザーに IAM への読み取り専用アクセスを付与するには、`IAMReadOnlyAccess` ポリシーを検索して選択します。完了したら、**Next Step** をクリックします。
5. 3 番目の **Create Role** 画面は **Add Tags** です。多数のロールを作成する場合は、タグを使って作成したロールを整理できます。
6. **Review** ページで **Role Name** を設定し、設定内容を確認します。次のパラメーターに値を指定します。

   | Field                | Description   |
   | -------------------- | ------------- |
   | **Role name**        | ロールのわかりやすい名前。 |
   | **Role description** | ロールの用途の説明。    |
7. **Trusted entities** と **Policies** の内容を確認し、**Create Role** をクリックします。

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

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

指定した **AWS ロール** は、AWS マネジメントコンソールを含むリソースに対して許可されるアクセスの種類を制御する **IAM ポリシー** に関連付けられます。ロールとポリシーの詳細については、[IAM ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)を参照してください。

1. AWS ロールをユーザーにマッピングするには、[Rule](/ja/docs/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 に作成した項目を選択すると、IAM Console から取得できます。作成した IDプロバイダーとロールの両方には、Console で選択するとコピーできる 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'; // ユーザーごとに一意 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 秒) を延長するには、カスタムの [Rule](/ja/docs/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; // 有効期限が切れるまでの時間（秒）

  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** アドオンを選択します。
3. **Usage** タブで、**Identity Provider Login URL** を確認します。Auth0 アカウントのログインページにリダイレクトされます。正常にログインすると、AWS にリダイレクトされます。

<div id="learn-more">
  ## 詳しくはこちら
</div>

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