CognitoID 풀을 사용한 자체 인증, 인증 후 STS를 사용한 임시 자격 증명 반환까지

7875 단어 STScognitoAWS

개요



AWS 공식 ID 풀(페더레이티드 아이덴티티) 인증 흐름開発者が認証した ID の認証フロー基本的な認証フロー拡張認証フロー 쪽이 대부분의 고객에게 있어서, 올바른 선택이라고 써 있습니다만, 뭔가 잘 안 되었기 때문에 우선 기본의 분 합니다. .

환경


  • 공식 흐름이라면, AssumeRoleWithWebIdentity 는 클라이언트로부터 하는 것이 되어 있습니다만, 귀찮아서, Lambda 안에서 완결시킵니다.
  • 독자 인증의 인증 자체는 하지 않습니다.
    ※인증되어 있다고 하는 전제로, GetOpenIdTokenForDeveloperIdentity 로부터 합니다.
    실제로는 GetOpenIdTokenForDeveloperIdentity 전에 독자 인증의 처리가 필요합니다.
  • Lambda의 롤에 FullAccess를 붙입니다.
    GetOpenIdTokenForDeveloperIdentity 를 실행하기 위해서는 자격 증명이 필요합니다. (당연히 - 당연)
    그래서 로컬에서 갑자기 GetOpenIdTokenForDeveloperIdentity를 실행하려고해도 화가납니다.

  • 준비



    CognitoID 풀 만들기


  • Cognito의 "페더레이티드 정체성"페이지 열기
  • "새 ID 풀 만들기"버튼을 누르십시오
  • ↓에 체크해져(그 이외는 적당하고 OK(인증하지 않기 때문에)),"풀의 작성"

  • 인증 프로바이더를 아래와 같이 설정 ※개발자 프로바이더의 이름은 임의로 좋다

  • 어쨌든 다음으로 CognitoID 풀이 생성됩니다.

  • Lambda 구현



    아래 코드를 Lambda에 복사하십시오.

    람다
    import json
    import boto3
    
    def lambda_handler(event, context):
    
        # 事前にここに独自認証の処理を行う(要件に合わせて自分で実装)
    
        client = boto3.client('cognito-identity')
        # reponseのTokenにはIDトークンが入る
        # ※備考
        # "iss": "https://cognito-identity.amazonaws.com" になる。
        # ユーザプールで発行した場合の"iss"は"https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_xxxxxxxx(ユーザプールID名)"になる
        response = \
            client.get_open_id_token_for_developer_identity(IdentityPoolId='ap-northeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', # プールID の IDプールのID
            Logins={'login.mycompany.myapp': 'test_user'},
            # { 認証プロバイダ > カスタム > 開発者プロバイダーの名前 で登録した開発プロバイダーの名前: 独自認証したユーザID }
        )
    
        client2 = boto3.client('sts')
        ret = client2.assume_role_with_web_identity(
            RoleArn='arn:aws:iam::xxxxxxxxxxxx:role/service-role/lambda_role',
            RoleSessionName='boto',
            WebIdentityToken=response['Token'],
        )
        print(f"assumeRoleWithWebIdentity:{ret}")
    
        return {'statusCode': 200, 'body': json.dumps('Hello from Lambda!')}
    

    실제로 자격 증명을 발행해 봅시다.



    Lambda를 실행하기만 하면 됩니다.
    로그에 다음이 표시됩니다.
  • AccessKey
  • SceretAccessKey
  • SessionToken

  • 주의사항



    임시 자격 증명을 사용한 요청 참고



    임시 자격 증명을 사용한 요청 참고

    STS 실행 권한 부여



    Lambda를 실행하는 역할에 STS 권한을 부여해야하므로 해당 역할의"信頼関係" > "信頼関係の編集"에 표시되는 정책 내용에 주의하기
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "lambda.amazonaws.com",
            "Federated": "cognito-identity.amazonaws.com" // ここ大事
          },
          "Action": [
            "sts:AssumeRole",
            "sts:AssumeRoleWithWebIdentity" // ここ大事
          ]
        }
      ]
    }
    

    참고



  • AWS 공식 ID 풀(페더레이티드 아이덴티티) 인증 흐름開発者が認証した ID の認証フロー基本的な認証フロー

  • 관련


  • CognitoID 풀을 사용하여 게스트 사용자(인증되지 않은 사용자)에게 임시 자격 증명 발급
  • 좋은 웹페이지 즐겨찾기