IAM Identity Center - Microsoft Entra ID の SAML について

# IAM Identity Center において外部 ID プロバイダーの Microsoft Entra ID を選択し SAML 認証がどのように機能するかまとめ


## ■構築手順の概要 (※1)
1. Microsoft Entra ID で AWS IAM Identity Center のエンタープライズアプリケーション、ユーザーを作成
2. IAM Identity Cente で許可セットや 1. で作成したユーザーに対応するユーザーを作成、許可セットをユーザーへ割り当て
3. Microsoft Entra ID の AWS IAM Identity Center エンタープライズアプリケーションと IAM アイデンティティセンターの外部 IdP 設定を使用して SAML 接続を設定
4. SCIM v2.0 プロトコルを使用して Microsoft Entra ID から IAM アイデンティティセンターへのユーザー情報の自動プロビジョニング (同期) を設定 ※3
:::note warn
重要 : ユーザー作成時、プロパティで [名]、[姓] に適当な値を入力する必要があります。無いと自動プロビジョニングを実行する時に失敗します。※2
:::

:::note info
ドキュメントはこちら
※1 Microsoft Entra ID および IAM アイデンティティセンターによる SAML と SCIM の設定
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/idp-microsoft-entra.html

※2 自動プロビジョニングを使用する際の注意事項
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/provision-automatically.html#auto-provisioning-considerations

※3 Microsoft Entra ID および IAM アイデンティティセンターによる SAML と SCIM の設定
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/other-idps.html
:::

# IAM Identity Center - Microsoft Entra ID の SAML認証リクエストの中身

### ■SAML リクエスト
```SamlRequest.xml
<?xml version="1.0" encoding="UTF-8"?>
<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL="https://ap-northeast-1.signin.aws.amazon.com/platform/saml/acs/xxxxxxxxxxxxxxxxxx" Destination="https://login.microsoftonline.com/xxxxxxxxxxxxx/saml2" ID="aws_xxxxxxxxxxxx" IssueInstant="yyyy-mm-ddT11:11:11.111Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0">
  <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://ap-northeast-1.signin.aws.amazon.com/platform/saml/[ID ストア ID]</saml2:Issuer>
  <saml2p:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" />
</saml2p:AuthnRequest>
```

### ■SAML レスポンス例
```SamlResponse.xml
<samlp:Response ID="xxxxxxxxxxxxxxxxxxxxxxx" Version="2.0" IssueInstant="yyyy-mm-ddT11:11:11.111" Destination="https://ap-northeast-1.signin.aws.amazon.com/platform/saml/acs/xxxxxxxxxxxxxxxxxxxxxxx" InResponseTo="aws_xxxxxxxxxxxxxxxxxxxxxxx" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/8dc60039-d6d8-45a2-9eee-d625d864f53a/</Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
  </samlp:Status>
  <Assertion ID="_xxxxxxxxxxxxxxxxxxxxxxx" IssueInstant="yyyy-mm-ddT11:11:11.111Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
    <Issuer>https://sts.windows.net/xxxxxxxxxxxxxxxxxxxxxxxa/</Issuer>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
      <SignedInfo>
        <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
        <Reference URI="#_xxxxxxxxxxxxxxxxxxxxxxx">
          <Transforms>
            <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
          </Transforms>
          <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
          <DigestValue>xxxxxxxxxxxxxxxxxxxxxxx</DigestValue>
        </Reference>
      </SignedInfo>
      <SignatureValue>xxxxxxxxxxxxxxxxxxxxxxxx</SignatureValue>
      <KeyInfo>
        <X509Data>
          <X509Certificate>xxxxxxxxxxxxxxxxxxxxxxx</X509Certificate>
        </X509Data>
      </KeyInfo>
    </Signature>
    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">meisei@hogehoge.onmicrosoft.com</NameID>
      <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <SubjectConfirmationData InResponseTo="aws_xxxxxxxxxxxxxxxx" NotOnOrAfter="yyyy-mm-ddT22:22:22.222" Recipient="https://ap-northeast-1.signin.aws.amazon.com/platform/saml/acs/xxxxxxxxxxxxxxxxxx" />
      </SubjectConfirmation>
    </Subject>
    <Conditions NotBefore="yyyy-mm-ddT11:11:11.111Z" NotOnOrAfter="yyyy-mm-ddT22:22:22.222Z">
      <AudienceRestriction>
        <Audience>https://ap-northeast-1.signin.aws.amazon.com/platform/saml/d[ID ストア ID]</Audience>
      </AudienceRestriction>
    </Conditions>
    <AttributeStatement>
      <Attribute Name="http://schemas.microsoft.com/identity/claims/tenantid">
        <AttributeValue>xxxxxxxxxxxxx</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
        <AttributeValue>xxxxxxxxxxxxxxxxxxxxxxx</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.microsoft.com/identity/claims/displayname">
        <AttributeValue>meisei</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.microsoft.com/identity/claims/identityprovider">
        <AttributeValue>https://sts.windows.net/8dc60039-d6d8-45a2-9eee-d625d864f53a/</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.microsoft.com/claims/authnmethodsreferences">
        <AttributeValue>http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname">
        <AttributeValue>mei</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname">
        <AttributeValue>sei</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
        <AttributeValue>meisei@hogehoge.onmicrosoft.com</AttributeValue>
      </Attribute>
    </AttributeStatement>
    <AuthnStatement AuthnInstant="yyyy-mm-ddT11:11:11.111Z" SessionIndex="_xxxxxxxxxxx0">
      <AuthnContext>
        <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
      </AuthnContext>
    </AuthnStatement>
  </Assertion>
</samlp:Response>
```