개발/AWS

AWS OpenSearch 에서 S3 Snapshot Repository를 추가하려고 할 때

bitofsky 2023. 11. 17. 18:57

Opensearch를 복제하기 위해 다른 s3 버킷을 repository로하는 snapshot을 생성해야했다.
ElasticSearch와 달리 오픈서치는 스냅샷 UI에서 S3를 추가할 수 없게 되어있다.

Devtool이나 UI로 추가하는것이 아니라 Rest API로 추가해야하는데, 추가할때에도 반드시 role_arn을 인자로 주어야한다.

이게 골때리는데, role_arn에 s3 버킷 사용권한이 부여되어있어야 하는 것은 물론, 이 role_arn의 신뢰정책에 es.amazonaws.com 추가가 필요하고 마지막으로 이 role_arn을 부여할 수 있는 RestAPI 사용자의 신원인증 및 role_arn의 Passrole 권한까지 필요하다.

(access key 같은걸론 추가할 수 없다. ES는 되는데...)

RestAPI에서 AWS 신원을 인증하려면 AWS SignV4 시그니처를 쓸 수 밖에 없는데 손으로 만드려면 짜증나니 CURL의 --aws-sigv4 옵션 을 쓰면 쉽다. 아래처럼 하자.

curl -XPUT "https://ES.us-east-1.es.amazonaws.com/_snapshot/REPO" \
 -H "Content-Type: application/json" \
 -H "x-amz-security-token: SESSIONTOKEN" \
 --data-binary @- \
 --aws-sigv4 "aws:amz:us-east-1:es" \
 --user "ACCESSKEY:SECRETKEY" <<DATA
 {
  "type": "s3",
  "settings": {
    "bucket": "bucketname",
    "client": "default",
    "base_path": "path",
    "canned_acl": "bucket-owner-full-control",
    "role_arn": "arn:aws:iam::...:role/..."
  }
}
DATA


임시 세션이 아닌 경우 x-amz-security-token 헤더는 빼도 된다.

ACCESSKEY:SECRETKEY 위치 및 도메인, s3 정보를 수정해서 실행하면 된다.

'개발 > AWS' 카테고리의 다른 글

SYN FLOOD 공격 및 대응 사례  (0) 2024.02.08
AWS Athena Partition Projection 이란?  (0) 2021.10.15