Cognito 유저가 비공개 S3로 접근하려고 할 때... 


https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_examples_s3_cognito-bucket.html

=> 이 문서 중 sample rule script에서 Principal 관련된 코드가 빠져 있다. 실제 이 룰을 적용하려면 principal 에러가 발생한다. 문서 내용에는 언급되어 있지 않았다.



javascript로 aws cognito 연동 할 때, app 설정에서 "클라이언트 보안키 생성" 옵션을 해제해야 한다.


https://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identity-js


"When creating the App, the generate client secret box must be unchecked because the JavaScript SDK doesn't support apps that have a client secret."


클라이언트 보안 옵션은 기본으로 체크 되어 있어서 생각없이 넘어 갔는데, 켜져 있으면  "Unable to verify secret hash for client .." 라는 에러는 보게된다.

앱 클라이언트 첫 설정할 때 주의 필요!!!



 https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-server-refused-our-key/


처음 인스턴스를 생성할 때 다운로드 했던 pem 파일을 찾지 못한다면... 사망!! 처음부터 다시 구축하던가 백업해둔 이미지로 다시 생성!!


1. 해당 인스턴스를 실행 중지 시키고.. 


2. 작업 > 인스턴스 설정 > 사용자 데이터 보기/변경을 선택 (인스턴스가 완전히 종료되지 않은 상태에서 변경 불가)


3. 아래 코드를 붙여넣기 한 다음


#cloud-config
ssh_deletekeys: false
ssh_authorized_keys:
cloud_final_modules:
  - [ssh, always]

4. puttygen을 연 후, load 버튼을 눌러 저장해둔 pem 파일을 연다.


5. 그러면 상단 텍스트 박스에 public key 텍스트가 출력되는데 ssh-rsa로 시작하는 텍스트부터 끝까지 복사를 한다.


6. 붙여넣기 했던 위 코드 중 ssh_authorized_keys:  바로 옆에 복사한 내용을 붙여넣는다. 


7. 저장 하고 인스턴스를 다시 시작한다.


8. 다시 연결되는 것을 확인할 수 있다. 


위 링크의 내용을 그대로 가져왔지만 붙여 넣기 할 때 주의가 필요함. 

EC2 대시보드 -> 인스턴스 -> 인스턴스 시작 


여기서는 Amazon Linux AMI를 선택하려 한다. 




인스턴스 유형은 t2.micro (역시 프리 티어 사용 가능 ) 선택 후 "검토 및 시작" 버튼. 


 (인스턴스 구성 및 스토리지 추가 등이 필요하면 각 상세 항목을 설정할 수 있다. 각 항목은 추후 필요할 때 다시 설정할 예정이니 여기서는 넘어가자.)



"시작" 버튼을 누르면 키페어에 대한 질의가 나온다. "새 키 페어 생성"을 눌러보자.


키 페어 이름을 넣은 후 "키 페어 다운로드"를 해서 pem 파일을 만들어두자. 원격 제어를 위해 접근하려면 꼭 필요하다. 





그리고 인스턴스를 시작하면 생성 후 가동된다. 


이제 터미널에서 접속하는 과정을 보자. 


일단 다운받은 pem 파일을 원하는 위치에 놓고 터미널에서 해당 폴더로 이동한다.


그리고 pem 파일 권한에 읽기 권한을 아래와 같이 부여한다.


chmod 400 yourfilename.pem



그리고 터미널에서 ssh로 바로 접속해보자.


ssh -i yourfilename.pem ec2-user@yourec2domain


이제 EC2로 바로 접속할 수 있다. 


참고로 EC2 인스턴스를 활성화 시킨 후 재부팅 등이 이루어지면 IP와 도메인이 변경된다. 고정 IP를 할당하자면 비용이 추가되니 필요에 따라 선택이 필요하다. 









AWS 문서를 따라 했지만 안되는 문제가 발생했다. (공식 문서)


아래와 같은 방법으로 처리해야 whitelist를 적용할 수 있다.


1. 해당 bucket의 권한 탭에서 "버킷 정책"을 선택. 아래와 같이 정보를 입력한다.


{

    "Version": "2012-10-17",

    "Id": "Policy......",

    "Statement": [

        {

            "Sid": "WhiteListfor",

            "Effect": "Deny",

            "Principal": "*",

            "Action": "s3:*",

            "Resource": "arn:aws:s3:::your-bucket-name/*",

            "Condition": {

                "NotIpAddress": {

                    "aws:SourceIp": "Ip address range to allow"

                }

            }

        }

    ]

}

2. 해당 버킷의 필요한 파일, 폴더에 "everyone 읽기 속성"을 부여한다.


이렇게 하면 원하는 IP 대역에서만 접근이 가능해진다.


POST로 json데이터를 전달할 때,


서버 트리를 가지는 구조를 전달하면 400 bad request 를 리턴한다.


문제가 되는 구조는 아래와 같다. 


{ "msg" : { "to": "you", "from":"me"}}


text/plain으로 지정해서 보내봤지만 에러는 계속 발생한다. 



이를 아래와 같은 단일 구조로 만들어서 보내야 한다.


{"msgTo": "you", "msgFrom":"me"}




인증을 설정하지 않았어도 일반적인 웹브라우져에 주소를 입력하는 방식으로는 


{"message":"Missing Authentication Token"}  


이라는 메세지만 볼 수 있다.


Unity c# 코드를 기준으로 테스트를 해 보았다. 


----- UntyWebRequest 사용 시


WWWForm form = new WWWFrom();

form.AddField("test", "value");

UnityWebRequest www = UnityWebRequest.Post(apiAddr , form);

yield return www.SendWebRequest();     >> 실패. API 문서를 봐도 이 코드가 실패할 이유는 없는 듯 한데.. 안됨.


(* 참고 코드 : https://docs.unity3d.com/Manual/UnityWebRequest-SendingForm.html )



----- WWW 사용 시


string dataString ="json format data";

var encoding = new System.Text.UTF8Encoding();

Hashtable header = new Hashtable();

header.Add("Content-Type", "text/json");

header.Add("Content-Length", dataString.Length);

WWW www = new WWW(apiAddr, encoding.GetBytes(dataString));

yield return www;         >> 성공. 



음.. 무슨 차이지.. 당연히 UnityWebRequest API 공식 메뉴얼을 보고 코드를 작성했는데, 수동으로 헤더 설정해서 보낸 것과 무슨 차이가 발생하는걸까. 


-_-+++++++




mobile analytics에 기록되는 정보는 기본적으로 2 주가 지나면 자동으로 삭제되는데, 중요한 데이터를 s3에 저장하고 싶을 때 사용할 수 있다. 



하단 링크 참고

https://aws.amazon.com/ko/blogs/aws/new-auto-export-for-amazon-mobile-analytics/



+ Recent posts