> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-fix-docs-5528-php-updates.mintlify.site/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 [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) + "*****MASKED*****";
          }
          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と統合すると、サポートされているIDプロバイダーを使って、ユーザーがAWSにログインできるようになります。

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/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ロールをユーザーにマッピングします。

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

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

## Auth0にSAML SSOを構成する

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

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

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

## AWS IAMロールを作成する

プロバイダーを使用するには、ロールの信頼ポリシーにあるプロバイダーを使って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. **［確認］** ページで、 **［ロール名］** を設定し、設定を確認します。以下のパラメーターの値を入力します。

| フィールド                        | 説明             |
| ---------------------------- | -------------- |
| **Role name（ロール名）**          | ロールの説明的な名前。    |
| **Role description（ロールの説明）** | ロールを使用する目的の説明。 |

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

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

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  高度なユースケースでロールを割り当てるサーバー側ルールについては、[Amazon API Gatewayのチュートリアル](/docs/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/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',
      };
      ```

### 複数のロールをマッピングする

ロールのマッピングに配列を割り当てることもできます（その場合は`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);

}
```

## セッションの有効期限を構成する

AWSセッションが期限切れになるまでの猶予時間（3600秒）を延長するには、カスタム[ルール](/docs/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" />

## 構成をテストする

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にリダイレクトされます。

## もっと詳しく

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