개발자 가이드


Red Hat Ceph Storage 7

Red Hat Ceph Storage에 다양한 애플리케이션 프로그래밍 인터페이스 사용

Red Hat Ceph Storage Documentation Team

초록

이 문서에서는 AMD64 및 Intel 64 아키텍처에서 실행되는 Red Hat Ceph Storage에 다양한 애플리케이션 프로그래밍 인터페이스를 사용하는 방법을 설명합니다.
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지에서 참조하십시오.

1장. Ceph RESTful API

스토리지 관리자는 Red Hat Ceph Storage 대시보드에서 제공하는 Ceph RESTful API 또는 간단히 Ceph API를 사용하여 Red Hat Ceph Storage 클러스터와 상호 작용할 수 있습니다. 각 구성 옵션과 함께 Ceph 모니터 및 OSD에 대한 정보를 표시할 수 있습니다. Ceph 풀을 생성하거나 편집할 수도 있습니다.

Ceph API는 다음 표준을 사용합니다.

  • HTTP 1.1
  • JSON
  • MIME 및 HTTP 콘텐츠 협상
  • JWT

이러한 표준은 OpenAPI 3.0을 준수하여 API 구문, 의미 체계, 콘텐츠 인코딩, 버전 관리, 인증 및 권한 부여를 조정합니다.

사전 요구 사항

  • 정상 실행 Red Hat Ceph Storage 클러스터.
  • Ceph Manager를 실행하는 노드에 액세스합니다.

1.1. Ceph API의 버전 관리

Ceph RESTful API의 주요 목표는 안정적인 인터페이스를 제공하는 것입니다. 안정적인 인터페이스를 제공하기 위해 Ceph API는 다음과 같은 원칙에 따라 빌드됩니다.

  • 암시적 기본값을 방지하려면 모든 끝점에 대한 필수 명시적 기본 버전입니다.
  • Fine-grain change control per-endpoint.

    • 특정 끝점의 예상 버전은 HTTP 헤더에 설명되어 있습니다.

      구문

      Accept: application/vnd.ceph.api.vMAJOR.MINOR+json
      Copy to Clipboard Toggle word wrap

      예제

      Accept: application/vnd.ceph.api.v1.0+json
      Copy to Clipboard Toggle word wrap

      현재 Ceph API 서버가 해당 특정 버전을 처리할 수 없는 경우 415 - Unsupported Media Type 응답이 반환됩니다.

  • 의미 체계 버전 관리 사용.

    • 주요 변경 사항은 이전 버전과 호환되지 않습니다. 변경으로 인해 요청 및 특정 끝점의 응답 형식이 추가되지 않을 수 있습니다.
    • 작은 변경 사항은 이전 버전과 호환됩니다. 변경 사항은 특정 끝점의 요청 또는 응답 형식에 대한 추가 변경 사항으로 구성됩니다.

1.2. Ceph API에 대한 인증 및 권한 부여

Ceph RESTful API에 대한 액세스는 두 개의 체크포인트를 통과합니다. 첫 번째는 유효한 사용자와 기존 사용자를 대신하여 요청이 수행되도록 인증하는 것입니다. 두 번째는 이전에 인증된 사용자가 대상 엔드포인트에서 생성, 읽기, 업데이트 또는 삭제와 같은 특정 작업을 수행할 수 있는 권한을 부여하는 것입니다.

사용자가 Ceph API를 사용하기 전에 유효한 JSON 웹 토큰(JWT)이 필요합니다. /api/auth 엔드포인트를 사용하면 이 토큰을 검색할 수 있습니다.

예제

[root@mon ~]# curl -X POST "https://example.com:8443/api/auth" \
  -H  "Accept: application/vnd.ceph.api.v1.0+json" \
  -H  "Content-Type: application/json" \
  -d '{"username": user1, "password": password1}'
Copy to Clipboard Toggle word wrap

이 토큰은 Authorization HTTP 헤더에 배치하여 모든 API 요청과 함께 사용해야 합니다.

구문

curl -H "Authorization: Bearer TOKEN" ...
Copy to Clipboard Toggle word wrap

1.3. Ceph API 모듈 활성화 및 보안

Red Hat Ceph Storage 대시보드 모듈은 SSL 보안 연결을 통해 스토리지 클러스터에 대한 RESTful API 액세스를 제공합니다.

중요

SSL을 비활성화하는 경우 사용자 이름과 암호가 Red Hat Ceph Storage 대시보드로 암호화되지 않은 상태로 전송됩니다.

사전 요구 사항

  • Ceph Monitor 노드에 대한 루트 수준 액세스.
  • ceph-mgr 데몬이 하나 이상 활성화되어 있는지 확인합니다.
  • 방화벽을 사용하는 경우 활성 ceph-mgr 데몬이 있는 노드에서 TCP 포트 8443, SSL 및 TCP 포트 8080 이 열려 있는지 확인합니다.

프로세스

  1. Cephadm 쉘에 로그인합니다.

    예제

    root@host01 ~]# cephadm shell
    Copy to Clipboard Toggle word wrap

  2. RESTful 플러그인을 활성화합니다.

    [ceph: root@host01 /]# ceph mgr module enable dashboard
    Copy to Clipboard Toggle word wrap
  3. SSL 인증서를 구성합니다.

    1. 조직의 CA(인증 기관)에서 인증서를 제공하는 경우 인증서 파일을 사용하여 설정합니다.

      구문

      ceph dashboard set-ssl-certificate HOST_NAME -i CERT_FILE
      ceph dashboard set-ssl-certificate-key HOST_NAME -i KEY_FILE
      Copy to Clipboard Toggle word wrap

      예제

      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate -i dashboard.crt
      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate-key -i dashboard.key
      Copy to Clipboard Toggle word wrap

      고유한 노드 기반 인증서를 설정하려면 명령에 HOST_NAME 을 추가합니다.

      예제

      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate host01 -i dashboard.crt
      [ceph: root@host01 /]# ceph dashboard set-ssl-certificate-key host01 -i dashboard.key
      Copy to Clipboard Toggle word wrap

    2. 또는 자체 서명된 인증서를 생성할 수 있습니다. 그러나 자체 서명된 인증서를 사용하는 것은 HTTPS 프로토콜의 완전한 보안 이점을 제공하지 않습니다.

      [ceph: root@host01 /]# ceph dashboard create-self-signed-cert
      Copy to Clipboard Toggle word wrap
      주의

      대부분의 최신 웹 브라우저에서는 자체 서명된 인증서에 대해 불만을 제기하므로 보안 연결을 설정하기 전에 확인해야 합니다.

  4. 사용자를 생성하고, 암호를 설정하고, 역할을 설정합니다.

    구문

    echo -n "PASSWORD" > PATH_TO_FILE/PASSWORD_FILE
    ceph dashboard ac-user-create USER_NAME -i PASSWORD_FILE ROLE
    Copy to Clipboard Toggle word wrap

    예제

    [ceph: root@host01 /]# echo -n "p@ssw0rd" > /root/dash-password.txt
    [ceph: root@host01 /]# ceph dashboard ac-user-create user1 -i /root/dash-password.txt administrator
    Copy to Clipboard Toggle word wrap

    이 예제에서는 관리자 역할을 사용하여 user1 이라는 사용자를 생성합니다.

  5. RESTful 플러그인 웹 페이지에 연결합니다. 웹 브라우저를 열고 다음 URL을 입력합니다.

    구문

    https://HOST_NAME:8443
    Copy to Clipboard Toggle word wrap

    예제

    https://host01:8443
    Copy to Clipboard Toggle word wrap

    자체 서명된 인증서를 사용한 경우 보안 예외를 확인합니다.

추가 리소스

  • ceph dashboard --help 명령
  • https://HOST_NAME:8443/doc 페이지입니다. 여기서 HOST_NAME 은 실행 중인 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 이름입니다.
  • 자세한 내용은 Red Hat Customer Portal에서 OS 버전 용 Red Hat Enterprise Linux 제품 설명서보안 강화 가이드를 참조하십시오.

1.4. 질문 및 답변

1.4.1. 정보 얻기

이 섹션에서는 Ceph API를 사용하여 스토리지 클러스터, Ceph 모니터, OSD, 풀 및 호스트에 대한 정보를 확인하는 방법을 설명합니다.

1.4.1.1. 모든 클러스터 구성 옵션을 어떻게 볼 수 있습니까?

이 섹션에서는 RESTful 플러그인을 사용하여 클러스터 구성 옵션 및 해당 값을 확인하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:CEPH_MANAGER_PORT/api/cluster_conf'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • CEPH_MANAGER_PORT with the TCP port number. 기본 TCP 포트 번호는 8443입니다.

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/cluster_conf'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/cluster_conf
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

추가 리소스

1.4.1.2. 파트 클러스터 구성 옵션은 어떻게 볼 수 있습니까?

이 섹션에서는 특정 클러스터 옵션 및 해당 값을 확인하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 보려는 구성 옵션이 있는 ARGUMENT

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 보려는 구성 옵션이 있는 ARGUMENT
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/cluster_conf/ARGUMENT
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 보려는 구성 옵션이 있는 ARGUMENT

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

추가 리소스

1.4.1.3. OSD의 모든 구성 옵션을 보려면 어떻게 해야 합니까?

이 섹션에서는 OSD의 모든 구성 옵션과 해당 값을 확인하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/flags', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/flags', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/osd/flags
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

추가 리소스

1.4.1.4. CRUSH 규칙은 어떻게 볼 수 있습니까?

이 섹션에서는 CRUSH 규칙을 보는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/crush_rule'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/crush_rule'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/crush_rule', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/crush_rule', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/crush_rule
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

추가 리소스

  • Red Hat Ceph Storage 7 관리 가이드CRUSH 규칙 섹션.
1.4.1.5. 모니터에 대한 정보는 어떻게 볼 수 있습니까?

이 섹션에서는 다음과 같은 특정 모니터에 대한 정보를 보는 방법을 설명합니다.

  • IP 주소
  • 이름
  • 쿼럼 상태
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/monitor'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/monitor'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/monitor
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.1.6. 파트 모니터에 대한 정보는 어떻게 볼 수 있습니까?

이 섹션에서는 다음과 같은 특정 모니터에 대한 정보를 보는 방법을 설명합니다.

  • IP 주소
  • 이름
  • 쿼럼 상태
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/monitor/NAME'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • NAME with the short host name of the Monitor

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/monitor/NAME'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor/NAME', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • NAME with the short host name of the Monitor
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/monitor/NAME', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/monitor/NAME
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • NAME with the short host name of the Monitor

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.1.7. OSD에 대한 정보는 어떻게 볼 수 있습니까?

이 섹션에서는 다음과 같은 OSD에 대한 정보를 보는 방법을 설명합니다.

  • IP 주소
  • 해당 풀
  • 유사성
  • weight
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/osd
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.1.8. Part OSD에 대한 정보는 어떻게 볼 수 있습니까?

이 섹션에서는 다음과 같은 특정 OSD에 대한 정보를 보는 방법을 설명합니다.

  • IP 주소
  • 해당 풀
  • 유사성
  • weight
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/osd/ID
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

이 섹션에서는 RESTful 플러그인을 사용하여 OSD에서 스크럽 또는 딥 스크럽과 같은 프로세스를 확인하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID/command', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/osd/ID/command', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/osd/ID/command
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.1.10. 풀에 대한 정보는 어떻게 볼 수 있습니까?

이 섹션에서는 다음과 같은 풀에 대한 정보를 보는 방법을 설명합니다.

  • 플래그
  • 크기
  • 배치 그룹 수
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/pool'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/pool
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.1.11. 파트 풀에 대한 정보는 어떻게 볼 수 있습니까?

이 섹션에서는 다음과 같은 특정 풀에 대한 정보를 보는 방법을 설명합니다.

  • 플래그
  • 크기
  • 배치 그룹 수
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 풀 필드에 나열된 풀의 ID 와 함께

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 풀 필드에 나열된 풀의 ID 와 함께
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/pool/ID
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 풀 필드에 나열된 풀의 ID 와 함께

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.1.12. 호스트에 대한 정보는 어떻게 볼 수 있습니까?

이 섹션에서는 다음과 같은 호스트에 대한 정보를 보는 방법을 설명합니다.

  • 호스트 이름
  • Ceph 데몬 및 해당 ID
  • Ceph 버전
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/host'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/host'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/host
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.1.13. How can I view information about a part host?

이 섹션에서는 다음과 같은 특정 호스트에 대한 정보를 보는 방법을 설명합니다.

  • 호스트 이름
  • Ceph 데몬 및 해당 ID
  • Ceph 버전
curl 명령

명령줄에서 다음을 사용합니다.

curl --silent --user USER 'https://CEPH_MANAGER:8080/api/host/HOST_NAME'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • HOST_NAME (호스트 이름) 필드에 나열된 호스트의 호스트 이름

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/host/HOST_NAME'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host/HOST_NAME', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • HOST_NAME (호스트 이름) 필드에 나열된 호스트의 호스트 이름
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.get('https://CEPH_MANAGER:8080/api/host/HOST_NAME', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
웹 브라우저

웹 브라우저에서 다음을 입력합니다.

https://CEPH_MANAGER:8080/api/host/HOST_NAME
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • HOST_NAME (호스트 이름) 필드에 나열된 호스트의 호스트 이름

메시지가 표시되면 사용자 이름과 암호를 입력합니다.

1.4.2. 설정 변경

이 섹션에서는 Ceph API를 사용하여 OSD 구성 옵션, OSD 상태 및 풀에 대한 정보를 변경하는 방법을 설명합니다.

1.4.2.1. OSD 구성 옵션은 어떻게 변경할 수 있습니까?

이 섹션에서는 RESTful 플러그인을 사용하여 OSD 구성 옵션을 변경하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'
Copy to Clipboard Toggle word wrap

교체:

  • 수정 옵션이 있는 옵션; 일시 중지,no down,noout,no backfill,norecover,noscrub,nodeep-scrub
  • true 또는 falseVALUE
  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/flags'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/flags', json={"OPTION": VALUE}, auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 수정 옵션이 있는 옵션; 일시 중지,no down,noout,no backfill,norecover,noscrub,nodeep-scrub
  • True 또는 FalseVALUE
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/flags', json={"OPTION": VALUE}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
1.4.2.2. OSD 상태를 변경하려면 어떻게 해야 합니까?

이 섹션에서는 RESTful 플러그인을 사용하여 OSD 상태를 변경하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

echo -En '{"STATE": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Copy to Clipboard Toggle word wrap

교체:

  • 변경할 상태(in or up)인 STATE
  • true 또는 falseVALUE
  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

echo -En '{"STATE": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/ID', json={"STATE": VALUE}, auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID
  • 변경할 상태(in or up)인 STATE
  • True 또는 FalseVALUE
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/ID', json={"STATE": VALUE}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
1.4.2.3. OSD 가중치는 어떻게 복구할 수 있습니까?

이 섹션에서는 OSD의 가중치를 변경하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

echo -En '{"reweight": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Copy to Clipboard Toggle word wrap

교체:

  • 새 가중치로 VALUE
  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

echo -En '{"reweight": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/osd/ID', json={"reweight": VALUE}, auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • osd 필드에 나열된 OSD의 ID 로 ID
  • 새 가중치로 VALUE
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/osd/ID', json={"reweight": VALUE}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
1.4.2.4. 어떻게 풀의 정보를 변경할 수 있습니까?

이 섹션에서는 RESTful 플러그인을 사용하여 특정 풀의 정보를 변경하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Copy to Clipboard Toggle word wrap

교체:

  • 수정할 수 있는 옵션이 있는 옵션
  • 옵션의 새 값을 사용하여 VALUE
  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 풀 필드에 나열된 풀의 ID 와 함께

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

echo -En '{"OPTION": VALUE}' | curl --request PATCH --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/pool/ID', json={"OPTION": VALUE}, auth=("USER, "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 풀 필드에 나열된 풀의 ID 와 함께
  • 수정할 수 있는 옵션이 있는 옵션
  • 옵션의 새 값을 사용하여 VALUE
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.patch('https://CEPH_MANAGER:8080/api/pool/ID', json={"OPTION": VALUE}, auth=("USER, "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap

1.4.3. 클러스터 관리

이 섹션에서는 Ceph API를 사용하여 OSD에서 스크럽 또는 딥 스크럽을 초기화하고, 풀을 생성하거나 풀에서 데이터를 제거하거나 요청을 생성하는 방법을 설명합니다.

1.4.3.1. OSD에서 스케줄링된 프로세스를 어떻게 실행할 수 있습니까?

이 섹션에서는 OSD에서 RESTful API를 사용하여 스케줄링된 프로세스(예: 스크럽 또는 딥 스크럽)를 실행하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

echo -En '{"command": "COMMAND"}' | curl --request POST --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'
Copy to Clipboard Toggle word wrap

교체:

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

echo -En '{"command": "COMMAND"}' | curl --request POST --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/osd/ID/command'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/osd/ID/command', json={"command": "COMMAND"}, auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/osd/ID/command', json={"command": "COMMAND"}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
1.4.3.2. 새 풀을 만들려면 어떻게 해야 합니까?

이 섹션에서는 RESTful 플러그인을 사용하여 새 풀을 생성하는 방법을 설명합니다.

curl 명령

명령줄에서 다음을 사용합니다.

echo -En '{"name": "NAME", "pg_num": NUMBER}' | curl --request POST --data @- --silent --user USER 'https://CEPH_MANAGER:8080/api/pool'
Copy to Clipboard Toggle word wrap

교체:

  • NAME with the name of the new pool
  • 배치 그룹 수 사용
  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

echo -En '{"name": "NAME", "pg_num": NUMBER}' | curl --request POST --data @- --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/pool', json={"name": "NAME", "pg_num": NUMBER}, auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • NAME with the name of the new pool
  • 배치 그룹 수 사용
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.post('https://CEPH_MANAGER:8080/api/pool', json={"name": "NAME", "pg_num": NUMBER}, auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap
1.4.3.3. 어떻게 풀을 제거할 수 있습니까?

이 섹션에서는 RESTful 플러그인을 사용하여 풀을 제거하는 방법을 설명합니다.

이 요청은 기본적으로 금지되어 있습니다. 허용하려면 Ceph 구성 가이드에 다음 매개 변수를 추가합니다.

mon_allow_pool_delete = true
Copy to Clipboard Toggle word wrap
curl 명령

명령줄에서 다음을 사용합니다.

curl --request DELETE --silent --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Copy to Clipboard Toggle word wrap

교체:

  • 사용자 이름이 있는 사용자
  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 풀 필드에 나열된 풀의 ID 와 함께

메시지가 표시되면 사용자 암호를 입력합니다.

자체 서명된 인증서를 사용한 경우 --insecure 옵션을 사용합니다.

curl --request DELETE --silent --insecure --user USER 'https://CEPH_MANAGER:8080/api/pool/ID'
Copy to Clipboard Toggle word wrap
Python

Python 인터프리터에서 다음을 입력합니다.

$ python
>> import requests
>> result = requests.delete('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"))
>> print result.json()
Copy to Clipboard Toggle word wrap

교체:

  • 활성 ceph-mgr 인스턴스가 있는 노드의 IP 주소 또는 짧은 호스트 이름이 있는 CEPH_MANAGER
  • 풀 필드에 나열된 풀의 ID 와 함께
  • 사용자 이름이 있는 사용자
  • 사용자 암호를 사용하는 암호

자체 서명된 인증서를 사용한 경우 verify=False 옵션을 사용합니다.

$ python
>> import requests
>> result = requests.delete('https://CEPH_MANAGER:8080/api/pool/ID', auth=("USER", "PASSWORD"), verify=False)
>> print result.json()
Copy to Clipboard Toggle word wrap

2장. Ceph Object Gateway 관리 API

개발자는 RESTful API(애플리케이션 프로그래밍 인터페이스)와 상호 작용하여 Ceph Object Gateway를 관리할 수 있습니다. Ceph Object Gateway를 사용하면 RESTful API에서 radosgw-admin 명령의 기능을 사용할 수 있습니다. 다른 관리 플랫폼과 통합할 수 있는 사용자, 데이터, 할당량 및 사용량을 관리할 수 있습니다.

참고

Ceph Object Gateway를 구성할 때 명령줄 인터페이스를 사용하는 것이 좋습니다.

관리 API는 다음과 같은 기능을 제공합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.

2.1. 관리 작업

구성 가능한 'admin' 리소스 진입점으로 시작하는 URI에서 관리 API(애플리케이션 프로그래밍 인터페이스) 요청이 수행됩니다. 관리 API에 대한 권한 부여는 S3 권한 부여 메커니즘을 복제합니다. 일부 작업에는 사용자가 특별한 관리 기능을 보유해야 합니다. XML 또는 JSON 응답 엔터티 유형은 요청에서 'format' 옵션으로 지정할 수 있으며 지정하지 않는 경우 기본값은 JSON입니다.

예제

PUT /admin/user?caps&format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Content-Type: text/plain
Authorization: AUTHORIZATION_TOKEN

usage=read
Copy to Clipboard Toggle word wrap

2.2. 관리 인증 요청

Amazon의 S3 서비스는 요청 헤더의 액세스 키와 해시와 시크릿 키를 사용하여 요청을 인증합니다. 인증된 요청, 특히 대규모 업로드를 통해 SSL 오버헤드 없이 제공하는 이점이 있습니다.

S3 API의 대부분의 사용 사례는 Java 또는 Python Boto용 Amazon SDK의 AmazonS3Client 와 같은 오픈 소스 S3 클라이언트를 사용하는 것입니다. 이러한 라이브러리는 Ceph Object Gateway Admin API를 지원하지 않습니다. Ceph Admin API를 지원하도록 이러한 라이브러리를 하위 클래스로 지정하고 확장할 수 있습니다. 또는 고유한 게이트웨이 클라이언트를 만들 수 있습니다.

execute() 메서드 생성

이 섹션의 CephAdminAPI 예제 클래스는 요청 매개 변수를 사용하고 요청을 인증하고 Ceph Admin API를 호출하고 응답을 수신할 수 있는 execute() 메서드를 생성하는 방법을 보여줍니다.

CephAdminAPI 클래스 예제는 지원되지 않거나 상용 용도로 사용됩니다. 이는 단지 목적을 위한 것입니다.

Ceph Object Gateway 호출

클라이언트 코드에 는 CRUD 작업을 설명하기 위해 Ceph Object Gateway에 대한 5개의 호출이 포함되어 있습니다.

  • 사용자 만들기
  • 사용자 가져오기
  • 사용자 수정
  • 하위 사용자 만들기
  • 사용자를 삭제합니다.

이 예제를 사용하려면 httpcomponents-client-4.5.3 Apache HTTP 구성 요소를 가져옵니다. 예를 들어 여기에서 다운로드할 수 있습니다. http://hc.apache.org/downloads.cgi. 그런 다음 tar 파일의 압축을 풀고 lib 디렉터리로 이동하여 JAVA_HOME 디렉터리의 /jre/lib/ext 디렉터리 또는 사용자 지정 classpath에 복사합니다.

CephAdminAPI 클래스 예제를 살펴보면 execute() 메서드는 HTTP 메서드, 요청 경로, 선택적 하위 리소스, 지정되지 않은 경우 null, 매개 변수 맵을 사용합니다. 하위 리소스를 사용하여 실행하려면 하위 리소스(예: 하위 사용자 )를 execute() 메서드에서 인수로 하위 리소스를 지정해야 합니다.

예제 메서드:

  1. URI를 빌드합니다.
  2. HTTP 헤더 문자열을 빌드합니다.
  3. HTTP 요청을 인스턴스화합니다(예: PUT,POST,GET,DELETE ).
  4. HTTP 헤더와 요청 헤더에 Date 헤더를 추가합니다.
  5. HTTP 요청 헤더에 Authorization 헤더를 추가합니다.
  6. HTTP 클라이언트를 인스턴스화하고 인스턴스화된 HTTP 요청을 전달합니다.
  7. 요청을 만듭니다.
  8. 응답을 반환합니다.

헤더 문자열 빌드

헤더 문자열을 빌드하는 것은 Amazon의 S3 인증 절차를 포함하는 프로세스의 일부입니다. 특히 예제 방법은 다음을 수행합니다.

  1. 요청 유형(예: PUT,POST,GET,DELETE )을 추가합니다.
  2. 날짜를 추가합니다.
  3. requestPath를 추가합니다.

요청 유형은 선행 또는 후행 공백 없이 대문자여야 합니다. 공백을 트리밍하지 않으면 인증이 실패합니다. CryostatT로 표시되어야 합니다. 그렇지 않으면 인증이 실패합니다.

예시적인 방법에는 다른 헤더가 없습니다. Amazon S3 인증 절차는 x-amz 헤더를 사전 정렬합니다. 따라서 x-amz 헤더를 추가하는 경우 사전을 추가해야 합니다.

헤더 문자열을 빌드한 후 다음 단계는 HTTP 요청을 인스턴스화하고 URI를 전달하는 것입니다. 예시적인 방법은 사용자 및 하위 사용자를 생성하는 데 PUT 을 사용합니다. GET 은 사용자를 가져오기 위해 GET, 사용자를 수정하기 위한 POST, 사용자를 삭제하기 위해 DELETE 를 사용합니다.

요청을 인스턴스화한 후 Date 헤더 뒤에 Authorization 헤더를 추가합니다. Amazon의 S3 인증은 표준 인증 헤더를 사용하며 다음과 같은 구조를 갖습니다.

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

CephAdminAPI 예제 클래스에는 admin 사용자의 헤더 문자열과 시크릿 키를 가져와 base-64로 인코딩된 문자열로 SHA1 HMAC를 반환하는 base64Sha1Hmac() 메서드가 있습니다. 각 execute() 호출은 동일한 코드 행을 호출하여 Authorization 헤더를 빌드합니다.

httpRequest.addHeader("Authorization", "AWS " + this.getAccessKey() + ":" + base64Sha1Hmac(headerString.toString(), this.getSecretKey()));
Copy to Clipboard Toggle word wrap

다음 CephAdminAPI 예제 클래스를 사용하려면 액세스 키, 시크릿 키 및 엔드포인트를 생성자에 전달해야 합니다. 클래스는 런타임 시 변경할 수 있는 접근자 메서드를 제공합니다.

예제

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.Header;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.utils.URIBuilder;

import java.util.Base64;
import java.util.Base64.Encoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.Mac;

import java.util.Map;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry;

public class CephAdminAPI {

	/*
	 * Each call must specify an access key, secret key, endpoint and format.
	 */
	String accessKey;
	String secretKey;
	String endpoint;
	String scheme = "http"; //http only.
	int port = 80;

	/*
	 * A constructor that takes an access key, secret key, endpoint and format.
	 */
	public CephAdminAPI(String accessKey, String secretKey, String endpoint){
		this.accessKey = accessKey;
		this.secretKey = secretKey;
		this.endpoint = endpoint;
	}

	/*
	 * Accessor methods for access key, secret key, endpoint and format.
	 */
	public String getEndpoint(){
		return this.endpoint;
	}

	public void setEndpoint(String endpoint){
		this.endpoint = endpoint;
	}

	public String getAccessKey(){
		return this.accessKey;
	}

	public void setAccessKey(String accessKey){
		this.accessKey = accessKey;
	}

	public String getSecretKey(){
		return this.secretKey;
	}

	public void setSecretKey(String secretKey){
		this.secretKey = secretKey;
	}

	/*
	 * Takes an HTTP Method, a resource and a map of arguments and
	 * returns a CloseableHTTPResponse.
	 */
	public CloseableHttpResponse execute(String HTTPMethod, String resource,
                                        String subresource, Map arguments) {

		String httpMethod = HTTPMethod;
		String requestPath = resource;
		StringBuffer request = new StringBuffer();
		StringBuffer headerString = new StringBuffer();
		HttpRequestBase httpRequest;
		CloseableHttpClient httpclient;
		URI uri;
		CloseableHttpResponse httpResponse = null;

		try {

			uri = new URIBuilder()
				.setScheme(this.scheme)
				.setHost(this.getEndpoint())
				.setPath(requestPath)
				.setPort(this.port)
				.build();


			if (subresource != null){
				uri = new URIBuilder(uri)
					.setCustomQuery(subresource)
					.build();
			}


			for (Iterator iter = arguments.entrySet().iterator();
			iter.hasNext();) {
				Entry entry = (Entry)iter.next();
				uri = new URIBuilder(uri)
					.setParameter(entry.getKey().toString(),
                                 entry.getValue().toString())
					.build();

			}

			request.append(uri);

			headerString.append(HTTPMethod.toUpperCase().trim() + "\n\n\n");

			OffsetDateTime dateTime = OffsetDateTime.now(ZoneId.of("GMT"));
			DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
			String date = dateTime.format(formatter);

			headerString.append(date + "\n");
			headerString.append(requestPath);

			if (HTTPMethod.equalsIgnoreCase("PUT")){
				httpRequest = new HttpPut(uri);
			} else if (HTTPMethod.equalsIgnoreCase("POST")){
				httpRequest = new HttpPost(uri);
			} else if (HTTPMethod.equalsIgnoreCase("GET")){
				httpRequest = new HttpGet(uri);
			} else if (HTTPMethod.equalsIgnoreCase("DELETE")){
				httpRequest = new HttpDelete(uri);
			} else {
				System.err.println("The HTTP Method must be PUT,
				POST, GET or DELETE.");
				throw new IOException();
			}

			httpRequest.addHeader("Date", date);
			httpRequest.addHeader("Authorization", "AWS " + this.getAccessKey()
			+ ":" + base64Sha1Hmac(headerString.toString(),
			this.getSecretKey()));

			httpclient = HttpClients.createDefault();
			httpResponse = httpclient.execute(httpRequest);

		} 	catch  (URISyntaxException e){
			System.err.println("The URI is not formatted properly.");
			e.printStackTrace();
		}  catch (IOException e){
			System.err.println("There was an error making the request.");
			e.printStackTrace();
		}
			return httpResponse;
	}

	/*
	 * Takes a uri and a secret key and returns a base64-encoded
	 * SHA-1 HMAC.
	 */
	public String base64Sha1Hmac(String uri, String secretKey) {
		try {

			byte[] keyBytes = secretKey.getBytes("UTF-8");
			SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");

			Mac mac = Mac.getInstance("HmacSHA1");
			mac.init(signingKey);

			byte[] rawHmac = mac.doFinal(uri.getBytes("UTF-8"));

			Encoder base64 = Base64.getEncoder();
			return base64.encodeToString(rawHmac);

		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}
Copy to Clipboard Toggle word wrap

이후 CephAdminAPIClient 예제에서는 CephAdminAPI 클래스를 인스턴스화하고, 요청 매개변수 맵을 빌드하고, execute() 메서드를 사용하여 사용자를 생성, 가져오기, 업데이트 및 삭제하는 방법을 보여줍니다.

예제

import java.io.IOException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import java.util.*;


public class CephAdminAPIClient {

	public static void main (String[] args){

		CephAdminAPI adminApi = new CephAdminAPI ("FFC6ZQ6EMIF64194158N",
		                            "Xac39eCAhlTGcCAUreuwe1ZuH5oVQFa51lbEMVoT",
		                            "ceph-client");

		/*
		 * Create a user
		 */
		Map requestArgs = new HashMap();
		requestArgs.put("access", "usage=read, write; users=read, write");
		requestArgs.put("display-name", "New User");
		requestArgs.put("email", "new-user@email.com");
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");

		CloseableHttpResponse response =
			adminApi.execute("PUT", "/admin/user", null, requestArgs);

		System.out.println(response.getStatusLine());
		HttpEntity entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}

		/*
		 * Get a user
		 */
		requestArgs = new HashMap();
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");

		response = adminApi.execute("GET", "/admin/user", null, requestArgs);

		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}

		/*
		 * Modify a user
		 */
		requestArgs = new HashMap();
		requestArgs.put("display-name", "John Doe");
		requestArgs.put("email", "johndoe@email.com");
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");
		requestArgs.put("max-buckets", "100");

		response = adminApi.execute("POST", "/admin/user", null, requestArgs);

		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}


		/*
		 * Create a subuser
		 */
		requestArgs = new HashMap();
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");
		requestArgs.put("subuser", "foobar");

		response = adminApi.execute("PUT", "/admin/user", "subuser", requestArgs);
		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}


		/*
		 * Delete a user
		 */
		requestArgs = new HashMap();
		requestArgs.put("format", "json");
		requestArgs.put("uid", "new-user");

		response = adminApi.execute("DELETE", "/admin/user", null, requestArgs);
		System.out.println(response.getStatusLine());
		entity = response.getEntity();

		try {
			System.out.println("\nResponse Content is: "
				+ EntityUtils.toString(entity, "UTF-8") + "\n");
			response.close();
		} catch (IOException e){
			System.err.println ("Encountered an I/O exception.");
			e.printStackTrace();
		}
	}
}
Copy to Clipboard Toggle word wrap

추가 리소스

2.3. 관리자 생성

중요

Ceph Object Gateway 노드에서 radosgw-admin 명령을 실행하려면 노드에 관리자 키가 있는지 확인합니다. 관리 키는 모든 Ceph Monitor 노드에서 복사할 수 있습니다.

사전 요구 사항

  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

프로세스

  1. 오브젝트 게이트웨이 사용자를 생성합니다.

    구문

    radosgw-admin user create --uid="USER_NAME" --display-name="DISPLAY_NAME"
    Copy to Clipboard Toggle word wrap

    예제

    [user@client ~]$ radosgw-admin user create --uid="admin-api-user" --display-name="Admin API User"
    Copy to Clipboard Toggle word wrap

    radosgw-admin 명령줄 인터페이스는 사용자를 반환합니다.

    출력 예

    {
        "user_id": "admin-api-user",
        "display_name": "Admin API User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "admin-api-user",
                "access_key": "NRWGT19TWMYOB1YDBV1Y",
                "secret_key": "gr1VEGIV7rxcP3xvXDFCo4UDwwl2YoNrmtRlIAty"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "temp_url_keys": []
    }
    Copy to Clipboard Toggle word wrap

  2. 생성한 사용자에게 관리 기능을 할당합니다.

    구문

    radosgw-admin caps add --uid="USER_NAME" --caps="users=*"
    Copy to Clipboard Toggle word wrap

    예제

    [user@client ~]$ radosgw-admin caps add --uid=admin-api-user --caps="users=*"
    Copy to Clipboard Toggle word wrap

    radosgw-admin 명령줄 인터페이스는 사용자를 반환합니다. "caps": 에는 사용자에게 할당된 기능이 있습니다.

    출력 예

    {
        "user_id": "admin-api-user",
        "display_name": "Admin API User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "admin-api-user",
                "access_key": "NRWGT19TWMYOB1YDBV1Y",
                "secret_key": "gr1VEGIV7rxcP3xvXDFCo4UDwwl2YoNrmtRlIAty"
            }
        ],
        "swift_keys": [],
        "caps": [
            {
                "type": "users",
                "perm": "*"
            }
        ],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "temp_url_keys": []
    }
    Copy to Clipboard Toggle word wrap

    이제 관리 권한이 있는 사용자가 있습니다.

2.4. 사용자 정보 가져오기

사용자의 정보를 가져옵니다. 이 작업을 실행하려면 사용자 또는 user-info-without-keys읽기 로 설정해야 합니다. cap user-info-without-keys읽기 또는 * 로 설정된 경우 이 작업을 실행하는 사용자가 시스템 사용자, 관리자 또는 cap 사용자가 읽도록 설정되지 않는 한 S3 키와 Swift 키는 응답에 포함되지 않습니다.

capabilities

users=read or user-info-without-keys=read
Copy to Clipboard Toggle word wrap

구문

GET /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
사용자가 정보를 요청하는 사용자입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
access-key
설명
정보가 요청된 사용자의 S3 액세스 키입니다.
유형
문자열
예제
ABCD0EF12GHIJ2K34LMN
필수 항목
없음

응답 엔터티

user
설명
사용자 데이터 정보를 위한 컨테이너입니다.
유형
컨테이너
상위
해당 없음
user_id
설명
사용자 ID입니다.
유형
문자열
상위
user
display_name
설명
사용자의 표시 이름입니다.
유형
문자열
상위
user
suspended
설명
사용자가 일시 중단된 경우 True입니다.
유형
부울
상위
user
max_buckets
설명
사용자가 보유할 최대 버킷 수입니다.
유형
정수
상위
user
하위 사용자
설명
이 사용자 계정과 연결된 하위 사용자입니다.
유형
컨테이너
상위
user
설명
이 사용자 계정과 연결된 S3 키입니다.
유형
컨테이너
상위
user
swift_keys
설명
이 사용자 계정과 연결된 Swift 키입니다.
유형
컨테이너
상위
user
caps
설명
사용자 기능.
유형
컨테이너
상위
user

성공하면 응답에 사용자 정보가 포함됩니다.

특수 오류 응답

없음.

2.5. 사용자 생성

새 사용자를 생성합니다. 기본적으로 S3 키 쌍은 자동으로 생성되고 응답에 반환됩니다. access-key 또는 secret-key 만 제공되면 생략된 키가 자동으로 생성됩니다. 기본적으로 기존 키 쌍을 교체하지 않고 생성된 키가 인증 키에 추가됩니다. access-key 가 지정되고 사용자가 소유한 기존 키를 참조하는 경우 수정됩니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

PUT /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
생성할 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
display-name
설명
생성할 사용자의 표시 이름입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
email
설명
사용자와 연결된 이메일 주소입니다.
유형
문자열
예제
foo@bar.com
필수 항목
없음
key-type
설명
생성할 키 유형, 옵션은 swift, s3(기본값)입니다.
유형
문자열
예제
s3 [s3]
필수 항목
없음
access-key
설명
액세스 키를 지정합니다.
유형
문자열
예제
ABCD0EF12GHIJ2K34LMN
필수 항목
없음
secret-key
설명
시크릿 키를 지정합니다.
유형
문자열
예제
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
필수 항목
없음
user-caps
설명
사용자 기능.
유형
문자열
예제
usage=read, write; users=read
필수 항목
없음
generate-key
설명
새 키 쌍을 생성하고 기존 인증 키에 추가합니다.
유형
부울
예제
true [True]
필수 항목
없음
max-buckets
설명
사용자가 보유할 수 있는 최대 버킷 수를 지정합니다.
유형
정수
예제
500 [1000]
필수 항목
없음
suspended
설명
사용자를 일시 중단해야 하는지 여부를 지정합니다.
유형
부울
예제
false [False]
필수 항목
없음

응답 엔터티

user
설명
사용자를 일시 중단해야 하는지 여부를 지정합니다.
유형
부울
상위
없음
user_id
설명
사용자 ID입니다.
유형
문자열
상위
user
display_name
설명
사용자의 표시 이름입니다.
유형
문자열
상위
user
suspended
설명
사용자가 일시 중단된 경우 True입니다.
유형
부울
상위
user
max_buckets
설명
사용자가 보유할 최대 버킷 수입니다.
유형
정수
상위
user
하위 사용자
설명
이 사용자 계정과 연결된 하위 사용자입니다.
유형
컨테이너
상위
user
설명
이 사용자 계정과 연결된 S3 키입니다.
유형
컨테이너
상위
user
swift_keys
설명
이 사용자 계정과 연결된 Swift 키입니다.
유형
컨테이너
상위
user
caps
설명
사용자 기능.
유형
컨테이너
상위
성공하면 응답에 사용자 정보가 포함됩니다.

특수 오류 응답

UserExists
설명
기존 사용자 생성을 시도합니다.
코드
409 충돌
InvalidAccessKey
설명
잘못된 액세스 키가 지정되었습니다.
코드
400 잘못된 요청
InvalidKeyType
설명
잘못된 키 유형이 지정되었습니다.
코드
400 잘못된 요청
InvalidSecretKey
설명
잘못된 시크릿 키가 지정되었습니다.
코드
400 잘못된 요청
KeyExists
설명
제공된 액세스 키가 존재하며 다른 사용자에게 속합니다.
코드
409 충돌
EmailExists
설명
제공된 이메일 주소가 있습니다.
코드
409 충돌
InvalidCap
설명
잘못된 관리자 기능을 부여합니다.
코드
400 잘못된 요청

추가 리소스

2.6. 사용자 수정

기존 사용자를 수정합니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

POST /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
생성할 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
display-name
설명
생성할 사용자의 표시 이름입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
email
설명
사용자와 연결된 이메일 주소입니다.
유형
문자열
예제
foo@bar.com
필수 항목
없음
generate-key
설명
새 키 쌍을 생성하고 기존 인증 키에 추가합니다.
유형
부울
예제
true [False]
필수 항목
없음
access-key
설명
액세스 키를 지정합니다.
유형
문자열
예제
ABCD0EF12GHIJ2K34LMN
필수 항목
없음
secret-key
설명
시크릿 키를 지정합니다.
유형
문자열
예제
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
필수 항목
없음
key-type
설명
생성할 키 유형, 옵션은 swift, s3(기본값)입니다.
유형
문자열
예제
s3
필수 항목
없음
user-caps
설명
사용자 기능.
유형
문자열
예제
usage=read, write; users=read
필수 항목
없음
max-buckets
설명
사용자가 보유할 수 있는 최대 버킷 수를 지정합니다.
유형
정수
예제
500 [1000]
필수 항목
없음
suspended
설명
사용자를 일시 중단해야 하는지 여부를 지정합니다.
유형
부울
예제
false [False]
필수 항목
없음

응답 엔터티

user
설명
사용자를 일시 중단해야 하는지 여부를 지정합니다.
유형
부울
상위
없음
user_id
설명
사용자 ID입니다.
유형
문자열
상위
user
display_name
설명
사용자의 표시 이름입니다.
유형
문자열
상위
user
suspended
설명
사용자가 일시 중단된 경우 True입니다.
유형
부울
상위
user
max_buckets
설명
사용자가 보유할 최대 버킷 수입니다.
유형
정수
상위
user
하위 사용자
설명
이 사용자 계정과 연결된 하위 사용자입니다.
유형
컨테이너
상위
user
설명
이 사용자 계정과 연결된 S3 키입니다.
유형
컨테이너
상위
user
swift_keys
설명
이 사용자 계정과 연결된 Swift 키입니다.
유형
컨테이너
상위
user
caps
설명
사용자 기능.
유형
컨테이너
상위
성공하면 응답에 사용자 정보가 포함됩니다.

특수 오류 응답

InvalidAccessKey
설명
잘못된 액세스 키가 지정되었습니다.
코드
400 잘못된 요청
InvalidKeyType
설명
잘못된 키 유형이 지정되었습니다.
코드
400 잘못된 요청
InvalidSecretKey
설명
잘못된 시크릿 키가 지정되었습니다.
코드
400 잘못된 요청
KeyExists
설명
제공된 액세스 키가 존재하며 다른 사용자에게 속합니다.
코드
409 충돌
EmailExists
설명
제공된 이메일 주소가 있습니다.
코드
409 충돌
InvalidCap
설명
잘못된 관리자 기능을 부여합니다.
코드
400 잘못된 요청

추가 리소스

2.7. 사용자 제거

기존 사용자를 제거합니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

DELETE /admin/user?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
제거할 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
purge-data
설명
지정된 경우 사용자에게 속한 버킷과 오브젝트도 제거됩니다.
유형
부울
예제
True
필수 항목
없음

응답 엔터티

없음.

특수 오류 응답

없음.

추가 리소스

2.8. 하위 사용자 생성

새 하위 사용자를 만듭니다. 주로 Swift API를 사용하는 클라이언트에 유용합니다.

참고

유효한 요청에는 gen- subuser 또는 하위 사용자가 필요합니다. 일반적으로 하위 사용자는 액세스 권한을 지정하여 권한을 부여해야 합니다. 하위 사용자가 시크릿 없이 지정되면 사용자 생성과 마찬가지로 시크릿 키가 자동으로 생성됩니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

PUT /admin/user?subuser&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
하위 사용자를 생성할 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
하위 사용자
설명
생성할 하위 사용자 ID를 지정합니다.
유형
문자열
예제
sub_foo
필수 항목
제공됨 (또는 gen-subuser)
gen-subuser
설명
생성할 하위 사용자 ID를 지정합니다.
유형
문자열
예제
sub_foo
필수 항목
제공됨 (또는 gen-subuser)
secret-key
설명
시크릿 키를 지정합니다.
유형
문자열
예제
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
필수 항목
없음
key-type
설명
생성할 키 유형, 옵션은 swift(기본값), s3입니다.
유형
문자열
예제
swift [swift]
필수 항목
없음
액세스
설명
하위 사용자에 대한 액세스 권한을 설정하는 것은 읽기, 쓰기, 읽기 쓰기, 전체 여야 합니다.
유형
문자열
예제
읽기
필수 항목
없음
generate-secret
설명
시크릿 키를 생성합니다.
유형
부울
예제
true [False]
필수 항목
없음

응답 엔터티

하위 사용자
설명
사용자 계정과 연결된 하위 사용자입니다.
유형
컨테이너
상위
해당 없음
권한
설명
하위 사용자 액세스 사용자 계정.
유형
문자열
상위
하위 사용자

성공하면 응답에 하위 사용자 정보가 포함됩니다.

특수 오류 응답

SubuserExists
설명
지정된 하위 사용자가 있습니다.
코드
409 충돌
InvalidKeyType
설명
잘못된 키 유형이 지정되었습니다.
코드
400 잘못된 요청
InvalidSecretKey
설명
잘못된 시크릿 키가 지정되었습니다.
코드
400 잘못된 요청
InvalidAccess
설명
잘못된 하위 사용자 액세스 지정
코드
400 잘못된 요청

2.9. 하위 사용자 수정

기존 하위 사용자를 수정합니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

POST /admin/user?subuser&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
하위 사용자를 생성할 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
하위 사용자
설명
수정할 하위 사용자 ID입니다.
유형
문자열
예제
sub_foo
필수 항목
generate-secret
설명
기존 키를 교체하여 하위 사용자의 새 시크릿 키를 생성합니다.
유형
부울
예제
true [False]
필수 항목
없음
secret
설명
시크릿 키를 지정합니다.
유형
문자열
예제
0AbCDEFg1h2i34JklM5nop6QrSTUV+WxyzaBC7D8
필수 항목
없음
key-type
설명
생성할 키 유형, 옵션은 swift(기본값), s3입니다.
유형
문자열
예제
swift [swift]
필수 항목
없음
액세스
설명
하위 사용자에 대한 액세스 권한을 설정하는 것은 읽기, 쓰기, 읽기 쓰기, 전체 여야 합니다.
유형
문자열
예제
읽기
필수 항목
없음

응답 엔터티

하위 사용자
설명
사용자 계정과 연결된 하위 사용자입니다.
유형
컨테이너
상위
해당 없음
id
설명
하위 사용자 ID
유형
문자열
상위
하위 사용자
권한
설명
하위 사용자 액세스 사용자 계정.
유형
문자열
상위
하위 사용자

성공하면 응답에 하위 사용자 정보가 포함됩니다.

특수 오류 응답

InvalidKeyType
설명
잘못된 키 유형이 지정되었습니다.
코드
400 잘못된 요청
InvalidSecretKey
설명
잘못된 시크릿 키가 지정되었습니다.
코드
400 잘못된 요청
InvalidAccess
설명
잘못된 하위 사용자 액세스 지정
코드
400 잘못된 요청

2.10. 하위 사용자 제거

기존 하위 사용자를 제거합니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

DELETE /admin/user?subuser&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
제거할 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
하위 사용자
설명
제거할 하위 사용자 ID입니다.
유형
문자열
예제
sub_foo
필수 항목
제공됨
purge-keys
설명
하위 사용자에 속하는 키를 제거합니다.
유형
부울
예제
true [True]
필수 항목
없음

응답 엔터티

없음.

특수 오류 응답

없음.

2.11. 사용자에게 기능 추가

지정된 사용자에게 관리 기능을 추가합니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

PUT /admin/user?caps&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
관리 기능을 추가할 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
user-caps
설명
사용자에게 추가할 관리 기능입니다.
유형
문자열
예제
usage=read, write
필수 항목
제공됨

응답 엔터티

user
설명
사용자 데이터 정보를 위한 컨테이너입니다.
유형
컨테이너
상위
해당 없음
user_id
설명
사용자 ID
유형
문자열
상위
user
caps
설명
사용자 기능,
유형
컨테이너
상위
user

성공하면 응답에 사용자의 기능이 포함됩니다.

특수 오류 응답

InvalidCap
설명
잘못된 관리자 기능을 부여합니다.
코드
400 잘못된 요청

2.12. 사용자의 기능 제거

지정된 사용자로부터 관리 기능을 제거합니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

DELETE /admin/user?caps&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
에서 관리 기능을 제거하는 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
user-caps
설명
사용자에서 제거할 관리 기능입니다.
유형
문자열
예제
usage=read, write
필수 항목
제공됨

응답 엔터티

user
설명
사용자 데이터 정보를 위한 컨테이너입니다.
유형
컨테이너
상위
해당 없음
user_id
설명
사용자 ID입니다.
유형
문자열
상위
user
caps
설명
사용자 기능.
유형
컨테이너
상위
user

성공하면 응답에 사용자의 기능이 포함됩니다.

특수 오류 응답

InvalidCap
설명
잘못된 관리자 기능 제거를 시도합니다.
코드
400 잘못된 요청
NoSuchCap
설명
사용자에게 지정된 기능이 없습니다.
코드
404 not found

2.13. 키 생성

새 키를 만듭니다. 하위 사용자를 지정하면 기본적으로 생성된 키는 swift 유형이 됩니다. access-key 또는 secret-key 중 하나만 제공되면 커밋된 키가 자동으로 생성됩니다. 즉 secret-key 만 지정된 경우 access-key 가 자동으로 생성됩니다. 기본적으로 기존 키 쌍을 교체하지 않고 생성된 키가 인증 키에 추가됩니다. access-key 가 지정되고 사용자가 소유한 기존 키를 참조하는 경우 수정됩니다. 응답은 생성된 키와 동일한 유형의 모든 키를 나열하는 컨테이너입니다.

참고

swift 키를 생성할 때 access-key 옵션을 지정하면 적용되지 않습니다. 또한 각 사용자 또는 하위 사용자가 하나의 swift 키만 보유할 수 있습니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

PUT /admin/user?key&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
새 키를 수신하는 사용자 ID입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
하위 사용자
설명
새 키를 수신하는 하위 사용자 ID입니다.
유형
문자열
예제
sub_foo
필수 항목
없음
key-type
설명
생성할 키 유형, 옵션은 swift, s3(기본값)입니다.
유형
문자열
예제
s3 [s3]
필수 항목
없음
access-key
설명
액세스 키를 지정합니다.
유형
문자열
예제
AB01C2D3EF45G6H7IJ8K
필수 항목
없음
secret-key
설명
시크릿 키를 지정합니다.
유형
문자열
예제
0ab/CdeFGhij1klmnopqRSTUv1WxyZabcDEFgHij
필수 항목
없음
generate-key
설명
새 키 쌍을 생성하고 기존 인증 키에 추가합니다.
유형
부울
예제
True [True]
필수 항목
없음

응답 엔터티

설명
이 사용자 계정과 연결된 생성된 유형의 키입니다.
유형
컨테이너
상위
해당 없음
user
설명
키와 연결된 사용자 계정입니다.
유형
문자열
상위
access-key
설명
액세스 키입니다.
유형
문자열
상위
secret-key
설명
시크릿 키입니다.
유형
문자열
상위

특수 오류 응답

InvalidAccessKey
설명
잘못된 액세스 키가 지정되었습니다.
코드
400 잘못된 요청
InvalidKeyType
설명
잘못된 키 유형이 지정되었습니다.
코드
400 잘못된 요청
InvalidSecretKey
설명
잘못된 시크릿 키가 지정되었습니다.
코드
400 잘못된 요청
InvalidKeyType
설명
잘못된 키 유형이 지정되었습니다.
코드
400 잘못된 요청
KeyExists
설명
제공된 액세스 키가 존재하며 다른 사용자에게 속합니다.
코드
409 충돌

2.14. 키 제거

기존 키를 제거합니다.

capabilities

`users=write`
Copy to Clipboard Toggle word wrap

구문

DELETE /admin/user?key&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

access-key
설명
제거할 S3 키 쌍에 속하는 S3 액세스 키입니다.
유형
문자열
예제
AB01C2D3EF45G6H7IJ8K
필수 항목
제공됨
uid
설명
키를 제거할 사용자입니다.
유형
문자열
예제
foo_user
필수 항목
없음
하위 사용자
설명
키를 제거할 하위 사용자입니다.
유형
문자열
예제
sub_foo
필수 항목
없음
key-type
설명

제거할 키 유형, 옵션은 swift, s3입니다.

참고

swift 키를 제거하는 데 필요합니다.

유형
문자열
예제
swift
필수 항목
없음

특수 오류 응답

없음.

응답 엔터티

없음.

2.15. 버킷 알림

스토리지 관리자는 이러한 API를 사용하여 버킷 알림 메커니즘에 대한 구성 및 제어 인터페이스를 제공할 수 있습니다. API 주제는 특정 엔드포인트의 정의가 포함된 이름이 지정된 오브젝트입니다. 버킷 알림은 주제를 특정 버킷과 연결합니다. S3 버킷 작업 섹션에서는 버킷 알림에 대한 자세한 정보를 제공합니다.

참고

모든 주제 작업에서 매개변수는 URL로 인코딩되며 application/x-www-form-urlencoded 콘텐츠 유형을 사용하여 메시지 본문에 전송됩니다.

참고

주제 업데이트가 적용되려면 이미 주제와 연결된 버킷 알림을 다시 생성해야 합니다.

사전 요구 사항

  • Ceph Object Gateway에서 버킷 알림을 생성합니다.

2.15.1. 버킷 알림 개요

버킷 알림은 버킷에서 특정 이벤트가 발생할 때 Ceph Object Gateway에서 정보를 보내는 방법을 제공합니다. 버킷 알림은 HTTP, AMQP0.9.1 및 Kafka 끝점으로 보낼 수 있습니다. 특정 버킷 및 특정 주제의 이벤트에 대한 버킷 알림을 보내려면 알림 항목을 생성해야 합니다. 버킷 알림은 이벤트 유형의 서브 세트에서 또는 기본적으로 모든 이벤트 유형에 대해 생성할 수 있습니다. 버킷 알림은 키 접두사 또는 접미사, 키와 일치하는 정규식, 오브젝트에 연결된 메타데이터 속성 또는 오브젝트 태그를 기반으로 이벤트를 필터링할 수 있습니다. 버킷 알림에는 버킷 알림 메커니즘에 대한 구성 및 제어 인터페이스를 제공하는 REST API가 있습니다.

오브젝트가 영역에 동기화될 때 버킷 알림을 전송하면 외부 시스템에서 오브젝트 수준에서 영역 동기화 상태로 정보를 얻을 수 있습니다. 버킷 알림 이벤트 유형 s3:ObjectSynced:*s3:ObjectSynced:Created 에서는 버킷 알림 메커니즘을 통해 구성된 경우 오브젝트 동기화 시 동기화된 RGW에서 알림 이벤트를 보냅니다. 알림 이벤트가 전송되는 각 영역에서 주제와 알림 구성은 별도로 수행해야 합니다.

2.15.2. 영구 알림

영구 알림을 사용하면 Ceph Object Gateway에서 주제에 구성된 엔드포인트로 알림을 안정적으로 비동기적으로 제공할 수 있습니다. 끝점으로의 전달은 요청 중에 동기적으로 수행되므로 일반 알림도 신뢰할 수 있습니다. 영구 알림을 사용하면 엔드포인트가 다운되거나 작업 중에 네트워크 문제가 있는 경우에도 Ceph Object Gateway에서 알림 전송을 다시 시도합니다. 엔드포인트로 전달되지 않은 경우 알림을 다시 시도합니다. 알림은 알림 작업과 관련된 다른 모든 작업이 성공한 후에만 전송됩니다. 끝점이 장기간 다운되면 알림 큐가 채워지고 이러한 끝점에 대한 알림을 구성한 S3 작업이 실패합니다.

참고

kafka-ack-level=none 에서는 메시지 실패에 대한 표시가 없으므로 브로커가 다운된 동안 전송된 메시지는 다시 시도되지 않습니다. 브로커가 다시 가동되면 새 알림만 표시됩니다.

2.15.3. 주제 생성

버킷 알림을 생성하기 전에 주제를 생성할 수 있습니다. 주제는 SNS(Simple Notification Service) 엔티티이고 모든 주제 작업(즉, 생성,삭제,목록가져오기 )은 Cryostat 작업입니다. 주제에는 버킷 알림이 생성될 때 사용되는 엔드포인트 매개변수가 있어야 합니다. 요청이 성공하면 응답에 나중에 버킷 알림 요청에서 이 주제를 참조하는 데 사용할 수 있는 ARM(Amazon Resource Name) 항목이 포함됩니다.

참고

topic_arn 은 버킷 알림 구성을 제공하고 주제가 생성된 후 생성됩니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 루트 수준 액세스.
  • Ceph Object Gateway 설치
  • 사용자 액세스 키 및 시크릿 키.
  • 엔드포인트 매개 변수.

프로세스

  1. 다음 요청 형식으로 주제를 생성합니다.

    구문

    POST
    Action=CreateTopic
    &Name=TOPIC_NAME
    [&Attributes.entry.1.key=amqp-exchange&Attributes.entry.1.value=EXCHANGE]
    [&Attributes.entry.2.key=amqp-ack-level&Attributes.entry.2.value=none|broker|routable]
    [&Attributes.entry.3.key=verify-ssl&Attributes.entry.3.value=true|false]
    [&Attributes.entry.4.key=kafka-ack-level&Attributes.entry.4.value=none|broker]
    [&Attributes.entry.5.key=use-ssl&Attributes.entry.5.value=true|false]
    [&Attributes.entry.6.key=ca-location&Attributes.entry.6.value=FILE_PATH]
    [&Attributes.entry.7.key=OpaqueData&Attributes.entry.7.value=OPAQUE_DATA]
    [&Attributes.entry.8.key=push-endpoint&Attributes.entry.8.value=ENDPOINT]
    [&Attributes.entry.9.key=persistent&Attributes.entry.9.value=true|false]
    Copy to Clipboard Toggle word wrap

    요청 매개변수는 다음과 같습니다.

    • 엔드포인트: 알림을 보낼 끝점의 URL입니다.
    • OpaqueData: 불투명 데이터는 주제 구성에서 설정되고 주제에서 트리거한 모든 알림에 추가됩니다.
    • persistent: 이 끝점에 대한 알림이 비동기적으로 지속되는지 여부를 나타냅니다. 기본적으로 값은 false 입니다.
    • HTTP 끝점:

      • URL: https://FQDN:PORT
      • 포트 기본값은: 그에 따라 HTTP[S]에 80/443을 사용합니다.
      • verify-ssl: 클라이언트에서 서버 인증서의 유효성을 검사했는지 여부를 나타냅니다. 기본적으로 true 입니다.
    • AMQP0.9.1 끝점:

      • URL: amqp://USER:PASSWORD@FQDN:PORT[/VHOST].
      • 사용자 및 암호의 기본값은 guestguest 입니다.
      • 사용자 및 암호 세부 정보는 HTTPS를 통해 제공해야 합니다. 그러지 않으면 주제 생성 요청이 거부됩니다.
      • 포트 기본값은: 5672입니다.
      • vhost 의 기본값은 "/"입니다.
      • AMQP-exchange: 교환이 존재해야 하며 주제를 기반으로 메시지를 라우팅할 수 있어야 합니다. 이는 AMQP0.9.1의 필수 매개변수입니다. 동일한 엔드포인트를 가리키는 다양한 주제는 동일한 교환을 사용해야 합니다.
      • AMQP-ack-level: 최종 목적지로 전달되기 전에 브로커에 메시지가 지속될 수 있으므로 승인이 필요합니다. 세 가지 승인 방법이 있습니다.

        • none: 브로커로 전송되는 경우 메시지가 전달되는 것으로 간주됩니다.
        • broker: 기본적으로 브로커가 승인한 경우 메시지가 전달되는 것으로 간주됩니다.
        • 라우팅 가능: 브로커가 소비자에게 라우팅할 수 있는 경우 전달된 메시지로 간주됩니다.

          참고

          특정 매개 변수의 키와 값은 동일한 행 또는 특정 순서로 존재할 필요는 없지만 동일한 인덱스를 사용해야 합니다. 특성 인덱싱은 순차적이거나 특정 값에서 시작할 필요가 없습니다.

          참고

          topic-name 은 AMQP 항목에 사용됩니다.

    • Kafka 끝점:

      • URL: kafka://USER:PASSWORD@FQDN:PORT.
      • use-ssl 은 기본적으로 false 로 설정됩니다. use-ssltrue 로 설정된 경우 브로커와의 연결에 보안 연결이 사용됩니다.
      • ca-location 이 제공되고 보안 연결이 사용되는 경우 브로커를 인증하는 데 기본 CA 대신 지정된 CA가 사용됩니다.
      • 사용자 및 암호는 HTTP[S]를 통해서만 제공될 수 있습니다. 그러지 않으면 주제 생성 요청이 거부됩니다.
      • 사용자 및 암호는 use-ssl 과 함께만 제공될 수 있습니다. 그러지 않으면 브로커에 대한 연결이 실패합니다.
      • 포트 기본값은: 9092입니다.
      • Kafka-ack-level: 최종 목적지로 전달되기 전에 메시지가 브로커에 유지될 수 있으므로 필요한 승인을 종료하는 끝 없음. 두 가지 승인 방법이 있습니다.

        • none: 브로커로 전송되는 경우 메시지가 전달되는 것으로 간주됩니다.
        • broker: 기본적으로 브로커가 승인한 경우 메시지가 전달되는 것으로 간주됩니다.

다음은 응답 형식의 예입니다.

예제

<CreateTopicResponse xmlns="https://sns.amazonaws.com/doc/2010-03-31/">
    <CreateTopicResult>
        <TopicArn></TopicArn>
    </CreateTopicResult>
    <ResponseMetadata>
        <RequestId></RequestId>
    </ResponseMetadata>
</CreateTopicResponse>
Copy to Clipboard Toggle word wrap

참고

응답의 Amazon Resource Name(ARN) 주제는 arn:aws:sns:ZONE_GROUP:TENANT: 체계를 갖습니다.

다음은 AMQP0.9.1 끝점의 예입니다.

예제

client.create_topic(Name='my-topic' , Attributes={'push-endpoint': 'amqp://127.0.0.1:5672', 'amqp-exchange': 'ex1', 'amqp-ack-level': 'broker'}) "
Copy to Clipboard Toggle word wrap

2.15.4. 주제 정보 가져오기

특정 항목에 대한 정보를 반환합니다. 제공되는 경우 엔드포인트 정보가 포함될 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 루트 수준 액세스.
  • Ceph Object Gateway 설치
  • 사용자 액세스 키 및 시크릿 키.
  • 엔드포인트 매개 변수.

프로세스

  1. 다음 요청 형식으로 주제 정보를 가져옵니다.

    구문

    POST
    Action=GetTopic
    &TopicArn=TOPIC_ARN
    Copy to Clipboard Toggle word wrap

    다음은 응답 형식의 예입니다.

    <GetTopicResponse>
    <GetTopicRersult>
    <Topic>
    <User></User>
    <Name></Name>
    <EndPoint>
    <EndpointAddress></EndpointAddress>
    <EndpointArgs></EndpointArgs>
    <EndpointTopic></EndpointTopic>
    <HasStoredSecret></HasStoredSecret>
    <Persistent></Persistent>
    </EndPoint>
    <TopicArn></TopicArn>
    <OpaqueData></OpaqueData>
    </Topic>
    </GetTopicResult>
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </GetTopicResponse>
    Copy to Clipboard Toggle word wrap

    다음은 태그 및 정의입니다.

    • User: 주제를 만든 사용자의 이름입니다.
    • Name: 주제의 이름입니다.
    • JSON 형식의 끝점은 다음과 같습니다.

      • EndpointAddress: 끝점 URL입니다. 엔드포인트 URL에 사용자 및 암호 정보가 포함된 경우 HTTPS를 통해 요청을 수행해야 합니다. otheriwse, topic get 요청이 거부됩니다.

        • EndPointArgs: 끝점 인수입니다.
        • EndpointTopic: 엔드포인트로 전송되는 주제 이름은 위의 예제 주제 이름과 다를 수 있습니다.
        • HasStoredSecret: 끝점 URL에 사용자 및 암호 정보가 포함된 경우true 입니다.
        • persistent: 주제가 지속되는 경우true 입니다.
    • TopicArn: 주제 ARN.
    • OpaqueData: 주제에 대한 불투명 데이터 집합입니다.

2.15.5. 주제 나열

사용자가 정의한 주제를 나열합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 루트 수준 액세스.
  • Ceph Object Gateway 설치
  • 사용자 액세스 키 및 시크릿 키.
  • 엔드포인트 매개 변수.

프로세스

  1. 다음 요청 형식으로 주제 정보를 나열합니다.

    구문

    POST
    Action=ListTopics
    Copy to Clipboard Toggle word wrap

    다음은 응답 형식의 예입니다.

    <ListTopicdResponse xmlns="https://sns.amazonaws.com/doc/2020-03-31/">
    <ListTopicsRersult>
    <Topics>
    <member>
    <User></User>
    <Name></Name>
    <EndPoint>
    <EndpointAddress></EndpointAddress>
    <EndpointArgs></EndpointArgs>
    <EndpointTopic></EndpointTopic>
    </EndPoint>
    <TopicArn></TopicArn>
    <OpaqueData></OpaqueData>
    </member>
    </Topics>
    </ListTopicsResult>
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </ListTopicsResponse>
    Copy to Clipboard Toggle word wrap
    참고

    엔드포인트 URL에 사용자 및 암호 정보가 포함된 경우 HTTPS를 통해 요청을 수행해야 합니다. 그러지 않으면 주제 목록 요청이 거부됩니다.

2.15.6. 주제 삭제

삭제된 주제를 제거하면 작업이 없으며 오류가 아닙니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 루트 수준 액세스.
  • Ceph Object Gateway 설치
  • 사용자 액세스 키 및 시크릿 키.
  • 엔드포인트 매개 변수.

프로세스

  1. 다음 요청 형식으로 주제를 삭제합니다.

    구문

    POST
    Action=DeleteTopic
    &TopicArn=TOPIC_ARN
    Copy to Clipboard Toggle word wrap

    다음은 응답 형식의 예입니다.

    <DeleteTopicResponse xmlns="https://sns.amazonaws.com/doc/2020-03-31/">
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </DeleteTopicResponse>
    Copy to Clipboard Toggle word wrap

2.15.7. 주제 관리에 명령줄 인터페이스 사용

명령줄 인터페이스를 사용하여 주제를 나열, 가져오기 및 제거할 수 있습니다.

사전 요구 사항

  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

프로세스

  1. 사용자의 모든 주제 목록을 가져오려면 다음을 수행합니다.

    구문

    radosgw-admin topic list --uid=USER_ID
    Copy to Clipboard Toggle word wrap

    예제

    [root@rgw ~]# radosgw-admin topic list --uid=example
    Copy to Clipboard Toggle word wrap

  2. 특정 주제의 구성을 가져오려면 다음을 수행합니다.

    구문

    radosgw-admin topic get --uid=USER_ID --topic=TOPIC_NAME
    Copy to Clipboard Toggle word wrap

    예제

    [root@rgw ~]# radosgw-admin topic get --uid=example --topic=example-topic
    Copy to Clipboard Toggle word wrap

  3. 특정 주제를 제거하려면 다음을 수행합니다.

    구문

    radosgw-admin topic rm --uid=USER_ID --topic=TOPIC_NAME
    Copy to Clipboard Toggle word wrap

    예제

    [root@rgw ~]# radosgw-admin topic rm --uid=example --topic=example-topic
    Copy to Clipboard Toggle word wrap

2.15.8. 알림 구성 관리

명령줄 인터페이스를 사용하여 버킷의 알림 구성을 나열, 가져오기 및 제거할 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • Ceph Object Gateway가 구성되어 있습니다.

프로세스

  • 모든 버킷 알림 구성을 나열합니다.

    구문

    radosgw-admin notification list --bucket=BUCKET_NAME
    Copy to Clipboard Toggle word wrap

    예제

    [root@host04 ~]# radosgw-admin notification list --bucket bkt2
    {
        "notifications": [
            {
                "TopicArn": "arn:aws:sns:default::topic1",
                "Id": "notif1",
                "Events": [
                    "s3:ObjectCreated:*",
                    "s3:ObjectRemoved:*"
                ],
                "Filter": {
                    "S3Key": {},
                    "S3Metadata": {},
                    "S3Tags": {}
                }
            },
            {
                "TopicArn": "arn:aws:sns:default::topic1",
                "Id": "notif2",
                "Events": [
                    "s3:ObjectSynced:*"
                ],
                "Filter": {
                    "S3Key": {},
                    "S3Metadata": {},
                    "S3Tags": {}
                }
            }
        ]
    }
    Copy to Clipboard Toggle word wrap

  • 버킷 알림 구성을 가져옵니다.

    구문

    radosgw-admin notification get --bucket BUCKET_NAME --notification-id NOTIFICATION_ID
    Copy to Clipboard Toggle word wrap

    예제

    [root@host04 ~]# radosgw-admin notification get --bucket bkt2 --notification-id notif2
    {
        "TopicArn": "arn:aws:sns:default::topic1",
        "Id": "notif2",
        "Events": [
            "s3:ObjectSynced:*"
        ],
        "Filter": {
            "S3Key": {},
            "S3Metadata": {},
            "S3Tags": {}
        }
    }
    Copy to Clipboard Toggle word wrap

  • 특정 버킷 알림 구성을 제거합니다.

    구문

    radosgw-admin notification rm --bucket BUCKET_NAME [--notification-id NOTIFICATION_ID]
    Copy to Clipboard Toggle word wrap

    여기에서 NOTIFICATION_ID 는 선택 사항입니다. 지정하지 않으면 명령에서 해당 버킷의 모든 알림 구성을 제거합니다.

    예제

    [root@host04 ~]# radosgw-admin notification rm --bucket bkt2 --notification-id notif1
    Copy to Clipboard Toggle word wrap

2.15.9. 이벤트 레코드

이벤트에는 Ceph Object Gateway에서 수행한 작업에 대한 정보가 들어 있으며 HTTP, HTTPS, Kafka 또는 AMQ0.9.1과 같이 선택한 끝점을 통해 페이로드로 전송됩니다. 이벤트 레코드는 JSON 형식입니다.

다음 ObjectLifecycle:Expiration 이벤트가 지원됩니다.

  • ObjectLifecycle:Expiration:Current
  • ObjectLifecycle:Expiration:NonCurrent
  • ObjectLifecycle:Expiration:DeleteMarker
  • ObjectLifecycle:Expiration:AbortMultipartUpload

예제

{"Records":[
    {
        "eventVersion":"2.1",
        "eventSource":"ceph:s3",
        "awsRegion":"us-east-1",
        "eventTime":"2019-11-22T13:47:35.124724Z",
        "eventName":"ObjectCreated:Put",
        "userIdentity":{
            "principalId":"tester"
        },
        "requestParameters":{
            "sourceIPAddress":""
        },
        "responseElements":{
            "x-amz-request-id":"503a4c37-85eb-47cd-8681-2817e80b4281.5330.903595",
            "x-amz-id-2":"14d2-zone1-zonegroup1"
        },
        "s3":{
            "s3SchemaVersion":"1.0",
            "configurationId":"mynotif1",
            "bucket":{
                "name":"mybucket1",
                "ownerIdentity":{
                    "principalId":"tester"
                },
                "arn":"arn:aws:s3:us-east-1::mybucket1",
                "id":"503a4c37-85eb-47cd-8681-2817e80b4281.5332.38"
            },
            "object":{
                "key":"myimage1.jpg",
                "size":"1024",
                "eTag":"37b51d194a7513e45b56f6524f2d51f2",
                "versionId":"",
                "sequencer": "F7E6D75DC742D108",
                "metadata":[],
                "tags":[]
            }
        },
        "eventId":"",
        "opaqueData":"me@example.com"
    }
]}
Copy to Clipboard Toggle word wrap

다음은 이벤트 레코드 키 및 해당 정의입니다.

  • awsRegion: Zonegroup.
  • eventTime: 이벤트가 트리거된 시기를 나타내는 Timestamp입니다.
  • eventname: 이벤트의 유형입니다. ObjectCreated,ObjectRemoved 또는 ObjectLifecycle:Expiration일 수 있습니다.
  • userIdentity.principalId: 이벤트를 트리거한 사용자의 ID입니다.
  • requestParameters.sourceIPAddress: 이벤트를 트리거한 클라이언트의 IP 주소입니다. 이 필드는 지원되지 않습니다.
  • response Cryostats.x-amz-request-id: 이벤트를 트리거한 요청 ID입니다.
  • response Cryostats.x_amz_id_2: 이벤트가 트리거된 Ceph Object Gateway의 ID입니다. ID 형식은 RGWID-ZONE-ZONEGROUP 입니다.
  • s3.configurationId: 이벤트를 생성한 알림 ID입니다.
  • s3.bucket.name: 버킷의 이름입니다.
  • s3.bucket.ownerIdentity.principalId: 버킷의 소유자입니다.
  • s3.bucket.arn: 버킷의 Amazon 리소스 이름(ARN)입니다.
  • s3.bucket.id: 버킷의 ID입니다.
  • s3.object.key: 오브젝트 키입니다.
  • s3.object.size: 오브젝트의 크기입니다.
  • s3.object.eTag: 오브젝트 etag입니다.
  • s3.object.version: 버전이 지정된 버킷의 오브젝트 버전입니다.
  • s3.object.sequencer: controlPlanetonically increasing identifier of the change per object in the hexadecimal format.
  • s3.object.metadata: x-amz-meta 로 전송된 오브젝트에 설정된 모든 메타데이터입니다.
  • s3.object.tags: 오브젝트에 설정된 모든 태그입니다.
  • s3.eventId: 이벤트의 고유 ID입니다.
  • s3.opaqueData: Opaque 데이터는 주제 구성에 설정되어 주제에서 트리거한 모든 알림에 추가됩니다.

2.15.10. 지원되는 이벤트 유형

지원되는 이벤트 유형은 다음과 같습니다.

  • s3:ObjectCreated:*
  • s3:ObjectCreated:Put
  • s3:ObjectCreated:Post
  • s3:ObjectCreated:Copy
  • s3:ObjectCreated:CompleteMultipartUpload
참고

다중 파트 업로드에서는 프로세스가 종료될 때 ObjectCreated:CompleteMultipartUpload 알림이 전송됩니다.

  • s3:ObjectRemoved:*
  • s3:ObjectRemoved:Delete
  • s3:ObjectRemoved:DeleteMarkerCreated
  • s3:ObjectLifecycle:Expiration:Current
  • s3:ObjectLifecycle:Expiration:NonCurrent
  • s3:ObjectLifecycle:Expiration:DeleteMarker
  • s3:ObjectLifecycle:Expiration:AbortMultipartUpload
  • s3:ObjectLifecycle:Transition:Current
  • s3:ObjectLifecycle:Transition:NonCurrent
  • s3:ObjectSynced:Create

2.15.11. 버킷 정보 가져오기

기존 버킷의 하위 집합에 대한 정보를 가져옵니다. 버킷 없이 uid 가 지정되면 사용자에게 속하는 모든 버킷이 반환됩니다. 버킷 만 지정하면 특정 버킷에 대한 정보가 검색됩니다.

capabilities

`buckets=read`
Copy to Clipboard Toggle word wrap

구문

GET /admin/bucket?format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

bucket
설명
정보를 반환하는 버킷입니다.
유형
문자열
예제
foo_bucket
필수 항목
없음
uid
설명
버킷 정보를 검색할 사용자입니다.
유형
문자열
예제
foo_user
필수 항목
없음
통계
설명
버킷 통계를 반환합니다.
유형
부울
예제
true [False]
필수 항목
없음

응답 엔터티

통계
설명
버킷 정보당.
유형
컨테이너
상위
해당 없음
버킷
설명
하나 이상의 버킷 컨테이너 목록을 포함합니다.
유형
컨테이너
상위
버킷
bucket
설명
단일 버킷 정보를 위한 컨테이너입니다.
유형
컨테이너
상위
버킷
name
설명
버킷의 이름입니다.
유형
문자열
상위
bucket
pool
설명
버킷이 저장된 풀입니다.
유형
문자열
상위
bucket
id
설명
고유한 버킷 ID입니다.
유형
문자열
상위
bucket
마커
설명
내부 버킷 태그.
유형
문자열
상위
bucket
소유자
설명
버킷 소유자의 사용자 ID입니다.
유형
문자열
상위
bucket
usage
설명
스토리지 사용 정보.
유형
컨테이너
상위
bucket
인덱스
설명
버킷 인덱스의 상태.
유형
문자열
상위
bucket

성공하면 요청은 버킷 정보와 함께 버킷의 컨테이너를 반환합니다.

특수 오류 응답

IndexRepairFailed
설명
버킷 인덱스 복구에 실패했습니다.
코드
409 충돌

2.15.12. 버킷 인덱스 확인

기존 버킷의 인덱스를 확인합니다.

참고

Check -objects를 사용한 multipart 오브젝트 회계를 확인하려면 수정 을 True로 설정해야 합니다.

capabilities

buckets=write

구문

GET /admin/bucket?index&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

bucket
설명
정보를 반환하는 버킷입니다.
유형
문자열
예제
foo_bucket
필수 항목
제공됨
check-objects
설명
다중 부분 개체 계산을 확인합니다.
유형
부울
예제
true [False]
필수 항목
없음
fix
설명
또한 확인할 때 버킷 인덱스를 수정합니다.
유형
부울
예제
false [False]
필수 항목
없음

응답 엔터티

인덱스
설명
버킷 인덱스의 상태.
유형
문자열

특수 오류 응답

IndexRepairFailed
설명
버킷 인덱스 복구에 실패했습니다.
코드
409 충돌

2.15.13. 버킷 제거

기존 버킷을 제거합니다.

capabilities

`buckets=write`
Copy to Clipboard Toggle word wrap

구문

DELETE /admin/bucket?format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

bucket
설명
제거할 버킷입니다.
유형
문자열
예제
foo_bucket
필수 항목
제공됨
purge-objects
설명
삭제하기 전에 버킷의 오브젝트를 제거합니다.
유형
부울
예제
true [False]
필수 항목
없음

응답 엔터티

없음.

특수 오류 응답

BucketNotEmpty
설명
비어 있지 않은 버킷을 삭제하려고 했습니다.
코드
409 충돌
ObjectRemovalFailed
설명
개체를 제거할 수 없습니다.
코드
409 충돌

2.15.16. 버킷 또는 오브젝트 정책 가져오기

오브젝트 또는 버킷의 정책을 읽습니다.

capabilities

`buckets=read`
Copy to Clipboard Toggle word wrap

구문

GET /admin/bucket?policy&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

bucket
설명
정책을 읽을 버킷입니다.
유형
문자열
예제
foo_bucket
필수 항목
제공됨
object
설명
정책을 읽을 오브젝트입니다.
유형
문자열
예제
foo.txt
필수 항목
없음

응답 엔터티

policy
설명
액세스 제어 정책.
유형
컨테이너
상위
해당 없음

성공하면 오브젝트 또는 버킷 정책을 반환합니다.

특수 오류 응답

IncompleteBody
설명
버킷 정책 요청 또는 버킷에 버킷이 지정되지 않았으며 오브젝트 정책 요청에 오브젝트가 지정되지 않았습니다.
코드
400 잘못된 요청

2.15.17. 오브젝트 제거

기존 오브젝트를 제거합니다.

참고

소유자를 일시 중지하지 않아도 됩니다.

capabilities

`buckets=write`
Copy to Clipboard Toggle word wrap

구문

DELETE /admin/bucket?object&format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

bucket
설명
제거할 오브젝트가 포함된 버킷입니다.
유형
문자열
예제
foo_bucket
필수 항목
제공됨
object
설명
제거할 오브젝트입니다.
유형
문자열
예제
foo.txt
필수 항목
제공됨

응답 엔터티

없음.

특수 오류 응답

NoSuchObject
설명
지정된 개체가 존재하지 않습니다.
코드
404 not found
ObjectRemovalFailed
설명
개체를 제거할 수 없습니다.
코드
409 충돌

2.15.18. 할당량

관리 Operations API를 사용하면 사용자 및 사용자가 소유한 버킷에 할당량을 설정할 수 있습니다. 쿼터에는 버킷의 최대 오브젝트 수와 최대 스토리지 크기(MB)가 포함됩니다.

할당량을 보려면 사용자에게 users=read 기능이 있어야 합니다. 할당량을 설정, 수정 또는 비활성화하려면 사용자에게 users=write 기능이 있어야 합니다.

할당량의 유효한 매개변수는 다음과 같습니다.

  • 버킷: 버킷 옵션을 사용하면 사용자가 소유한 버킷에 대한 할당량을 지정할 수 있습니다.
  • 최대 오브젝트: max-objects 설정을 사용하면 최대 오브젝트 수를 지정할 수 있습니다. 음수 값은 이 설정을 비활성화합니다.
  • 최대 크기: max-size 옵션을 사용하면 최대 바이트 수에 대한 할당량을 지정할 수 있습니다. 음수 값은 이 설정을 비활성화합니다.
  • 할당량 범위: 할당량 범위 옵션은 할당량 범위를 설정합니다. 옵션은 버킷사용자 입니다.

2.15.19. 사용자 할당량 가져오기

할당량을 얻으려면 사용자에게 읽기 권한이 설정된 사용자 기능이 설정되어 있어야 합니다.

구문

GET /admin/user?quota&uid=UID&quota-type=user
Copy to Clipboard Toggle word wrap

2.15.20. 사용자 할당량 설정

할당량을 설정하려면 사용자에게 쓰기 권한이 있는 사용자 기능이 설정되어 있어야 합니다.

구문

PUT /admin/user?quota&uid=UID&quota-type=user
Copy to Clipboard Toggle word wrap

콘텐츠에는 해당 읽기 작업에서 인코딩된 할당량 설정의 JSON 표현이 포함되어야 합니다.

2.15.21. 버킷 할당량 가져오기

기존 버킷의 하위 집합에 대한 정보를 가져옵니다. 버킷 없이 uid 가 지정되면 사용자에게 속하는 모든 버킷이 반환됩니다. 버킷 만 지정하면 특정 버킷에 대한 정보가 검색됩니다.

capabilities

`buckets=read`
Copy to Clipboard Toggle word wrap

구문

GET /admin/bucket?format=json HTTP/1.1
Host FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

bucket
설명
정보를 반환하는 버킷입니다.
유형
문자열
예제
foo_bucket
필수 항목
없음
uid
설명
버킷 정보를 검색할 사용자입니다.
유형
문자열
예제
foo_user
필수 항목
없음
통계
설명
버킷 통계를 반환합니다.
유형
부울
예제
true [False]
필수 항목
없음

응답 엔터티

통계
설명
버킷 정보당.
유형
컨테이너
상위
해당 없음
버킷
설명
하나 이상의 버킷 컨테이너 목록을 포함합니다.
유형
컨테이너
상위
해당 없음
bucket
설명
단일 버킷 정보를 위한 컨테이너입니다.
유형
컨테이너
상위
버킷
name
설명
버킷의 이름입니다.
유형
문자열
상위
bucket
pool
설명
버킷이 저장된 풀입니다.
유형
문자열
상위
bucket
id
설명
고유한 버킷 ID입니다.
유형
문자열
상위
bucket
마커
설명
내부 버킷 태그.
유형
문자열
상위
bucket
소유자
설명
버킷 소유자의 사용자 ID입니다.
유형
문자열
상위
bucket
usage
설명
스토리지 사용 정보.
유형
컨테이너
상위
bucket
인덱스
설명
버킷 인덱스의 상태.
유형
문자열
상위
bucket

성공하면 요청은 버킷 정보와 함께 버킷의 컨테이너를 반환합니다.

특수 오류 응답

IndexRepairFailed
설명
버킷 인덱스 복구에 실패했습니다.
코드
409 충돌

2.15.22. 버킷 할당량 설정

할당량을 설정하려면 사용자에게 쓰기 권한이 있는 사용자 기능이 설정되어 있어야 합니다.

구문

PUT /admin/user?quota&uid=UID&quota-type=bucket
Copy to Clipboard Toggle word wrap

콘텐츠에는 해당 읽기 작업에서 인코딩된 할당량 설정의 JSON 표현이 포함되어야 합니다.

2.15.23. 사용 정보 가져오기

대역폭 사용 정보 요청.

capabilities

`usage=read`
Copy to Clipboard Toggle word wrap

구문

GET /admin/usage?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
사용자가 정보를 요청하는 사용자입니다.
유형
문자열
필수 항목
제공됨
start
설명
데이터 요청이 시작된 날짜 및 선택적으로 시간입니다. 예를 들면 2012-09-25 16:00:00 입니다.
유형
문자열
필수 항목
없음
end
설명
데이터 요청이 종료되는 날짜 및 선택적으로 시간입니다. 예를 들면 2012-09-25 16:00:00 입니다.
유형
문자열
필수 항목
없음
show-entries
설명
데이터 항목을 반환해야 하는지 여부를 지정합니다.
유형
부울
필수 항목
없음
show-summary
설명
데이터 항목을 반환해야 하는지 여부를 지정합니다.
유형
부울
필수 항목
없음

응답 엔터티

usage
설명
사용 정보를 위한 컨테이너입니다.
유형
컨테이너
항목
설명
사용 항목 정보를 위한 컨테이너입니다.
유형
컨테이너
user
설명
사용자 데이터 정보를 위한 컨테이너입니다.
유형
컨테이너
소유자
설명
버킷을 보유한 사용자의 이름입니다.
유형
문자열
bucket
설명
버킷 이름입니다.
유형
문자열
time
설명
첫 번째 관련 시간 시작으로 반올림되는 데이터가 지정되는 시간 하한입니다.
유형
문자열
epoch
설명
1970년 1 월 1일 이후의 시간(초)입니다.
유형
문자열
카테고리
설명
통계 카테고리를 위한 컨테이너입니다.
유형
컨테이너
항목
설명
통계 항목을 위한 컨테이너입니다.
유형
컨테이너
카테고리
설명
통계가 제공되는 요청 범주의 이름입니다.
유형
문자열
bytes_sent
설명
Ceph Object Gateway에서 보낸 바이트 수입니다.
유형
정수
bytes_received
설명
Ceph Object Gateway에서 수신한 바이트 수입니다.
유형
정수
Ops
설명
작업 수입니다.
유형
정수
successful_ops
설명
성공한 작업 수입니다.
유형
정수
summary
설명
성공한 작업 수입니다.
유형
컨테이너
합계
설명
통계 요약을 위한 컨테이너는 합계로 집계되었습니다.
유형
컨테이너

성공하면 응답에 요청된 정보가 포함됩니다.

2.15.24. 사용 정보 제거

사용 정보를 제거합니다. 날짜를 지정하지 않으면 모든 사용 정보를 제거합니다.

capabilities

`usage=write`
Copy to Clipboard Toggle word wrap

구문

DELETE /admin/usage?format=json HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
Copy to Clipboard Toggle word wrap

요청 매개변수

uid
설명
사용자가 정보를 요청하는 사용자입니다.
유형
문자열
예제
foo_user
필수 항목
제공됨
start
설명
데이터 요청이 시작된 날짜 및 선택적으로 시간입니다. 예를 들면 2012-09-25 16:00:00 입니다.
유형
문자열
예제
2012-09-25 16:00:00
필수 항목
없음
end
설명
데이터 요청이 종료되는 날짜 및 선택적으로 시간입니다. 예를 들면 2012-09-25 16:00:00 입니다.
유형
문자열
예제
2012-09-25 16:00:00
필수 항목
없음
remove-all
설명
다중 사용자 데이터를 제거하기 위해 uid 가 지정되지 않은 경우 필요합니다.
유형
부울
예제
true [False]
필수 항목
없음

2.15.25. 표준 오류 응답

다음 목록에서는 표준 오류 응답 및 해당 설명을 자세히 설명합니다.

AccessDenied
설명
액세스가 거부되었습니다.
코드
403 금지됨
InternalError
설명
내부 서버 오류.
코드
500 내부 서버 오류
NoSuchUser
설명
사용자가 존재하지 않습니다.
코드
404 not found
NoSuchBucket
설명
버킷이 존재하지 않습니다.
코드
404 not found
NoSuchKey
설명
이러한 액세스 키가 없습니다.
코드
404 not found

3장. Ceph Object Gateway 및 S3 API

개발자는 Amazon S3 데이터 액세스 모델과 호환되는 RESTful API(애플리케이션 프로그래밍 인터페이스)를 사용할 수 있습니다. Ceph Object Gateway를 통해 Red Hat Ceph Storage 클러스터에 저장된 버킷과 오브젝트를 관리할 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.

3.1. S3 제한 사항

중요

다음 제한 사항은 주의해서 사용해야 합니다. 하드웨어 선택과 관련된 영향이 있으므로 Red Hat 계정 팀과 항상 이러한 요구 사항을 논의해야 합니다.

  • Amazon S3 사용 시 최대 오브젝트 크기: 개별 Amazon S3 오브젝트는 최소 0B에서 최대 5TB까지의 크기를 지정할 수 있습니다. 단일 PUT 에 업로드할 수 있는 가장 큰 오브젝트는 5GB입니다. 100MB보다 큰 오브젝트의 경우 Multipart Upload 기능을 사용하는 것이 좋습니다.
  • Amazon S3 사용 시 최대 메타데이터 크기: 오브젝트에 적용할 수 있는 사용자 메타데이터의 총 크기에 대해 정의된 제한이 없지만 단일 HTTP 요청은 16,000바이트로 제한됩니다.
  • Red Hat Ceph Storage 클러스터에서 S3 오브젝트 및 메타데이터를 저장하기 위해 생성하는 데이터 오버헤드의 양입니다. 추정은 200-300바이트와 오브젝트 이름의 길이입니다. 버전이 지정된 오브젝트는 버전 수에 비례하여 추가 공간을 사용합니다. 또한 다중 부분 업로드 및 기타 트랜잭션 업데이트 중에 일시적인 오버헤드가 생성되지만 가비지 수집 중에 이러한 오버헤드가 복구됩니다.

추가 리소스

3.2. S3 API를 사용하여 Ceph Object Gateway에 액세스

개발자는 Amazon S3 API 사용을 시작하기 전에 Ceph Object Gateway 및 STS(Secure Token Service)에 대한 액세스를 구성해야 합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 실행 중인 Ceph Object Gateway입니다.
  • RESTful 클라이언트입니다.

3.2.1. S3 인증

Ceph Object Gateway에 대한 요청은 인증 또는 인증되지 않을 수 있습니다. Ceph Object Gateway는 인증되지 않은 요청이 익명 사용자가 보낸 것으로 가정합니다. Ceph Object Gateway는 가능 ACL을 지원합니다.

대부분의 사용 사례에서 클라이언트는 Amazon SDK의 AmazonS3Client for Java 및 Python Boto와 같은 기존 오픈 소스 라이브러리를 사용합니다. 오픈 소스 라이브러리를 사용하면 액세스 키 및 시크릿 키에서 간단히 전달하고 라이브러리가 요청 헤더 및 인증 서명을 빌드합니다. 그러나 요청을 생성하고 서명할 수도 있습니다.

요청을 인증하려면 요청에 액세스 키와 기본 64 인코딩 해시 기반 Message Authentication Code(HMAC)를 Ceph Object Gateway 서버로 전송해야 합니다. Ceph Object Gateway는 S3 호환 인증 방법을 사용합니다.

예제

HTTP/1.1
PUT /buckets/bucket/object.mpeg
Host: cname.domain.com
Date: Mon, 2 Jan 2012 00:01:01 +0000
Content-Encoding: mpeg
Content-Length: 9999999

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

위의 예에서 ACCESS_KEY 를 액세스 키 ID의 값과 콜론(:)으로 바꿉니다. HASH_OF_HEADER_AND_SECRET 을 정식 헤더 문자열의 해시 및 액세스 키 ID에 해당하는 시크릿으로 바꿉니다.

헤더 문자열 및 시크릿의 해시 생성

헤더 문자열 및 시크릿의 해시를 생성하려면 다음을 수행합니다.

  1. 헤더 문자열의 값을 가져옵니다.
  2. 요청 헤더 문자열을 표준 형식으로 정규화합니다.
  3. SHA-1 해시 알고리즘을 사용하여 HMAC를 생성합니다.
  4. hmac 결과를 base-64로 인코딩합니다.

헤더 정규화

헤더를 표준 형식으로 정규화하려면 다음을 수행합니다.

  1. 모든 content- headers를 가져옵니다.
  2. content-type content- md5 를 제외한 모든 content- headers를 제거합니다.
  3. content- 헤더 이름이 소문자인지 확인합니다.
  4. 콘텐츠 헤더를 사전 순으로 정렬합니다.
  5. 날짜 헤더가 있는지 확인하고 지정된 날짜가 offset이 아닌 journalctlT를 사용하는지 확인합니다.
  6. x-amz- 로 시작하는 모든 헤더를 가져옵니다.
  7. x-amz- 헤더가 모두 소문자인지 확인합니다.
  8. x-amz- 헤더를 사전 정렬합니다.
  9. 동일한 필드 이름의 여러 인스턴스를 단일 필드에 결합하고 필드 값을 쉼표로 구분합니다.
  10. 헤더 값의 공백 및 줄 바꿈을 단일 공백으로 교체합니다.
  11. 콜론 전후에 공백을 제거합니다.
  12. 각 헤더 뒤에 새 행을 추가합니다.
  13. 헤더를 요청 헤더에 다시 병합합니다.

HASH_OF_HEADER_AND_SECRET 을 base-64로 인코딩된 HMAC 문자열로 바꿉니다.

추가 리소스

3.2.2. S3 서버 측 암호화

Ceph Object Gateway는 S3 API(애플리케이션 프로그래밍 인터페이스)에 대해 업로드된 오브젝트의 서버 측 암호화를 지원합니다. 서버 측 암호화는 S3 클라이언트가 암호화되지 않은 형식으로 HTTP를 통해 데이터를 전송하고 Ceph Object Gateway는 해당 데이터를 Red Hat Ceph Storage 클러스터에 암호화된 형식으로 저장합니다.

참고

Red Hat은 SLO(Dynamic Large Object) 또는 DLO(Dynamic Large Object)의 S3 개체 암호화를 지원하지 않습니다.

중요

암호화를 사용하려면 클라이언트 요청이 SSL 연결을 통해 요청을 보내야 합니다. Ceph Object Gateway에서 SSL을 사용하지 않는 한 Red Hat은 클라이언트의 S3 암호화를 지원하지 않습니다. 그러나 테스트를 위해 관리자는 ceph config set client.rgw 명령을 사용하여 rgw_crypt_require_ssl 구성 설정을 false 로 설정한 다음 Ceph Object Gateway 인스턴스를 다시 시작하여 테스트 중에 SSL을 비활성화할 수 있습니다.

프로덕션 환경에서는 SSL을 통해 암호화된 요청을 보내지 못할 수 있습니다. 이러한 경우 서버 측 암호화와 함께 HTTP를 사용하여 요청을 보냅니다.

서버 측 암호화를 사용하여 HTTP를 구성하는 방법에 대한 자세한 내용은 아래의 추가 리소스 섹션을 참조하십시오.

암호화 키 관리를 위한 두 가지 옵션이 있습니다.

고객 제공 키

S3 클라이언트는 고객 제공 키를 사용할 때 암호화된 데이터를 읽거나 쓰기 위한 각 요청과 함께 암호화 키를 전달합니다. 이러한 키를 관리하는 것은 고객의 책임이 있습니다. 고객은 각 오브젝트를 암호화하는 데 사용되는 Ceph Object Gateway를 기억할 수 있어야 합니다.

Ceph Object Gateway는 Amazon SSE-C 사양에 따라 S3 API에서 고객 제공 키 동작을 구현합니다.

고객이 키 관리를 처리하고 S3 클라이언트가 키를 Ceph Object Gateway에 전달하므로 Ceph Object Gateway는 이 암호화 모드를 지원하기 위해 특별한 구성이 필요하지 않습니다.

키 관리 서비스

키 관리 서비스를 사용하는 경우 보안 키 관리 서비스는 키를 저장하고 Ceph Object Gateway는 필요에 따라 데이터를 암호화하거나 암호 해독하는 요청을 처리하기 위해 해당 키를 검색합니다.

Ceph Object Gateway는 Amazon SSE-KMS 사양에 따라 S3 API에서 키 관리 서비스 동작을 구현합니다.

중요

현재 테스트된 유일한 키 관리 구현은 HashiCorp Vault 및 OpenStack Barbican입니다. 그러나 OpenStack Barbican은 기술 프리뷰이며 프로덕션 시스템에서 사용할 수 없습니다.

3.2.3. S3 액세스 제어 목록

Ceph Object Gateway는 S3 호환 ACL(액세스 제어 목록) 기능을 지원합니다. ACL은 사용자가 버킷 또는 오브젝트에서 수행할 수 있는 작업을 지정하는 액세스 권한 부여 목록입니다. 각 부여는 버킷에 적용할 때 오브젝트에 적용되는 것과 다른 의미가 있습니다.

Expand
표 3.1. 사용자 작업
권한bucket개체

READ

권한 부여자는 버킷의 오브젝트를 나열할 수 있습니다.

권한 부여자는 오브젝트를 읽을 수 있습니다.

WRITE

부여자는 버킷에 오브젝트를 작성하거나 삭제할 수 있습니다.

해당 없음

READ_ACP

권한 부여자는 버킷 ACL을 읽을 수 있습니다.

권한 부여자는 오브젝트 ACL을 읽을 수 있습니다.

WRITE_ACP

권한 부여자는 버킷 ACL을 작성할 수 있습니다.

권한 부여자는 오브젝트 ACL에 쓸 수 있습니다.

FULL_CONTROL

권한 부여자는 버킷에서 오브젝트에 대한 전체 권한을 갖습니다.

권한 부여자는 오브젝트 ACL을 읽거나 쓸 수 있습니다.

3.2.4. S3를 사용하여 Ceph Object Gateway에 대한 액세스 준비

게이트웨이 서버에 액세스하기 전에 Ceph Object Gateway 노드에서 사전 요구 사항을 따라야 합니다.

사전 요구 사항

  • Ceph Object Gateway 소프트웨어 설치.
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

프로세스

  1. root 로서 방화벽에서 포트 8080 을 엽니다.

    [root@rgw ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
    [root@rgw ~]# firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  2. Object Gateway 구성 및 관리 가이드에서 언급한 대로 게이트웨이에 사용하는 와일드카드를 DNS 서버에 추가합니다.

    로컬 DNS 캐싱을 위해 게이트웨이 노드를 설정할 수도 있습니다. 이렇게 하려면 다음 단계를 실행합니다.

    1. root 로서 dnsmasq 를 설치하고 설정합니다.

      [root@rgw ~]# yum install dnsmasq
      [root@rgw ~]# echo "address=/.FQDN_OF_GATEWAY_NODE/IP_OF_GATEWAY_NODE" | tee --append /etc/dnsmasq.conf
      [root@rgw ~]# systemctl start dnsmasq
      [root@rgw ~]# systemctl enable dnsmasq
      Copy to Clipboard Toggle word wrap

      IP_OF_GATEWAY_NODEFQDN_OF_GATEWAY_NODE 를 게이트웨이 노드의 IP 주소 및 FQDN으로 바꿉니다.

    2. root 로 NetworkManager를 중지합니다.

      [root@rgw ~]# systemctl stop NetworkManager
      [root@rgw ~]# systemctl disable NetworkManager
      Copy to Clipboard Toggle word wrap
    3. root 로 게이트웨이 서버의 IP를 이름 서버로 설정합니다.

      [root@rgw ~]# echo "DNS1=IP_OF_GATEWAY_NODE" | tee --append /etc/sysconfig/network-scripts/ifcfg-eth0
      [root@rgw ~]# echo "IP_OF_GATEWAY_NODE FQDN_OF_GATEWAY_NODE" | tee --append /etc/hosts
      [root@rgw ~]# systemctl restart network
      [root@rgw ~]# systemctl enable network
      [root@rgw ~]# systemctl restart dnsmasq
      Copy to Clipboard Toggle word wrap

      IP_OF_GATEWAY_NODEFQDN_OF_GATEWAY_NODE 를 게이트웨이 노드의 IP 주소 및 FQDN으로 바꿉니다.

    4. 하위 도메인 요청을 확인합니다.

      [user@rgw ~]$ ping mybucket.FQDN_OF_GATEWAY_NODE
      Copy to Clipboard Toggle word wrap

      FQDN_OF_GATEWAY_NODE 를 게이트웨이 노드의 FQDN으로 바꿉니다.

      주의

      로컬 DNS 캐싱을 위해 게이트웨이 서버를 설정하는 것은 테스트 목적으로만 사용됩니다. 이 작업을 수행한 후에는 외부 네트워크에 액세스할 수 없습니다. Red Hat Ceph Storage 클러스터 및 게이트웨이 노드에 적절한 DNS 서버를 사용하는 것이 좋습니다.

  3. Object Gateway 구성 및 관리 가이드에서 언급된 S3 액세스에 대한 radosgw 사용자를 신중하게 생성하고 생성된 access_keysecret_key 를 복사합니다. S3 액세스 및 후속 버킷 관리 작업에 이러한 키가 필요합니다.

3.2.5. Ruby AWS S3를 사용하여 Ceph Object Gateway에 액세스

Ruby 프로그래밍 언어와 함께 S3 액세스를 위해 aws-s3 gem을 사용할 수 있습니다. Ruby AWS::S3 을 사용하여 Ceph Object Gateway 서버에 액세스하는 데 사용되는 노드에서 아래 설명된 단계를 실행합니다.

사전 요구 사항

  • Ceph Object Gateway에 대한 사용자 수준 액세스.
  • Ceph Object Gateway에 액세스하는 노드에 대한 루트 수준 액세스.
  • 인터넷 액세스.

프로세스

  1. ruby 패키지를 설치합니다.

    [root@dev ~]# yum install ruby
    Copy to Clipboard Toggle word wrap
    참고

    위의 명령은 rubyrubygemsruby-libs 와 같은 필수 종속성을 설치합니다. 명령이 모든 종속 항목을 설치하지 않으면 별도로 설치합니다.

  2. aws-s3 Ruby 패키지를 설치합니다.

    [root@dev ~]# gem install aws-s3
    Copy to Clipboard Toggle word wrap
  3. 프로젝트 디렉터리를 생성합니다.

    [user@dev ~]$ mkdir ruby_aws_s3
    [user@dev ~]$ cd ruby_aws_s3
    Copy to Clipboard Toggle word wrap
  4. 연결 파일을 생성합니다.

    [user@dev ~]$ vim conn.rb
    Copy to Clipboard Toggle word wrap
  5. 다음 내용을 conn.rb 파일에 붙여넣습니다.

    구문

    #!/usr/bin/env ruby
    
    require 'aws/s3'
    require 'resolv-replace'
    
    AWS::S3::Base.establish_connection!(
            :server            => 'FQDN_OF_GATEWAY_NODE',
            :port           => '8080',
            :access_key_id     => 'MY_ACCESS_KEY',
            :secret_access_key => 'MY_SECRET_KEY'
    )
    Copy to Clipboard Toggle word wrap

    FQDN_OF_GATEWAY_NODE 를 Ceph Object Gateway 노드의 FQDN으로 바꿉니다. MY_ACCESS_KEYMY_SECRET_KEYRed Hat Ceph Storage Object Gateway 구성 및 관리 가이드에 언급된 대로 radosgw 사용자를 S3 액세스 권한을 생성할 때 생성된 access_key secret_key 로 바꿉니다.

    예제

    #!/usr/bin/env ruby
    
    require 'aws/s3'
    require 'resolv-replace'
    
    AWS::S3::Base.establish_connection!(
            :server            => 'testclient.englab.pnq.redhat.com',
            :port           => '8080',
            :access_key_id     => '98J4R9P22P5CDL65HKP8',
            :secret_access_key => '6C+jcaP0dp0+FZfrRNgyGA9EzRy25pURldwje049'
    )
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  6. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x conn.rb
    Copy to Clipboard Toggle word wrap
  7. 파일을 실행합니다.

    [user@dev ~]$ ./conn.rb | echo $?
    Copy to Clipboard Toggle word wrap

    파일에 값을 올바르게 제공한 경우 명령의 출력은 0 입니다.

  8. 버킷을 생성하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim create_bucket.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Bucket.create('my-new-bucket1')
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  9. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x create_bucket.rb
    Copy to Clipboard Toggle word wrap
  10. 파일을 실행합니다.

    [user@dev ~]$ ./create_bucket.rb
    Copy to Clipboard Toggle word wrap

    명령 출력이 true 이면 버킷 my-new-bucket1 이 성공적으로 생성되었습니다.

  11. 소유 버킷을 나열할 새 파일을 생성합니다.

    [user@dev ~]$ vim list_owned_buckets.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Service.buckets.each do |bucket|
            puts "{bucket.name}\t{bucket.creation_date}"
    end
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  12. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x list_owned_buckets.rb
    Copy to Clipboard Toggle word wrap
  13. 파일을 실행합니다.

    [user@dev ~]$ ./list_owned_buckets.rb
    Copy to Clipboard Toggle word wrap

    출력은 다음과 같아야 합니다.

    my-new-bucket1 2020-01-21 10:33:19 UTC
    Copy to Clipboard Toggle word wrap
  14. 오브젝트를 생성하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim create_object.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::S3Object.store(
            'hello.txt',
            'Hello World!',
            'my-new-bucket1',
            :content_type => 'text/plain'
    )
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  15. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x create_object.rb
    Copy to Clipboard Toggle word wrap
  16. 파일을 실행합니다.

    [user@dev ~]$ ./create_object.rb
    Copy to Clipboard Toggle word wrap

    이렇게 하면 Hello World! 문자열이 포함된 hello.txt 파일이 생성됩니다.

  17. 버킷의 콘텐츠를 나열할 새 파일을 생성합니다.

    [user@dev ~]$ vim list_bucket_content.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    new_bucket = AWS::S3::Bucket.find('my-new-bucket1')
    new_bucket.each do |object|
            puts "{object.key}\t{object.about['content-length']}\t{object.about['last-modified']}"
    end
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  18. 파일을 실행 가능하게 만듭니다.

    [user@dev ~]$ chmod +x list_bucket_content.rb
    Copy to Clipboard Toggle word wrap
  19. 파일을 실행합니다.

    [user@dev ~]$ ./list_bucket_content.rb
    Copy to Clipboard Toggle word wrap

    출력은 다음과 같습니다.

    hello.txt    12    Fri, 22 Jan 2020 15:54:52 GMT
    Copy to Clipboard Toggle word wrap
  20. 빈 버킷을 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim del_empty_bucket.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Bucket.delete('my-new-bucket1')
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  21. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x del_empty_bucket.rb
    Copy to Clipboard Toggle word wrap
  22. 파일을 실행합니다.

    [user@dev ~]$ ./del_empty_bucket.rb | echo $?
    Copy to Clipboard Toggle word wrap

    버킷이 성공적으로 삭제되면 명령에서 출력으로 0 을 반환합니다.

    참고

    create_bucket.rb 파일을 편집하여 빈 버킷을 생성합니다(예: my-new-bucket4,my-new-bucket5 ). 다음으로 빈 버킷을 삭제하기 전에 위에서 언급한 del_empty_bucket.rb 파일을 적절하게 편집합니다.

  23. 비어 있지 않은 버킷을 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim del_non_empty_bucket.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::Bucket.delete('my-new-bucket1', :force => true)
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  24. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x del_non_empty_bucket.rb
    Copy to Clipboard Toggle word wrap
  25. 파일을 실행합니다.

    [user@dev ~]$ ./del_non_empty_bucket.rb | echo $?
    Copy to Clipboard Toggle word wrap

    버킷이 성공적으로 삭제되면 명령에서 출력으로 0 을 반환합니다.

  26. 오브젝트를 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim delete_object.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    AWS::S3::S3Object.delete('hello.txt', 'my-new-bucket1')
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  27. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x delete_object.rb
    Copy to Clipboard Toggle word wrap
  28. 파일을 실행합니다.

    [user@dev ~]$ ./delete_object.rb
    Copy to Clipboard Toggle word wrap

    이렇게 하면 hello.txt 개체가 삭제됩니다.

3.2.6. Ruby AWS SDK를 사용하여 Ceph Object Gateway에 액세스

Ruby 프로그래밍 언어와 함께 S3 액세스를 위해 aws-sdk gem을 사용할 수 있습니다. Ruby AWS::SDK 를 사용하여 Ceph Object Gateway 서버에 액세스하는 데 사용되는 노드에서 아래 설명된 단계를 실행합니다.

사전 요구 사항

  • Ceph Object Gateway에 대한 사용자 수준 액세스.
  • Ceph Object Gateway에 액세스하는 노드에 대한 루트 수준 액세스.
  • 인터넷 액세스.

프로세스

  1. ruby 패키지를 설치합니다.

    [root@dev ~]# yum install ruby
    Copy to Clipboard Toggle word wrap
    참고

    위의 명령은 rubyrubygemsruby-libs 와 같은 필수 종속성을 설치합니다. 명령이 모든 종속 항목을 설치하지 않으면 별도로 설치합니다.

  2. aws-sdk Ruby 패키지를 설치합니다.

    [root@dev ~]# gem install aws-sdk
    Copy to Clipboard Toggle word wrap
  3. 프로젝트 디렉터리를 생성합니다.

    [user@dev ~]$ mkdir ruby_aws_sdk
    [user@dev ~]$ cd ruby_aws_sdk
    Copy to Clipboard Toggle word wrap
  4. 연결 파일을 생성합니다.

    [user@dev ~]$ vim conn.rb
    Copy to Clipboard Toggle word wrap
  5. 다음 내용을 conn.rb 파일에 붙여넣습니다.

    구문

    #!/usr/bin/env ruby
    
    require 'aws-sdk'
    require 'resolv-replace'
    
    Aws.config.update(
            endpoint: 'http://FQDN_OF_GATEWAY_NODE:8080',
            access_key_id: 'MY_ACCESS_KEY',
            secret_access_key: 'MY_SECRET_KEY',
            force_path_style: true,
            region: 'us-east-1'
    )
    Copy to Clipboard Toggle word wrap

    FQDN_OF_GATEWAY_NODE 를 Ceph Object Gateway 노드의 FQDN으로 바꿉니다. MY_ACCESS_KEYMY_SECRET_KEYRed Hat Ceph Storage Object Gateway 구성 및 관리 가이드에 언급된 대로 radosgw 사용자를 S3 액세스 권한을 생성할 때 생성된 access_key secret_key 로 바꿉니다.

    예제

    #!/usr/bin/env ruby
    
    require 'aws-sdk'
    require 'resolv-replace'
    
    Aws.config.update(
            endpoint: 'http://testclient.englab.pnq.redhat.com:8080',
            access_key_id: '98J4R9P22P5CDL65HKP8',
            secret_access_key: '6C+jcaP0dp0+FZfrRNgyGA9EzRy25pURldwje049',
            force_path_style: true,
            region: 'us-east-1'
    )
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  6. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x conn.rb
    Copy to Clipboard Toggle word wrap
  7. 파일을 실행합니다.

    [user@dev ~]$ ./conn.rb | echo $?
    Copy to Clipboard Toggle word wrap

    파일에 값을 올바르게 제공한 경우 명령의 출력은 0 입니다.

  8. 버킷을 생성하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim create_bucket.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    구문

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.create_bucket(bucket: 'my-new-bucket2')
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  9. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x create_bucket.rb
    Copy to Clipboard Toggle word wrap
  10. 파일을 실행합니다.

    [user@dev ~]$ ./create_bucket.rb
    Copy to Clipboard Toggle word wrap

    명령의 출력이 true 이면 my-new-bucket2 버킷이 성공적으로 생성되었습니다.

  11. 소유 버킷을 나열할 새 파일을 생성합니다.

    [user@dev ~]$ vim list_owned_buckets.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.list_buckets.buckets.each do |bucket|
            puts "{bucket.name}\t{bucket.creation_date}"
    end
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  12. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x list_owned_buckets.rb
    Copy to Clipboard Toggle word wrap
  13. 파일을 실행합니다.

    [user@dev ~]$ ./list_owned_buckets.rb
    Copy to Clipboard Toggle word wrap

    출력은 다음과 같아야 합니다.

    my-new-bucket2 2020-01-21 10:33:19 UTC
    Copy to Clipboard Toggle word wrap
  14. 오브젝트를 생성하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim create_object.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.put_object(
            key: 'hello.txt',
            body: 'Hello World!',
            bucket: 'my-new-bucket2',
            content_type: 'text/plain'
    )
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  15. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x create_object.rb
    Copy to Clipboard Toggle word wrap
  16. 파일을 실행합니다.

    [user@dev ~]$ ./create_object.rb
    Copy to Clipboard Toggle word wrap

    이렇게 하면 Hello World! 문자열이 포함된 hello.txt 파일이 생성됩니다.

  17. 버킷의 콘텐츠를 나열할 새 파일을 생성합니다.

    [user@dev ~]$ vim list_bucket_content.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.list_objects(bucket: 'my-new-bucket2').contents.each do |object|
            puts "{object.key}\t{object.size}"
    end
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  18. 파일을 실행 가능하게 만듭니다.

    [user@dev ~]$ chmod +x list_bucket_content.rb
    Copy to Clipboard Toggle word wrap
  19. 파일을 실행합니다.

    [user@dev ~]$ ./list_bucket_content.rb
    Copy to Clipboard Toggle word wrap

    출력은 다음과 같습니다.

    hello.txt    12    Fri, 22 Jan 2020 15:54:52 GMT
    Copy to Clipboard Toggle word wrap
  20. 빈 버킷을 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim del_empty_bucket.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.delete_bucket(bucket: 'my-new-bucket2')
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  21. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x del_empty_bucket.rb
    Copy to Clipboard Toggle word wrap
  22. 파일을 실행합니다.

    [user@dev ~]$ ./del_empty_bucket.rb | echo $?
    Copy to Clipboard Toggle word wrap

    버킷이 성공적으로 삭제되면 명령에서 출력으로 0 을 반환합니다.

    참고

    create_bucket.rb 파일을 편집하여 빈 버킷을 생성합니다(예: my-new-bucket6,my-new-bucket7 ). 다음으로 빈 버킷을 삭제하기 전에 위에서 언급한 del_empty_bucket.rb 파일을 적절하게 편집합니다.

  23. 비어 있지 않은 버킷을 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim del_non_empty_bucket.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    Aws::S3::Bucket.new('my-new-bucket2', client: s3_client).clear!
    s3_client.delete_bucket(bucket: 'my-new-bucket2')
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  24. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x del_non_empty_bucket.rb
    Copy to Clipboard Toggle word wrap
  25. 파일을 실행합니다.

    [user@dev ~]$ ./del_non_empty_bucket.rb | echo $?
    Copy to Clipboard Toggle word wrap

    버킷이 성공적으로 삭제되면 명령에서 출력으로 0 을 반환합니다.

  26. 오브젝트를 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim delete_object.rb
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    #!/usr/bin/env ruby
    
    load 'conn.rb'
    
    s3_client = Aws::S3::Client.new
    s3_client.delete_object(key: 'hello.txt', bucket: 'my-new-bucket2')
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  27. 파일을 실행 가능으로 설정합니다.

    [user@dev ~]$ chmod +x delete_object.rb
    Copy to Clipboard Toggle word wrap
  28. 파일을 실행합니다.

    [user@dev ~]$ ./delete_object.rb
    Copy to Clipboard Toggle word wrap

    이렇게 하면 hello.txt 개체가 삭제됩니다.

3.2.7. PHP를 사용하여 Ceph Object Gateway에 액세스

S3 액세스에 PHP 스크립트를 사용할 수 있습니다. 이 절차에서는 버킷 또는 오브젝트 삭제와 같은 다양한 작업을 수행하는 몇 가지 예제 PHP 스크립트를 제공합니다.

중요

아래 예제는 php v5.4.16aws-sdk v2.8.24 에 대해 테스트합니다.

사전 요구 사항

  • 개발 워크스테이션에 대한 루트 수준 액세스.
  • 인터넷 액세스.

프로세스

  1. php 패키지를 설치합니다.

    [root@dev ~]# yum install php
    Copy to Clipboard Toggle word wrap
  2. PHP용 aws-sdk 의 zip 아카이브를 다운로드 하여 압축을 풉니다.
  3. 프로젝트 디렉터리를 생성합니다.

    [user@dev ~]$ mkdir php_s3
    [user@dev ~]$ cd php_s3
    Copy to Clipboard Toggle word wrap
  4. 추출된 aws 디렉터리를 프로젝트 디렉터리에 복사합니다. 예를 들면 다음과 같습니다.

    [user@dev ~]$ cp -r ~/Downloads/aws/ ~/php_s3/
    Copy to Clipboard Toggle word wrap
  5. 연결 파일을 생성합니다.

    [user@dev ~]$ vim conn.php
    Copy to Clipboard Toggle word wrap
  6. conn.php 파일에 다음 내용을 붙여넣습니다.

    구문

    <?php
    define('AWS_KEY', 'MY_ACCESS_KEY');
    define('AWS_SECRET_KEY', 'MY_SECRET_KEY');
    define('HOST', 'FQDN_OF_GATEWAY_NODE');
    define('PORT', '8080');
    
    // require the AWS SDK for php library
    require '/PATH_TO_AWS/aws-autoloader.php';
    
    use Aws\S3\S3Client;
    
    // Establish connection with host using S3 Client
    client = S3Client::factory(array(
        'base_url' => HOST,
        'port' => PORT,
        'key'      => AWS_KEY,
        'secret'   => AWS_SECRET_KEY
    ));
    ?>
    Copy to Clipboard Toggle word wrap

    FQDN_OF_GATEWAY_NODE 를 게이트웨이 노드의 FQDN으로 바꿉니다. MY_ACCESS_KEYMY_SECRET_KEYRed Hat Ceph Storage Object Gateway 구성 및 관리 가이드에 언급된 대로 S3 액세스를 위해 radosgw 사용자를 생성할 때 생성된 access_key secret_key 로 바꿉니다. PATH_TO_AWSphp 프로젝트 디렉터리에 복사한 추출된 aws 디렉터리의 절대 경로로 바꿉니다.

    파일을 저장하고 편집기를 종료합니다.

  7. 파일을 실행합니다.

    [user@dev ~]$ php -f conn.php | echo $?
    Copy to Clipboard Toggle word wrap

    파일에 값을 올바르게 제공한 경우 명령의 출력은 0 입니다.

  8. 버킷을 생성하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim create_bucket.php
    Copy to Clipboard Toggle word wrap

    다음 내용을 새 파일에 붙여넣습니다.

    구문

    <?php
    
    include 'conn.php';
    
    client->createBucket(array('Bucket' => 'my-new-bucket3'));
    
    ?>
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  9. 파일을 실행합니다.

    [user@dev ~]$ php -f create_bucket.php
    Copy to Clipboard Toggle word wrap
  10. 소유 버킷을 나열할 새 파일을 생성합니다.

    [user@dev ~]$ vim list_owned_buckets.php
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    구문

    <?php
    
    include 'conn.php';
    
    blist = client->listBuckets();
    echo "Buckets belonging to " . blist['Owner']['ID'] . ":\n";
    foreach (blist['Buckets'] as b) {
        echo "{b['Name']}\t{b['CreationDate']}\n";
    }
    
    ?>
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  11. 파일을 실행합니다.

    [user@dev ~]$ php -f list_owned_buckets.php
    Copy to Clipboard Toggle word wrap

    출력은 다음과 유사해야 합니다.

    my-new-bucket3 2020-01-21 10:33:19 UTC
    Copy to Clipboard Toggle word wrap
  12. 먼저 hello.txt 라는 소스 파일을 생성하여 오브젝트를 생성합니다.

    [user@dev ~]$ echo "Hello World!" > hello.txt
    Copy to Clipboard Toggle word wrap
  13. 새 php 파일을 생성합니다.

    [user@dev ~]$ vim create_object.php
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    구문

    <?php
    
    include 'conn.php';
    
    key         = 'hello.txt';
    source_file = './hello.txt';
    acl         = 'private';
    bucket      = 'my-new-bucket3';
    client->upload(bucket, key, fopen(source_file, 'r'), acl);
    
    ?>
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  14. 파일을 실행합니다.

    [user@dev ~]$ php -f create_object.php
    Copy to Clipboard Toggle word wrap

    그러면 버킷 my-new-bucket3hello.txt 오브젝트가 생성됩니다.

  15. 버킷의 콘텐츠를 나열할 새 파일을 생성합니다.

    [user@dev ~]$ vim list_bucket_content.php
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    구문

    <?php
    
    include 'conn.php';
    
    o_iter = client->getIterator('ListObjects', array(
        'Bucket' => 'my-new-bucket3'
    ));
    foreach (o_iter as o) {
        echo "{o['Key']}\t{o['Size']}\t{o['LastModified']}\n";
    }
    ?>
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  16. 파일을 실행합니다.

    [user@dev ~]$ php -f list_bucket_content.php
    Copy to Clipboard Toggle word wrap

    출력은 다음과 유사합니다.

    hello.txt    12    Fri, 22 Jan 2020 15:54:52 GMT
    Copy to Clipboard Toggle word wrap
  17. 빈 버킷을 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim del_empty_bucket.php
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    구문

    <?php
    
    include 'conn.php';
    
    client->deleteBucket(array('Bucket' => 'my-new-bucket3'));
    ?>
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  18. 파일을 실행합니다.

    [user@dev ~]$ php -f del_empty_bucket.php | echo $?
    Copy to Clipboard Toggle word wrap

    버킷이 성공적으로 삭제되면 명령에서 출력으로 0 을 반환합니다.

    참고

    create_bucket.php 파일을 편집하여 빈 버킷을 만듭니다(예: my-new-bucket4,my-new-bucket5 ). 다음으로 빈 버킷을 삭제하기 전에 위에서 언급한 del_empty_bucket.php 파일을 적절하게 편집합니다.

    중요

    비어 있지 않은 버킷 삭제는 현재 PHP 2 및 최신 버전의 aws-sdk 에서 지원되지 않습니다.

  19. 오브젝트를 삭제하기 위한 새 파일을 생성합니다.

    [user@dev ~]$ vim delete_object.php
    Copy to Clipboard Toggle word wrap

    다음 내용을 파일에 붙여넣습니다.

    구문

    <?php
    
    include 'conn.php';
    
    client->deleteObject(array(
        'Bucket' => 'my-new-bucket3',
        'Key'    => 'hello.txt',
    ));
    ?>
    Copy to Clipboard Toggle word wrap

    파일을 저장하고 편집기를 종료합니다.

  20. 파일을 실행합니다.

    [user@dev ~]$ php -f delete_object.php
    Copy to Clipboard Toggle word wrap

    이렇게 하면 hello.txt 개체가 삭제됩니다.

3.2.8. 보안 토큰 서비스

Amazon Web Services의 STS(Secure Token Service)는 사용자를 인증하기 위한 임시 보안 인증 정보 집합을 반환합니다.

Red Hat Ceph Storage Object Gateway는 IAM(Identity and Access Management)을 위한 Amazon STS API(애플리케이션 프로그래밍 인터페이스)의 하위 집합을 지원합니다.

사용자는 STS에 대해 먼저 인증하고 후속 요청에서 사용할 수 있는 수명이 짧은 S3 액세스 키 및 시크릿 키를 받습니다.

Red Hat Ceph Storage는 OIDC 공급자를 구성하여 Single Sign-On과 통합하여 S3 사용자를 인증할 수 있습니다. 이 기능을 사용하면 Object Storage 사용자가 로컬 Ceph Object Gateway 데이터베이스가 아닌 엔터프라이즈 ID 공급자에 대해 인증할 수 있습니다. 예를 들어 SSO가 백엔드의 엔터프라이즈 IDP에 연결된 경우 오브젝트 스토리지 사용자는 엔터프라이즈 자격 증명을 사용하여 Ceph Object Gateway S3 엔드포인트를 인증하고 액세스할 수 있습니다.

IAM 역할 정책 기능과 함께 STS를 사용하면 미세 조정된 권한 부여 정책을 생성하여 데이터에 대한 액세스를 제어할 수 있습니다. 이를 통해 개체 스토리지 데이터에 대한 RBAC(역할 기반 액세스 제어) 또는 ABAC( Attribute-Based Access Control) 권한 부여 모델을 구현할 수 있으므로 데이터에 액세스할 수 있는 사용자를 완전히 제어할 수 있습니다.

STS를 사용하여 워크플로우를 단순화하여 S3 리소스에 액세스 가능

  1. 사용자는 Red Hat Ceph Storage에서 S3 리소스에 액세스하려고 합니다.
  2. 사용자는 SSO 공급자에 대해 인증해야 합니다.
  3. SSO 공급자는 IDP와 결합되고 사용자 인증 정보가 유효한지 확인하고, 사용자가 인증되고 SSO가 사용자에게 토큰을 제공합니다.
  4. SSO에서 제공하는 토큰을 사용하여 사용자는 Ceph Object Gateway STS 엔드포인트에 액세스하여 사용자에게 S3 리소스에 대한 액세스 권한을 제공하는 IAM 역할을 가정하도록 요청합니다.
  5. Red Hat Ceph Storage 게이트웨이는 사용자 토큰을 수신하고 SSO에서 토큰의 유효성을 확인하도록 요청합니다.
  6. SSO가 토큰을 검증하면 사용자가 역할을 가정할 수 있습니다. STS를 통해 사용자는 S3 리소스에 액세스할 수 있는 임시 액세스 및 시크릿 키를 사용합니다.
  7. 사용자가 가정한 IAM 역할에 연결된 정책에 따라 사용자는 S3 리소스 집합에 액세스할 수 있습니다.
  8. 예를 들어 버킷 A에 대해 읽고 버킷 B에 씁니다.
3.2.8.1. Secure Token Service 애플리케이션 프로그래밍 인터페이스

Ceph Object Gateway는 다음과 같은 STS(Secure Token Service) 애플리케이션 프로그래밍 인터페이스(API)를 구현합니다.

AssumeRole

이 API는 계정 간 액세스를 위한 임시 자격 증명 세트를 반환합니다. 이러한 임시 인증 정보를 사용하면 Role과 연결된 권한 정책과 Assume Role API와 연결된 정책 모두 사용할 수 있습니다. RoleArnRoleSessionName 요청 매개변수는 필요하지만 다른 요청 매개변수는 선택 사항입니다.

RoleArn
설명
길이가 20~ 2048자인 Amazon 리소스 이름(ARN)을 가정하는 역할입니다.
유형
문자열
필수 항목
제공됨
RoleSessionName
설명
가정할 역할 세션 이름을 식별합니다. 역할 세션 이름은 다른 주체 또는 다른 이유로 역할을 가정할 때 세션을 고유하게 식별할 수 있습니다. 이 매개변수의 값은 2~64자 길이입니다. =, , .. . , @, - 문자는 허용되지만 공백은 허용되지 않습니다.
유형
문자열
필수 항목
제공됨
정책
설명
인라인 세션에서 사용할 JSON 형식의 IAM(ID 및 액세스 관리 정책)입니다. 이 매개변수의 값은 1~48자 길이입니다.
유형
문자열
필수 항목
없음
DurationSeconds
설명
세션 기간(초)이며 최소 900 초의 최대 값 43200 초입니다. 기본값은 3600 초입니다.
유형
정수
필수 항목
없음
ExternalId
설명
다른 계정에 대한 역할을 가정할 때 사용 가능한 경우 고유한 외부 ID를 제공합니다. 이 매개변수의 값은 2~1224자 길이입니다.
유형
문자열
필수 항목
없음
serialnumber
설명
연결된 MFA(다중 인증) 장치의 사용자 ID 번호입니다. 매개 변수의 값은 9~256자 길이인 하드웨어 장치 또는 가상 장치의 일련 번호일 수 있습니다.
유형
문자열
필수 항목
없음
TokenCode
설명
신뢰 정책에 MFA(다중 인증)가 필요한 경우 MFA(다중 인증) 장치에서 생성된 값입니다. MFA 장치가 필요하며 이 매개변수의 값이 비어 있거나 만료된 경우 AssumeRole 호출에서 "access denied" 오류 메시지를 반환합니다. 이 매개변수의 값은 고정 길이인 6자입니다.
유형
문자열
필수 항목
없음

AssumeRoleWithWebIdentity

이 API는 OpenID Connect 또는 OAuth 2.0 ID 공급자와 같은 애플리케이션에서 인증한 사용자의 임시 인증 정보 세트를 반환합니다. RoleArnRoleSessionName 요청 매개변수는 필요하지만 다른 요청 매개변수는 선택 사항입니다.

RoleArn
설명
길이가 20~ 2048자인 Amazon 리소스 이름(ARN)을 가정하는 역할입니다.
유형
문자열
필수 항목
제공됨
RoleSessionName
설명
가정할 역할 세션 이름을 식별합니다. 역할 세션 이름은 다른 주체 또는 다른 이유로 역할을 가정할 때 세션을 고유하게 식별할 수 있습니다. 이 매개변수의 값은 2~64자 길이입니다. =, , .. . , @, - 문자는 허용되지만 공백은 허용되지 않습니다.
유형
문자열
필수 항목
제공됨
정책
설명
인라인 세션에서 사용할 JSON 형식의 IAM(ID 및 액세스 관리 정책)입니다. 이 매개변수의 값은 1~48자 길이입니다.
유형
문자열
필수 항목
없음
DurationSeconds
설명
세션 기간(초)이며 최소 900 초의 최대 값 43200 초입니다. 기본값은 3600 초입니다.
유형
정수
필수 항목
없음
ProviderId
설명
ID 공급자의 도메인 이름의 정규화된 호스트 구성 요소입니다. 이 매개변수의 값은 OAuth 2.0 액세스 토큰에만 유효하며 길이는 4~ 2048자입니다.
유형
문자열
필수 항목
없음
WebIdentityToken
설명
ID 공급자에서 제공하는 OpenID Connect ID 토큰 또는 OAuth 2.0 액세스 토큰입니다. 이 매개변수의 값은 4~48자 길이입니다.
유형
문자열
필수 항목
없음

추가 리소스

3.2.8.2. 보안 토큰 서비스 구성

rgw_sts_key, rgw_s3_auth_use_sts 옵션을 설정하여 Ceph Object Gateway와 함께 사용할 STS(Secure Token Service)를 구성합니다.

참고

S3 및 STS API는 동일한 네임스페이스에 동일하며 Ceph Object Gateway의 동일한 끝점에서 둘 다 액세스할 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 실행 중인 Ceph Object Gateway입니다.
  • Ceph Manager 노드에 대한 루트 수준 액세스.

프로세스

  1. Ceph Object Gateway 클라이언트에 대해 다음 구성 옵션을 설정합니다.

    구문

    ceph config set RGW_CLIENT_NAME rgw_sts_key STS_KEY
    ceph config set RGW_CLIENT_NAME rgw_s3_auth_use_sts true
    Copy to Clipboard Toggle word wrap

    rgw_sts_key 는 세션 토큰을 암호화하거나 해독하는 데 사용되는 STS 키이며 정확히 16진수 문자입니다.

    중요

    STS 키는 영숫자여야 합니다.

    예제

    [root@mgr ~]# ceph config set client.rgw rgw_sts_key 7f8fd8dd4700mnop
    [root@mgr ~]# ceph config set client.rgw rgw_s3_auth_use_sts true
    Copy to Clipboard Toggle word wrap

  2. 추가된 키를 적용하려면 Ceph Object Gateway를 다시 시작합니다.

    참고

    NAME 열에 있는 ceph orch ps 명령의 출력을 사용하여 SERVICE_TYPE.ID 정보를 가져옵니다.

    1. 스토리지 클러스터의 개별 노드에서 Ceph Object Gateway를 다시 시작하려면 다음을 수행합니다.

      구문

      systemctl restart ceph-CLUSTER_ID@SERVICE_TYPE.ID.service
      Copy to Clipboard Toggle word wrap

      예제

      [root@host01 ~]# systemctl restart ceph-c4b34c6f-8365-11ba-dc31-529020a7702d@rgw.realm.zone.host01.gwasto.service
      Copy to Clipboard Toggle word wrap

    2. 스토리지 클러스터의 모든 노드에서 Ceph Object Gateway를 다시 시작하려면 다음을 수행합니다.

      구문

      ceph orch restart SERVICE_TYPE
      Copy to Clipboard Toggle word wrap

      예제

      [ceph: root@host01 /]# ceph orch restart rgw
      Copy to Clipboard Toggle word wrap

추가 리소스

3.2.8.3. OpenID Connect 공급자의 사용자 생성

Ceph Object Gateway와 OpenID Connect 공급자 간의 신뢰를 설정하려면 사용자 엔티티와 역할 신뢰 정책을 생성합니다.

사전 요구 사항

  • Ceph Object Gateway 노드에 대한 사용자 수준 액세스.
  • 보안 토큰 서비스가 구성되어 있습니다.

프로세스

  1. 새 Ceph 사용자를 생성합니다.

    구문

    radosgw-admin --uid USER_NAME --display-name "DISPLAY_NAME" --access_key USER_NAME --secret SECRET user create
    Copy to Clipboard Toggle word wrap

    예제

    [user@rgw ~]$ radosgw-admin --uid TESTER --display-name "TestUser" --access_key TESTER --secret test123 user create
    Copy to Clipboard Toggle word wrap

  2. Ceph 사용자 기능을 구성합니다.

    구문

    radosgw-admin caps add --uid="USER_NAME" --caps="oidc-provider=*"
    Copy to Clipboard Toggle word wrap

    예제

    [user@rgw ~]$ radosgw-admin caps add --uid="TESTER" --caps="oidc-provider=*"
    Copy to Clipboard Toggle word wrap

  3. STS(Secure Token Service) API를 사용하여 역할 신뢰 정책에 조건을 추가합니다.

    구문

    "{\"Version\":\"2020-01-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Federated\":[\"arn:aws:iam:::oidc-provider/IDP_URL\"]},\"Action\":[\"sts:AssumeRoleWithWebIdentity\"],\"Condition\":{\"StringEquals\":{\"IDP_URL:app_id\":\"AUD_FIELD\"\}\}\}\]\}"
    Copy to Clipboard Toggle word wrap

    중요

    위 구문 예제의 app_id 는 들어오는 토큰의 AUD_FIELD 필드와 일치해야 합니다.

추가 리소스

3.2.8.4. OpenID Connect 공급자의 지문 가져오기

OpenID Connect 공급자의 (IDP) 구성 문서를 가져옵니다.

OIDC 프로토콜 표준을 따르는 모든 SSO는 Ceph Object Gateway에서 작동할 것으로 예상됩니다. Red Hat은 다음 SSO 공급자에서 테스트했습니다.

  • Red Hat Single Sing-on
  • Keycloak

사전 요구 사항

  • opensslcurl 패키지 설치.

프로세스

  1. IDP의 URL에서 구성 문서를 가져옵니다.

    구문

    curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "IDP_URL:8000/CONTEXT/realms/REALM/.well-known/openid-configuration" \
       | jq .
    Copy to Clipboard Toggle word wrap

    예제

    [user@client ~]$ curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "http://www.example.com:8000/auth/realms/quickstart/.well-known/openid-configuration" \
       | jq .
    Copy to Clipboard Toggle word wrap

  2. IDP 인증서를 가져옵니다.

    구문

    curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "IDP_URL/CONTEXT/realms/REALM/protocol/openid-connect/certs" \
         | jq .
    Copy to Clipboard Toggle word wrap

    예제

    [user@client ~]$ curl -k -v \
         -X GET \
         -H "Content-Type: application/x-www-form-urlencoded" \
         "http://www.example.com/auth/realms/quickstart/protocol/openid-connect/certs" \
         | jq .
    Copy to Clipboard Toggle word wrap

    참고

    x5c 인증서는 SSO 공급자에 따라 /certs 경로 또는 /jwks 경로에서 사용할 수 있습니다.

  3. 이전 명령의 "x5c" 응답 결과를 복사하여 certificate.crt 파일에 붙여넣습니다. 시작 시 --BEGIN CERTIFICATE - 및 --END CERTIFICATE- 를 포함합니다.

    예제

    -----BEGIN CERTIFICATE-----
    
    MIIDYjCCAkqgAwIBAgIEEEd2CDANBgkqhkiG9w0BAQsFADBzMQkwBwYDVQQGEwAxCTAHBgNVBAgTADEJMAcGA1UEBxMAMQkwBwYDVQQKEwAxCTAHBgNVBAsTADE6MDgGA1UEAxMxYXV0aHN2Yy1pbmxpbmVtZmEuZGV2LnZlcmlmeS5pYm1jbG91ZHNlY3VyaXR5LmNvbTAeFw0yMTA3MDUxMzU2MzZaFw0zMTA3MDMxMzU2MzZaMHMxCTAHBgNVBAYTADEJMAcGA1UECBMAMQkwBwYDVQQHEwAxCTAHBgNVBAoTADEJMAcGA1UECxMAMTowOAYDVQQDEzFhdXRoc3ZjLWlubGluZW1mYS5kZXYudmVyaWZ5LmlibWNsb3Vkc2VjdXJpdHkuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAphyu3HaAZ14JH/EXetZxtNnerNuqcnfxcmLhBz9SsTlFD59ta+BOVlRnK5SdYEqO3ws2iGEzTvC55rczF+hDVHFZEBJLVLQe8ABmi22RAtG1P0dA/Bq8ReFxpOFVWJUBc31QM+ummW0T4yw44wQJI51LZTMz7PznB0ScpObxKe+frFKd1TCMXPlWOSzmTeFYKzR83Fg9hsnz7Y8SKGxi+RoBbTLT+ektfWpR7O+oWZIf4INe1VYJRxZvn+qWcwI5uMRCtQkiMknc3Rj6Eupiqq6FlAjDs0p//EzsHAlW244jMYnHCGq0UP3oE7vViLJyiOmZw7J3rvs3m9mOQiPLoQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCeVqAzSh7Tp8LgaTIFUuRbdjBAKXC9Nw3+pRBHoiUTdhqO3ualyGih9m/js/clb8Vq/39zl0VPeaslWl2NNX9zaK7xo+ckVIOY3ucCaTC04ZUn1KzZu/7azlN0C5XSWg/CfXgU2P3BeMNzc1UNY1BASGyWn2lEplIVWKLaDZpNdSyyGyaoQAIBdzxeNCyzDfPCa2oSO8WH1czmFiNPqR5kdknHI96CmsQdi+DT4jwzVsYgrLfcHXmiWyIAb883hR3Pobp+Bsw7LUnxebQ5ewccjYmrJzOk5Wb5FpXBhaJH1B3AEd6RGalRUyc/zUKdvEy0nIRMDS9x2BP3NVvZSADD
    
    -----END CERTIFICATE-----
    Copy to Clipboard Toggle word wrap

  4. 인증서 지문을 가져옵니다.

    구문

    openssl x509 -in CERT_FILE -fingerprint -noout
    Copy to Clipboard Toggle word wrap

    예제

    [user@client ~]$ openssl x509 -in certificate.crt -fingerprint -noout
    SHA1 Fingerprint=F7:D7:B3:51:5D:D0:D3:19:DD:21:9A:43:A9:EA:72:7A:D6:06:52:87
    Copy to Clipboard Toggle word wrap

  5. SHA1 지문에서 모든 콜론을 제거하고 이를 IAM 요청에서 IDP 엔티티를 생성하기 위한 입력으로 사용합니다.

추가 리소스

3.2.8.5. OpenID Connect 공급자 등록

OpenID Connect 공급자의 (IDP) 구성 문서를 등록합니다.

사전 요구 사항

  • opensslcurl 패키지 설치.
  • 보안 토큰 서비스가 구성되어 있습니다.
  • OIDC 공급자용으로 생성된 사용자입니다.
  • OIDC의 지문을 가져옵니다.

프로세스

  1. 토큰에서 URL을 추출합니다.

    예제

    [root@host01 ~]# bash check_token_isv.sh | jq .iss
    
    "https://keycloak-sso.apps.ocp.example.com/auth/realms/ceph"
    Copy to Clipboard Toggle word wrap

  2. Ceph Object Gateway에 OIDC 공급자를 등록합니다.

    예제

    [root@host01 ~]# aws --endpoint https://cephproxy1.example.com:8443 iam create-open-id-connect-provider --url https://keycloak-sso.apps.ocp.example.com/auth/realms/ceph --thumbprint-list 00E9CFD697E0B16DD13C86B0FFDC29957E5D24DF
    Copy to Clipboard Toggle word wrap

  3. OIDC 공급자가 Ceph Object Gateway에 추가되었는지 확인합니다.

    예제

    [root@host01 ~]# aws --endpoint https://cephproxy1.example.com:8443 iam
    list-open-id-connect-providers
    
    {
     "OpenIDConnectProviderList": [
     {
     "Arn":
    "arn:aws:iam:::oidc-provider/keycloak-sso.apps.ocp.example.com/auth/realms/ceph"
     }
     ]
    }
    Copy to Clipboard Toggle word wrap

3.2.8.6. IAM 역할 및 정책 생성

IAM 역할 및 정책을 생성합니다.

사전 요구 사항

  • opensslcurl 패키지 설치.
  • 보안 토큰 서비스가 구성되어 있습니다.
  • OIDC 공급자용으로 생성된 사용자입니다.
  • OIDC의 지문을 가져옵니다.
  • Ceph Object Gateway의 OIDC 공급자가 등록되었습니다.

프로세스

  1. JWT 토큰을 검색하고 검증합니다.

    예제

    [root@host01 ~]# curl -k -q -L -X POST
    "https://keycloak-sso.apps.example.com/auth/realms/ceph/protocol/openid-connect/
    token" \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'client_id=ceph' \
    --data-urlencode 'grant_type=password' \
    --data-urlencode 'client_secret=XXXXXXXXXXXXXXXXXXXXXXX' \
    --data-urlencode 'scope=openid' \
    --data-urlencode "username=SSOUSERNAME" \
    --data-urlencode "password=SSOPASSWORD"
    Copy to Clipboard Toggle word wrap

  2. 토큰을 확인합니다.

    예제

    [root@host01 ~]# cat check_token.sh
    USERNAME=$1
    PASSWORD=$2
    KC_CLIENT="ceph"
    KC_CLIENT_SECRET="7sQXqyMSzHIeMcSALoKaljB6sNIBDRjU"
    KC_ACCESS_TOKEN="$(./get_web_token.sh $USERNAME $PASSWORD | jq -r '.access_token')"
    KC_SERVER="https://keycloak-sso.apps.ocp.stg.local"
    KC_CONTEXT="auth"
    KC_REALM="ceph"
    curl -k -s -q \
    -X POST \
    -u "$KC_CLIENT:$KC_CLIENT_SECRET" \
    -d "token=$KC_ACCESS_TOKEN" \
    "$KC_SERVER/$KC_CONTEXT/realms/$KC_REALM/protocol/openid-connect/token/introspect" | jq .
    
    
    [root@host01 ~]# ./check_token.sh s3admin passw0rd | jq .sub
    "ceph"
    Copy to Clipboard Toggle word wrap

    이 예에서 jq 필터는 토큰의 하위 필드에서 사용하며 ceph 로 설정됩니다.

  3. 역할 속성을 사용하여 JSON 파일을 생성합니다. Statement허용 으로 설정하고 ActionAssumeRoleWithWebIdentity 로 설정합니다. sub:ceph 와 조건을 일치하는 JWT 토큰을 사용하여 모든 사용자에게 액세스를 허용합니다.

    예제

    [root@host01 ~]# cat role-rgwadmins.json
    {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": [
             "arn:aws:iam:::oidc-provider/keycloak-sso.apps.example.com/auth/realms/ceph"
           ]
         },
         "Action": [
           "sts:AssumeRoleWithWebIdentity"
         ],
         "Condition": {
           "StringLike": { "keycloak-sso.apps.example.com/auth/realms/ceph:sub":"ceph" }
         }
       }
     ]
    }
    Copy to Clipboard Toggle word wrap

  4. JSON 파일을 사용하여 Ceph Object Gateway 역할을 생성합니다.

    예제

    [root@host01 ~]# radosgw-admin role create --role-name rgwadmins \
    --assume-role-policy-doc=$(jq -rc . /root/role-rgwadmins.json)
    Copy to Clipboard Toggle word wrap

.

3.2.8.7. S3 리소스 액세스

S3 리소스에 액세스하려면 STS 자격 증명을 사용하여 Assume 역할을 확인합니다.

사전 요구 사항

  • opensslcurl 패키지 설치.
  • 보안 토큰 서비스가 구성되어 있습니다.
  • OIDC 공급자용으로 생성된 사용자입니다.
  • OIDC의 지문을 가져옵니다.
  • Ceph Object Gateway의 OIDC 공급자가 등록되었습니다.
  • 생성된 IAM 역할 및 정책

프로세스

  1. 다음은 S3 리소스에 액세스하기 위해 STS를 사용하여 임시 액세스 및 시크릿 키를 가져오는 경우의 예입니다.

    [roo@host01 ~]# cat test-assume-role.sh
    #!/bin/bash
    export AWS_CA_BUNDLE="/etc/pki/ca-trust/source/anchors/cert.pem"
    unset AWS_ACCESS_KEY_ID
    unset AWS_SECRET_ACCESS_KEY
    unset AWS_SESSION_TOKEN
    KC_ACCESS_TOKEN=$(curl -k -q -L -X POST
    "https://keycloak-sso.apps.ocp.example.com/auth/realms/ceph/protocol/openid-connect/
    token" \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'client_id=ceph' \
    --data-urlencode 'grant_type=password' \
    --data-urlencode 'client_secret=XXXXXXXXXXXXXXXXXXXXXXX' \
    --data-urlencode 'scope=openid' \
    --data-urlencode "<varname>SSOUSERNAME</varname>" \
    --data-urlencode "<varname>SSOPASSWORD</varname>" | jq -r .access_token)
    echo ${KC_ACCESS_TOKEN}
    IDM_ASSUME_ROLE_CREDS=$(aws sts assume-role-with-web-identity --role-arn
    "arn:aws:iam:::role/$3" --role-session-name testbr
    --endpoint=https://cephproxy1.example.com:8443
    --web-identity-token="$KC_ACCESS_TOKEN")
    echo "aws sts assume-role-with-web-identity --role-arn "arn:aws:iam:::role/$3"
    --role-session-name testb --endpoint=https://cephproxy1.example.com:8443
    --web-identity-token="$KC_ACCESS_TOKEN""
    echo $IDM_ASSUME_ROLE_CREDS
    export AWS_ACCESS_KEY_ID=$(echo $IDM_ASSUME_ROLE_CREDS | jq -r
    .Credentials.AccessKeyId)
    export AWS_SECRET_ACCESS_KEY=$(echo $IDM_ASSUME_ROLE_CREDS | jq -r
    .Credentials.SecretAccessKey)
    export AWS_SESSION_TOKEN=$(echo $IDM_ASSUME_ROLE_CREDS | jq -r
    .Credentials.SessionToken)
    Copy to Clipboard Toggle word wrap
  2. 스크립트를 실행합니다.

    예제

    [root@host01 ~]# source ./test-assume-role.sh s3admin passw0rd rgwadmins
    [root@host01 ~]# aws s3 mb s3://testbucket
    [root@host01 ~]# aws s3 ls
    Copy to Clipboard Toggle word wrap

3.2.9. Keystone으로 STS Lite 구성 및 사용 (기술 프리뷰)

Amazon STS(Secure Token Service) 및 S3 API는 동일한 네임스페이스에 공존합니다. STS 옵션은 Keystone 옵션과 함께 구성할 수 있습니다.

참고

Ceph Object Gateway에서 동일한 엔드포인트를 사용하여 S3 및 STS API에 모두 액세스할 수 있습니다.

사전 요구 사항

  • Red Hat Ceph Storage 5.0 이상.
  • 실행 중인 Ceph Object Gateway입니다.
  • Boto Python 모듈 버전 3 이상을 설치합니다.
  • Ceph Manager 노드에 대한 루트 수준 액세스.
  • OpenStack 노드에 대한 사용자 수준 액세스.

프로세스

  1. Ceph Object Gateway 클라이언트에 대해 다음 구성 옵션을 설정합니다.

    구문

    ceph config set RGW_CLIENT_NAME rgw_sts_key STS_KEY
    ceph config set RGW_CLIENT_NAME rgw_s3_auth_use_sts true
    Copy to Clipboard Toggle word wrap

    rgw_sts_key 는 세션 토큰을 암호화하거나 해독하는 데 사용되는 STS 키이며 정확히 16진수 문자입니다.

    중요

    STS 키는 영숫자여야 합니다.

    예제

    [root@mgr ~]# ceph config set client.rgw rgw_sts_key 7f8fd8dd4700mnop
    [root@mgr ~]# ceph config set client.rgw rgw_s3_auth_use_sts true
    Copy to Clipboard Toggle word wrap

  2. OpenStack 노드에서 EC2 자격 증명을 생성합니다.

    예제

    [user@osp ~]$ openstack ec2 credentials create
    
    +------------+--------------------------------------------------------+
    | Field      | Value                                                  |
    +------------+--------------------------------------------------------+
    | access     | b924dfc87d454d15896691182fdeb0ef                       |
    | links      | {u'self': u'http://192.168.0.15/identity/v3/users/     |
    |            | 40a7140e424f493d8165abc652dc731c/credentials/          |
    |            | OS-EC2/b924dfc87d454d15896691182fdeb0ef'}              |
    | project_id | c703801dccaf4a0aaa39bec8c481e25a                       |
    | secret     | 6a2142613c504c42a94ba2b82147dc28                       |
    | trust_id   | None                                                   |
    | user_id    | 40a7140e424f493d8165abc652dc731c                       |
    +------------+--------------------------------------------------------+
    Copy to Clipboard Toggle word wrap

  3. 생성된 인증 정보를 사용하여 GetSessionToken API를 사용하여 임시 보안 인증 정보 세트를 가져옵니다.

    예제

    import boto3
    
    access_key = b924dfc87d454d15896691182fdeb0ef
    secret_key = 6a2142613c504c42a94ba2b82147dc28
    
    client = boto3.client('sts',
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    endpoint_url=https://www.example.com/rgw,
    region_name='',
    )
    
    response = client.get_session_token(
        DurationSeconds=43200
    )
    Copy to Clipboard Toggle word wrap

  4. 임시 인증 정보를 얻으려면 S3 호출을 수행하는 데 사용할 수 있습니다.

    예제

    s3client = boto3.client('s3',
      aws_access_key_id = response['Credentials']['AccessKeyId'],
      aws_secret_access_key = response['Credentials']['SecretAccessKey'],
      aws_session_token = response['Credentials']['SessionToken'],
      endpoint_url=https://www.example.com/s3,
      region_name='')
    
    bucket = s3client.create_bucket(Bucket='my-new-shiny-bucket')
    response = s3client.list_buckets()
    for bucket in response["Buckets"]:
      print "{name}\t{created}".format(
        name = bucket['Name'],
        created = bucket['CreationDate'],
      )
    Copy to Clipboard Toggle word wrap

  5. S3Access 역할을 생성하고 정책을 구성합니다.

    1. 관리 CAPS가 있는 사용자를 할당합니다.

      구문

      radosgw-admin caps add --uid="USER" --caps="roles=*"
      Copy to Clipboard Toggle word wrap

      예제

      [root@mgr ~]# radosgw-admin caps add --uid="gwadmin" --caps="roles=*"
      Copy to Clipboard Toggle word wrap

    2. S3Access 역할을 생성합니다.

      구문

      radosgw-admin role create --role-name=ROLE_NAME --path=PATH --assume-role-policy-doc=TRUST_POLICY_DOC
      Copy to Clipboard Toggle word wrap

      예제

      [root@mgr ~]# radosgw-admin role create --role-name=S3Access --path=/application_abc/component_xyz/ --assume-role-policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"AWS\":\[\"arn:aws:iam:::user/TESTER\"\]\},\"Action\":\[\"sts:AssumeRole\"\]\}\]\}
      Copy to Clipboard Toggle word wrap

    3. S3Access 역할에 권한 정책을 연결합니다.

      구문

      radosgw-admin role-policy put --role-name=ROLE_NAME --policy-name=POLICY_NAME --policy-doc=PERMISSION_POLICY_DOC
      Copy to Clipboard Toggle word wrap

      예제

      [root@mgr ~]# radosgw-admin role-policy put --role-name=S3Access --policy-name=Policy --policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Action\":\[\"s3:*\"\],\"Resource\":\"arn:aws:s3:::example_bucket\"\}\]\}
      Copy to Clipboard Toggle word wrap

    4. 이제 다른 사용자가 gwadmin 사용자의 역할을 가정할 수 있습니다. 예를 들어 gwuser 사용자는 gwadmin 사용자의 권한을 가정할 수 있습니다.
    5. 사용자의 access_keysecret_key 값을 기록해 둡니다.

      예제

      [root@mgr ~]# radosgw-admin user info --uid=gwuser | grep -A1 access_key
      Copy to Clipboard Toggle word wrap

  6. AssumeRole API 호출을 사용하여 assuming user의 access_keysecret_key 값을 제공합니다.

    예제

    import boto3
    
    access_key = 11BS02LGFB6AL6H1ADMW
    secret_key = vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY
    
    client = boto3.client('sts',
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    endpoint_url=https://www.example.com/rgw,
    region_name='',
    )
    
    response = client.assume_role(
    RoleArn='arn:aws:iam:::role/application_abc/component_xyz/S3Access',
    RoleSessionName='Bob',
    DurationSeconds=3600
    )
    Copy to Clipboard Toggle word wrap

    중요

    AssumeRole API에는 S3Access 역할이 필요합니다.

추가 리소스

  • Boto Python 모듈 설치에 대한 자세한 내용은 Red Hat Ceph Storage Object Gateway 가이드S3 액세스 테스트 섹션을 참조하십시오.
  • 자세한 내용은 Red Hat Ceph Storage Object Gateway 가이드사용자 생성 섹션을 참조하십시오.

3.2.10. Keystone과 STS Lite 사용의 제한 사항 해결 (기술 프리뷰)

Keystone의 제한 사항은 STS(Secure Token Service) 요청을 지원하지 않는다는 것입니다. 또 다른 제한 사항은 페이로드 해시가 요청에 포함되어 있지 않음입니다. 이 두 가지 제한 사항을 해결하려면 Boto 인증 코드를 수정해야 합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터 버전 5.0 이상.
  • 실행 중인 Ceph Object Gateway입니다.
  • Boto Python 모듈, 버전 3 이상 설치

프로세스

  1. Boto의 auth.py 파일을 열고 편집합니다.

    1. 코드 블록에 다음 4행을 추가합니다.

      class SigV4Auth(BaseSigner):
        """
        Sign a request with Signature V4.
        """
        REQUIRES_REGION = True
      
        def __init__(self, credentials, service_name, region_name):
            self.credentials = credentials
            # We initialize these value here so the unit tests can have
            # valid values.  But these will get overriden in ``add_auth``
            # later for real requests.
            self._region_name = region_name
            if service_name == 'sts': 
      1
      
                self._service_name = 's3' 
      2
      
            else: 
      3
      
                self._service_name = service_name 
      4
      Copy to Clipboard Toggle word wrap
    2. 코드 블록에 다음 두 행을 추가합니다.

      def _modify_request_before_signing(self, request):
              if 'Authorization' in request.headers:
                  del request.headers['Authorization']
              self._set_necessary_date_headers(request)
              if self.credentials.token:
                  if 'X-Amz-Security-Token' in request.headers:
                      del request.headers['X-Amz-Security-Token']
                  request.headers['X-Amz-Security-Token'] = self.credentials.token
      
              if not request.context.get('payload_signing_enabled', True):
                  if 'X-Amz-Content-SHA256' in request.headers:
                      del request.headers['X-Amz-Content-SHA256']
                  request.headers['X-Amz-Content-SHA256'] = UNSIGNED_PAYLOAD 
      1
      
              else: 
      2
      
                  request.headers['X-Amz-Content-SHA256'] = self.payload(request)
      Copy to Clipboard Toggle word wrap

추가 리소스

  • Boto Python 모듈 설치에 대한 자세한 내용은 Red Hat Ceph Storage Object Gateway 가이드S3 액세스 테스트 섹션을 참조하십시오.

3.3. S3 버킷 작업

개발자는 Ceph Object Gateway를 통해 Amazon S3 API(애플리케이션 프로그래밍 인터페이스)를 사용하여 버킷 작업을 수행할 수 있습니다.

다음 표에는 함수의 지원 상태와 함께 버킷에 대한 Amazon S3 기능 작업이 나열되어 있습니다.

Expand
표 3.2. 버킷 작업
기능상태참고

버킷 나열

지원됨

 

버킷 생성

지원됨

다양한 종류의 ACL 세트입니다.

Bucket 웹 사이트

지원됨

 

버킷 웹 사이트 가져오기

지원됨

 

버킷 웹사이트 삭제

지원됨

 

버킷 복제 설정

지원됨

 

버킷 복제 가져오기

지원됨

 

버킷 복제 삭제

지원됨

 

버킷 라이프사이클

부분적으로 지원됨

expiration,NoncurrentVersionExpirationAbortIncompleteMultipartUpload 가 지원됩니다.

버킷 라이프사이클 설정

부분적으로 지원됨

expiration,NoncurrentVersionExpirationAbortIncompleteMultipartUpload 가 지원됩니다.

버킷 라이프사이클 삭제

지원됨

 

버킷 오브젝트 가져오기

지원됨

 

버킷 위치

지원됨

 

버킷 버전 가져오기

지원됨

 

버킷 버전

지원됨

 

버킷 삭제

지원됨

 

버킷 ACL 가져오기

지원됨

다른 set of canned ACL

Bucket ACL 추가

지원됨

다른 set of canned ACL

버킷 cors 가져오기

지원됨

 

Bucket cors를 넣습니다.

지원됨

 

버킷 cors 삭제

지원됨

 

버킷 오브젝트 버전 나열

지원됨

 

헤드 버킷

지원됨

 

버킷 다중 파트 업로드 나열

지원됨

 

버킷 정책

부분적으로 지원됨

 

버킷 요청 결제 받기

지원됨

 

버킷 요청 지불

지원됨

 

멀티 테넌트 버킷 작업

지원됨

 

GET PublicAccessBlock

지원됨

 

PUT PublicAccessBlock

지원됨

 

PublicAccessBlock삭제

지원됨

 

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.

3.3.1. S3 버킷 알림 생성

버킷 수준에서 버킷 알림을 생성합니다. 알림 구성에는 Red Hat Ceph Storage Object Gateway S3 이벤트, ObjectCreated,ObjectRemoved, ObjectLifecycle:Expiration 이 있습니다. 이를 게시하고 버킷 알림을 보내는 대상이어야 합니다. 버킷 알림은 S3 작업입니다.

s3:objectCreate,s3:objectRemoves3:ObjectLifecycle:Expiration 이벤트에 대한 버킷 알림을 생성하려면 PUT을 사용합니다.

예제

client.put_bucket_notification_configuration(
   Bucket=bucket_name,
   NotificationConfiguration={
       'TopicConfigurations': [
           {
               'Id': notification_name,
               'TopicArn': topic_arn,
               'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*', 's3:ObjectLifecycle:Expiration:*']
           }]})
Copy to Clipboard Toggle word wrap

중요

Red Hat은 put,post,multipartUpload 와 같은 ObjectCreate 이벤트를 지원합니다. Red Hat은 object_deletes3_multi_object_delete 와 같은 ObjectRemove 이벤트도 지원합니다.

요청 엔터티

NotificationConfiguration
설명
TopicConfiguration 엔터티 목록입니다.
유형
컨테이너
필수 항목
제공됨
TopicConfiguration
설명
ID,주제 및 이벤트 엔터티 목록입니다.
유형
컨테이너
필수 항목
제공됨
id
설명
알림의 이름입니다.
유형
문자열
필수 항목
제공됨
주제
설명

주제 Amazon 리소스 이름(ARN)

참고

주제를 사전에 생성해야 합니다.

유형
문자열
필수 항목
제공됨
이벤트
설명
지원되는 이벤트 목록입니다. 여러 이벤트 엔터티를 사용할 수 있습니다. 생략하면 모든 이벤트가 처리됩니다.
유형
문자열
필수 항목
없음
filter
설명
S3Key,S3MetadataS3Tags 엔티티.
유형
컨테이너
필수 항목
없음
S3Key
설명
개체 키를 기반으로 필터링하기 위한 FilterRule 엔터티 목록입니다. 대부분의 경우 3개의 엔티티가 목록에 있을 수 있습니다. 예를 들어 Name접두사,접미사 또는 regex 입니다. 필터가 일치하려면 목록의 모든 필터 규칙이 일치해야 합니다.
유형
컨테이너
필수 항목
없음
S3Metadata
설명
오브젝트 메타데이터를 기반으로 필터링을 위한 FilterRule 엔터티 목록입니다. 목록의 모든 필터 규칙은 오브젝트에 정의된 메타데이터와 일치해야 합니다. 그러나 오브젝트에는 필터에 나열되지 않은 다른 메타데이터 항목이 있는 경우에도 여전히 일치합니다.
유형
컨테이너
필수 항목
없음
S3Tags
설명
오브젝트 태그를 기반으로 필터링하기 위한 FilterRule 엔터티 목록입니다. 목록의 모든 필터 규칙은 오브젝트에 정의된 태그와 일치해야 합니다. 그러나 오브젝트에 필터가 나열되지 않은 다른 태그가 있는 경우에도 여전히 일치합니다.
유형
컨테이너
필수 항목
없음
S3Key.FilterRule
설명
이름 엔터티. name은 접두사,접미사 또는 regex 입니다. Value 는 키 접두사, 키 접미사 또는 정규식을 키에 맞게 유지합니다.
유형
컨테이너
필수 항목
제공됨
S3Metadata.FilterRule
설명
이름 엔터티. name은 x-amz-meta-xxx 의 메타데이터 속성 이름입니다. 이 값은 이 속성에 대해 예상되는 값입니다.
유형
컨테이너
필수 항목
제공됨
S3Tags.FilterRule
설명
이름 엔터티. name은 태그 키이며 값은 태그 값입니다.
유형
컨테이너
필수 항목
제공됨

HTTP 응답

400
상태 코드
Malformed XML
설명
XML이 제대로 구성되어 있지 않습니다.
400
상태 코드
InvalidArgument
설명
Id가 없거나 누락되었거나 잘못된 항목 ARN 또는 잘못된 이벤트입니다.
404
상태 코드
NoSuchBucket
설명
버킷이 존재하지 않습니다.
404
상태 코드
NoSuchKey
설명
주제가 존재하지 않습니다.

3.3.2. S3 버킷 알림 가져오기

특정 알림을 받거나 버킷에 구성된 모든 알림을 나열합니다.

구문

Get /BUCKET?notification=NOTIFICATION_ID HTTP/1.1
Host: cname.domain.com
Date: date
Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

예제

Get /testbucket?notification=testnotificationID HTTP/1.1
Host: cname.domain.com
Date: date
Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

응답 예

<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <TopicConfiguration>
        <Id></Id>
        <Topic></Topic>
        <Event></Event>
        <Filter>
            <S3Key>
                <FilterRule>
                    <Name></Name>
                    <Value></Value>
                </FilterRule>
                 </S3Key>
             <S3Metadata>
                 <FilterRule>
                     <Name></Name>
                     <Value></Value>
                 </FilterRule>
             </S3Metadata>
             <S3Tags>
                 <FilterRule>
                     <Name></Name>
                     <Value></Value>
                 </FilterRule>
             </S3Tags>
         </Filter>
    </TopicConfiguration>
</NotificationConfiguration>
Copy to Clipboard Toggle word wrap

참고

notification 하위 리소스는 버킷 알림 구성 또는 빈 NotificationConfiguration 요소를 반환합니다. 호출자는 버킷 소유자여야 합니다.

요청 엔터티

notification-id
설명
알림의 이름입니다. ID를 제공하지 않으면 모든 알림이 나열됩니다.
유형
문자열
NotificationConfiguration
설명
TopicConfiguration 엔터티 목록입니다.
유형
컨테이너
필수 항목
제공됨
TopicConfiguration
설명
ID,주제 및 이벤트 엔터티 목록입니다.
유형
컨테이너
필수 항목
제공됨
id
설명
알림의 이름입니다.
유형
문자열
필수 항목
제공됨
주제
설명

주제 Amazon 리소스 이름(ARN)

참고

주제를 사전에 생성해야 합니다.

유형
문자열
필수 항목
제공됨
이벤트
설명
처리된 이벤트입니다. 여러 이벤트 엔티티가 존재할 수 있습니다.
유형
문자열
필수 항목
제공됨
filter
설명
지정된 구성에 대한 필터입니다.
유형
컨테이너
필수 항목
없음

HTTP 응답

404
상태 코드
NoSuchBucket
설명
버킷이 존재하지 않습니다.
404
상태 코드
NoSuchKey
설명
알림이 제공된 경우 존재하지 않습니다.

3.3.3. S3 버킷 알림 삭제

버킷에서 특정 또는 모든 알림을 삭제합니다.

참고

알림 삭제는 S3 알림 API의 확장입니다. 버킷에 정의된 모든 알림은 버킷을 삭제할 때 삭제됩니다. 예를 들어 이중 삭제와 같은 알 수 없는 알림을 삭제하는 것은 오류로 간주되지 않습니다.

특정 또는 모든 알림을 삭제하려면 DELETE를 사용합니다.

구문

DELETE /BUCKET?notification=NOTIFICATION_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

DELETE /testbucket?notification=testnotificationID HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 엔터티

notification-id
설명
알림의 이름입니다. 알림 ID를 제공하지 않으면 버킷의 모든 알림이 삭제됩니다.
유형
문자열

HTTP 응답

404
상태 코드
NoSuchBucket
설명
버킷이 존재하지 않습니다.

3.3.4. 버킷 호스트 이름에 액세스

버킷에 액세스하는 두 가지 모드가 있습니다. 첫 번째 및 기본 방법은 버킷을 URI에서 최상위 디렉터리로 식별합니다.

예제

GET /mybucket HTTP/1.1
Host: cname.domain.com
Copy to Clipboard Toggle word wrap

두 번째 방법은 가상 버킷 호스트 이름을 통해 버킷을 식별합니다.

예제

GET / HTTP/1.1
Host: mybucket.cname.domain.com
Copy to Clipboard Toggle word wrap

작은 정보

두 번째 방법은 비용이 많이 드는 도메인 인증 및 DNS 와일드카드가 필요하기 때문에 Red Hat은 첫 번째 방법을 선호합니다.

3.3.5. S3 버킷 목록

GET / 는 사용자가 요청하는 버킷 목록을 반환합니다. GET / 는 인증된 사용자가 생성한 버킷만 반환합니다. 익명 요청은 수행할 수 없습니다.

구문

GET / HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

응답 엔터티

버킷
설명
버킷 목록에 대한 컨테이너입니다.
유형
컨테이너
bucket
설명
버킷 정보를 위한 컨테이너입니다.
유형
컨테이너
이름
설명
버킷 이름입니다.
유형
문자열
creationDate
설명
버킷이 생성된 UTC 시간입니다.
유형
날짜
ListAllMyBucketsResult
설명
결과에 대한 컨테이너입니다.
유형
컨테이너
소유자
설명
버킷 소유자 IDDisplayName 의 컨테이너입니다.
유형
컨테이너
ID
설명
버킷 소유자의 ID입니다.
유형
문자열
DisplayName
설명
버킷 소유자의 표시 이름입니다.
유형
문자열

3.3.6. S3 버킷 오브젝트 목록을 반환

버킷 오브젝트 목록을 반환합니다.

구문

GET /BUCKET?max-keys=25 HTTP/1.1
Host: cname.domain.com
Copy to Clipboard Toggle word wrap

매개 변수

prefix
설명
지정된 접두사가 포함된 오브젝트만 반환합니다.
유형
문자열
구분 기호
설명
접두사와 나머지 개체 이름의 구분 기호입니다.
유형
문자열
마커
설명
반환된 오브젝트 목록의 시작 인덱스입니다.
유형
문자열
max-keys
설명
반환할 최대 키 수입니다. 기본값은 1000입니다.
유형
정수

HTTP 응답

200
상태 코드
OK
설명
버킷이 검색되었습니다.

GET /BUCKET 은 다음 필드가 있는 버킷에 대한 컨테이너를 반환합니다.

버킷 응답 엔터티

ListBucketResult
설명
오브젝트 목록에 대한 컨테이너입니다.
유형
엔터티
이름
설명
콘텐츠가 반환될 버킷의 이름입니다.
유형
문자열
접두사
설명
오브젝트 키의 접두사입니다.
유형
문자열
마커
설명
반환된 오브젝트 목록의 시작 인덱스입니다.
유형
문자열
MaxKeys
설명
반환된 최대 키 수입니다.
유형
정수
구분 기호
설명
설정하면 접두사가 동일한 개체가 CommonPrefixes 목록에 표시됩니다.
유형
문자열
IsTruncated
설명
true 인 경우 버킷 콘텐츠의 하위 집합만 반환되었습니다.
유형
부울
CommonPrefixes
설명
여러 오브젝트에 동일한 접두사가 포함된 경우 이 목록에 표시됩니다.
유형
컨테이너

ListBucketResult 에는 각 오브젝트가 Contents 컨테이너 내에 있는 오브젝트가 포함되어 있습니다.

오브젝트 응답 엔터티

내용
설명
오브젝트의 컨테이너입니다.
유형
개체
설명
오브젝트의 키입니다.
유형
문자열
Last Cryostat
설명
개체의 마지막으로 수정된 날짜와 시간입니다.
유형
날짜
etag
설명
오브젝트의 MD-5 해시입니다. etag는 엔터티 태그입니다.
유형
문자열
크기
설명
오브젝트의 크기입니다.
유형
정수
StorageClass
설명
항상 STANDARD 를 반환해야합니다.
유형
문자열

3.3.7. S3 새 버킷 생성

새 버킷을 생성합니다. 버킷을 생성하려면 요청을 인증하기 위해 사용자 ID와 유효한 AWS Access Key ID가 있어야 합니다. 익명 사용자로 버킷을 생성할 수 없습니다.

Constraints

일반적으로 버킷 이름은 도메인 이름 제약 조건을 따라야 합니다.

  • 버킷 이름은 고유해야 합니다.
  • 버킷 이름은 IP 주소로 포맷할 수 없습니다.
  • 버킷 이름은 3자에서 63자 사이일 수 있습니다.
  • 버킷 이름에는 대문자 또는 밑줄을 포함할 수 없습니다.
  • 버킷 이름은 소문자 또는 숫자로 시작해야 합니다.
  • 버킷 이름에는 대시(-)가 포함될 수 있습니다.
  • 버킷 이름은 일련의 레이블이어야 합니다. 인접한 레이블은 마침표(.)로 구분됩니다. 버킷 이름에는 소문자, 숫자, 하이픈이 포함될 수 있습니다. 각 레이블은 소문자 또는 숫자로 시작하고 끝나야 합니다.
참고

rgw_relaxed_s3_bucket_namestrue 로 설정된 경우 위의 제약 조건은 완화됩니다. 버킷 이름은 여전히 고유해야 하며 IP 주소로 포맷할 수 없으며 최대 255자 길이의 문자, 숫자, 마침표, 대시 및 밑줄을 포함할 수 있습니다.

구문

PUT /BUCKET HTTP/1.1
Host: cname.domain.com
x-amz-acl: public-read-write

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

매개 변수

x-amz-acl
설명
ACL을 지정할 수 있습니다.
유효한 값
private, public-read,public-read-write, authenticated-read
필수 항목
없음

HTTP 응답

제약 조건 내에서 버킷 이름이 고유하고 사용되지 않는 경우 작업이 성공적으로 수행됩니다. 동일한 이름의 버킷이 이미 존재하고 사용자가 버킷 소유자인 경우 작업이 성공합니다. 버킷 이름이 이미 사용 중인 경우 작업이 실패합니다.

409
상태 코드
BucketAlreadyExists
설명
버킷은 이미 다른 사용자의 소유권에 있습니다.

3.3.8. S3 버킷 웹 사이트

put 버킷 웹 사이트 API는 website 하위 리소스에 지정된 웹 사이트의 구성을 설정합니다. 버킷을 웹 사이트로 구성하려면 웹 사이트 하위 리소스를 버킷에 추가할 수 있습니다.

참고

put 작업에는 S3:PutBucketWebsite 권한이 필요합니다. 기본적으로 버킷 소유자만 버킷에 연결된 웹 사이트를 구성할 수 있습니다.

구문

PUT /BUCKET?website-configuration=HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

PUT /testbucket?website-configuration=HTTP/1.1
Copy to Clipboard Toggle word wrap

3.3.9. S3 버킷 웹 사이트 가져오기

get 버킷 웹 사이트 API는 website 하위 리소스에 지정된 웹 사이트의 구성을 검색합니다.

참고

가져오기 작업에는 S3:GetBucketWebsite 권한이 필요합니다. 기본적으로 버킷 소유자만 버킷 웹 사이트 구성을 읽을 수 있습니다.

구문

GET /BUCKET?website-configuration=HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

GET /testbucket?website-configuration=HTTP/1.1
Copy to Clipboard Toggle word wrap

3.3.10. S3 버킷 웹 사이트 삭제

버킷 웹 사이트 삭제 API는 버킷에 대한 웹 사이트 구성을 제거합니다.

구문

DELETE /BUCKET?website-configuration=HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

DELETE /testbucket?website-configuration=HTTP/1.1
Copy to Clipboard Toggle word wrap

3.3.11. S3 버킷 복제

put 버킷 복제 API는 버킷에 대한 복제 구성을 구성하거나 기존 구성을 대체합니다.

구문

PUT /BUCKET?replication HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

PUT /testbucket?replication HTTP/1.1
Copy to Clipboard Toggle word wrap

3.3.12. S3 버킷 복제 가져오기

get 버킷 복제 API는 버킷의 복제 구성을 반환합니다.

구문

GET /BUCKET?replication HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

GET /testbucket?replication HTTP/1.1
Copy to Clipboard Toggle word wrap

3.3.13. S3 버킷 복제 삭제

버킷 복제 삭제 API는 버킷에서 복제 구성을 삭제합니다.

구문

DELETE /BUCKET?replication HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

DELETE /testbucket?replication HTTP/1.1
Copy to Clipboard Toggle word wrap

3.3.14. S3 버킷 삭제

버킷을 삭제합니다. 버킷을 성공적으로 제거한 후 버킷 이름을 재사용할 수 있습니다.

구문

DELETE /BUCKET HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

HTTP 응답

204
상태 코드
콘텐츠 없음
설명
버킷이 제거되었습니다.

3.3.15. S3 버킷 라이프사이클

버킷 라이프사이클 구성을 사용하여 오브젝트를 관리하여 수명 동안 효과적으로 저장할 수 있습니다. Ceph Object Gateway의 S3 API는 AWS 버킷 라이프사이클 작업의 하위 집합을 지원합니다.

  • expiration: 버킷 내에 있는 오브젝트의 수명을 정의합니다. 개체가 유지해야 하는 일 수 또는 만료 날짜가 소요되며 Ceph Object Gateway에서 오브젝트를 삭제합니다. 버킷에서 버전 관리를 활성화하지 않으면 Ceph Object Gateway에서 오브젝트를 영구적으로 삭제합니다. 버킷을 사용하면 Ceph Object Gateway에서 현재 버전에 대한 삭제 마커를 생성한 다음 현재 버전을 삭제합니다.
  • NoncurrentVersionExpiration: 버킷 내에서 최신이 아닌 오브젝트 버전의 수명을 정의합니다. 이 기능을 사용하려면 버킷 버전 관리를 활성화해야 합니다. 최신이 아닌 오브젝트가 있어야 하는 일 수가 걸립니다. 이 시점에서 Ceph Object Gateway는 noncurrent 오브젝트를 삭제합니다.
  • NewerNoncurrentVersions: 보유할 유효하지 않은 오브젝트 버전 수를 지정합니다. 유지할 최대 100개의 비최신 버전을 지정할 수 있습니다. 보존할 지정된 수가 100개 이상이면 최신 버전이 아닌 추가 버전이 삭제됩니다.
  • AbortIncompleteMultipartUpload: 이는 불완전한 멀티 파트 업로드가 중단되기 전에 경과해야 하는 일 수를 정의합니다.
  • BlockPublicPolicy reject:이 작업은 공용 액세스 블록입니다. 지정된 정책(액세스 지점 또는 기본 버킷에 대해)에서 공용 액세스를 허용하는 경우 액세스 포인트를 통해 생성된 PUT 액세스 권한과 PUT 버킷 정책을 호출합니다. Amazon S3 Block Public Access 기능은 Red Hat Ceph Storage 5.x/ Ceph Pacific 버전에서 사용할 수 있습니다. Amazon S3 리소스에 대한 공용 액세스를 관리하는 데 도움이 되는 액세스 포인트, 버킷 및 계정에 대한 설정을 제공합니다. 기본적으로 새 버킷, 액세스 포인트 및 오브젝트는 공용 액세스를 허용하지 않습니다. 그러나 버킷 정책, 액세스 포인트 정책 또는 오브젝트 권한을 수정하여 공용 액세스를 허용할 수 있습니다. S3 블록 공용 액세스 설정은 이러한 정책과 권한을 재정의하여 이러한 리소스에 대한 공용 액세스를 제한할 수 있습니다.

라이프사이클 구성에는 < Rule> 요소를 사용하는 하나 이상의 규칙이 포함됩니다.

예제

<LifecycleConfiguration>
    <Rule>
      <Prefix/>
      <Status>Enabled</Status>
      <Expiration>
        <Days>10</Days>
      </Expiration>
    </Rule>
</LifecycleConfiguration>
Copy to Clipboard Toggle word wrap

라이프사이클 규칙은 라이프사이클 규칙에 지정하는 < Filter > 요소에 따라 버킷의 모든 오브젝트 서브 세트에 적용할 수 있습니다. 다음과 같은 여러 가지 방법으로 필터를 지정할 수 있습니다.

  • 키 접두사
  • 오브젝트 태그
  • 키 접두사 및 하나 이상의 오브젝트 태그

키 접두사

키 이름 접두사에 따라 개체의 하위 집합에 라이프사이클 규칙을 적용할 수 있습니다. 예를 들어 < keypre/&gt;를 지정하면 keypre/:으로 시작하는 오브젝트에 적용됩니다.

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Prefix>keypre/</Prefix>
        </Filter>
    </Rule>
</LifecycleConfiguration>
Copy to Clipboard Toggle word wrap

다른 키 접두사가 있는 오브젝트에 다른 라이프사이클 규칙을 적용할 수도 있습니다.

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Prefix>keypre/</Prefix>
        </Filter>
    </Rule>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Prefix>mypre/</Prefix>
        </Filter>
    </Rule>
</LifecycleConfiguration>
Copy to Clipboard Toggle word wrap

오브젝트 태그

< Key > 및 < Value > 요소를 사용하여 특정 태그가 있는 오브젝트에만 라이프사이클 규칙을 적용할 수 있습니다.

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
           <Tag>
              <Key>key</Key>
              <Value>value</Value>
           </Tag>
        </Filter>
    </Rule>
</LifecycleConfiguration>
Copy to Clipboard Toggle word wrap

접두사 및 하나 이상의 태그

라이프사이클 규칙에서는 키 접두사와 하나 이상의 태그를 기반으로 필터를 지정할 수 있습니다. < And> 요소에서 래핑되어야 합니다. 필터는 접두사가 한 개, 0개 이상의 태그만 포함할 수 있습니다.

<LifecycleConfiguration>
    <Rule>
        <Status>Enabled</Status>
        <Filter>
          <And>
             <Prefix>key-prefix</Prefix>
             <Tag>
                <Key>key1</Key>
                <Value>value1</Value>
             </Tag>
             <Tag>
                <Key>key2</Key>
                <Value>value2</Value>
             </Tag>
              ...
          </And>
        </Filter>
    </Rule>
</LifecycleConfiguration>
Copy to Clipboard Toggle word wrap

3.3.16. S3 GET 버킷 라이프사이클

버킷 라이프사이클을 가져오려면 GET 을 사용하고 대상 버킷을 지정합니다.

구문

GET /BUCKET?lifecycle HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

요청 헤더

일반적인 요청 헤더에 대한 자세한 내용은 부록 B 의 S3 공통 요청 헤더를 참조하십시오.

응답

응답에는 버킷 라이프사이클 및 해당 요소가 포함됩니다.

3.3.17. S3 버킷 라이프사이클 생성 또는 교체

버킷 라이프사이클을 생성하거나 교체하려면 PUT 을 사용하고 대상 버킷과 라이프사이클 구성을 지정합니다. Ceph Object Gateway는 S3 라이프사이클 기능의 하위 집합만 지원합니다.

구문

PUT /BUCKET?lifecycle HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
<LifecycleConfiguration>
  <Rule>
    <Expiration>
      <Days>10</Days>
    </Expiration>
  </Rule>
    ...
  <Rule>
  </Rule>
</LifecycleConfiguration>
Copy to Clipboard Toggle word wrap

요청 헤더

content-md5
설명
메시지의 base64로 인코딩된 MD-5 해시
유효한 값
string 기본값이나 제약 조건이 없습니다.
필수 항목
없음

추가 리소스

  • Amazon S3 공통 요청 헤더에 대한 자세한 내용은 Red Hat Ceph Storage 개발자 가이드 의 부록 B의 S3 공통 요청 헤더 섹션을 참조하십시오.
  • Amazon S3 버킷 라이프사이클 에 대한 자세한 내용은 Red Hat Ceph Storage 개발자 가이드 의 S3 버킷 라이프사이클 섹션을 참조하십시오.

3.3.18. S3 버킷 라이프사이클 삭제

버킷 라이프사이클을 삭제하려면 DELETE 를 사용하고 대상 버킷을 지정합니다.

구문

DELETE /BUCKET?lifecycle HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

요청 헤더

요청에는 특수 요소가 포함되어 있지 않습니다.

응답

응답은 공통 응답 상태를 반환합니다.

추가 리소스

  • Amazon S3 공통 요청 헤더에 대한 자세한 내용은 Red Hat Ceph Storage 개발자 가이드 의 부록 B의 S3 공통 요청 헤더 섹션을 참조하십시오.
  • Amazon S3 공통 응답 상태 코드에 대한 자세한 내용은 Red Hat Ceph Storage 개발자 가이드 의 부록 C에서 S3 공통 응답 상태 코드 섹션을 참조하십시오.

3.3.19. S3 버킷 위치 가져오기

버킷의 영역 그룹을 검색합니다. 이를 호출하려면 사용자가 버킷 소유자여야 합니다. PUT 요청 중에 LocationConstraint 를 제공하여 버킷을 영역 그룹으로 제한할 수 있습니다.

다음과 같이 location 하위 리소스를 버킷 리소스에 추가합니다.

구문

GET /BUCKET?location HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

응답 엔터티

LocationConstraint
설명
버킷이 있는 영역 그룹(기본 영역 그룹의 빈 문자열)입니다.
유형
문자열

3.3.20. S3 버킷 버전 관리

버킷의 버전 상태를 검색합니다. 이를 호출하려면 사용자가 버킷 소유자여야 합니다.

다음과 같이 버전 관리 하위 리소스를 버킷 리소스에 추가합니다.

구문

GET /BUCKET?versioning HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

3.3.21. S3 버킷 버전 관리

이 하위 리소스는 기존 버킷의 버전 상태를 설정합니다. 버전 관리 상태를 설정하려면 사용자가 버킷 소유자여야 합니다. 버킷에 버전 관리 상태가 설정되지 않은 경우 버전 관리 상태가 없습니다. GET 버전 관리 요청을 수행해도 버전 관리 상태 값은 반환되지 않습니다.

버킷 버전 관리 상태 설정:

enabled: 버킷의 오브젝트에 대한 버전 관리를 활성화합니다. 버킷에 추가된 모든 오브젝트에는 고유한 버전 ID가 수신됩니다. 일시 중단됨: 버킷의 오브젝트에 대한 버전 관리를 비활성화합니다. 버킷에 추가된 모든 오브젝트에는 버전 ID null이 수신됩니다.

구문

PUT /BUCKET?versioning HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

PUT /testbucket?versioning HTTP/1.1
Copy to Clipboard Toggle word wrap

버킷 요청 엔터티

VersioningConfiguration
설명
요청에 대한 컨테이너입니다.
유형
컨테이너
상태
설명
버킷의 버전 상태를 설정합니다. 유효한 값: 일시 중지/활성화됨
유형
문자열

3.3.22. S3 버킷 액세스 제어 목록 가져오기

버킷 액세스 제어 목록을 검색합니다. 사용자는 버킷 소유자이거나 버킷에 READ_ACP 권한이 부여되어야 합니다.

다음과 같이 acl 하위 리소스를 버킷 요청에 추가합니다.

구문

GET /BUCKET?acl HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

응답 엔터티

AccessControlPolicy
설명
응답을 위한 컨테이너입니다.
유형
컨테이너
AccessControlList
설명
ACL 정보에 대한 컨테이너입니다.
유형
컨테이너
소유자
설명
버킷 소유자 IDDisplayName 의 컨테이너입니다.
유형
컨테이너
ID
설명
버킷 소유자의 ID입니다.
유형
문자열
DisplayName
설명
버킷 소유자의 표시 이름입니다.
유형
문자열
부여
설명
GranteePermission 에 대한 컨테이너입니다.
유형
컨테이너
부여자
설명
권한 부여를 수신하는 사용자의 DisplayNameID 에 대한 컨테이너입니다.
유형
컨테이너
권한
설명
Grantee 버킷에 부여된 권한입니다.
유형
문자열

3.3.23. S3 버킷 액세스 제어 목록 추가

액세스 제어를 기존 버킷으로 설정합니다. 사용자는 버킷 소유자이거나 버킷에 대한 WRITE_ACP 권한이 부여되어야 합니다.

다음과 같이 acl 하위 리소스를 버킷 요청에 추가합니다.

구문

PUT /BUCKET?acl HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 엔터티

S3 다중 파트 업로드 목록

AccessControlList
설명
ACL 정보에 대한 컨테이너입니다.
유형
컨테이너
소유자
설명
버킷 소유자 IDDisplayName 의 컨테이너입니다.
유형
컨테이너
ID
설명
버킷 소유자의 ID입니다.
유형
문자열
DisplayName
설명
버킷 소유자의 표시 이름입니다.
유형
문자열
부여
설명
GranteePermission 에 대한 컨테이너입니다.
유형
컨테이너
부여자
설명
권한 부여를 수신하는 사용자의 DisplayNameID 에 대한 컨테이너입니다.
유형
컨테이너
권한
설명
Grantee 버킷에 부여된 권한입니다.
유형
문자열

3.3.24. S3 버킷 캐시 가져오기

버킷에 대한 cors 구성 정보를 검색합니다. 사용자는 버킷 소유자이거나 버킷에 READ_ACP 권한이 부여되어야 합니다.

아래에 표시된 대로 cors 하위 리소스를 버킷 요청에 추가합니다.

구문

GET /BUCKET?cors HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

3.3.25. S3 bucket cors 설치

버킷의 cors 구성을 설정합니다. 사용자는 버킷 소유자이거나 버킷에 READ_ACP 권한이 부여되어야 합니다.

아래에 표시된 대로 cors 하위 리소스를 버킷 요청에 추가합니다.

구문

PUT /BUCKET?cors HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

3.3.26. S3 버킷 캐시 삭제

버킷에 설정된 cors 구성 정보를 삭제합니다. 사용자는 버킷 소유자이거나 버킷에 READ_ACP 권한이 부여되어야 합니다.

아래에 표시된 대로 cors 하위 리소스를 버킷 요청에 추가합니다.

구문

DELETE /BUCKET?cors HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

3.3.27. S3 버킷 오브젝트 버전 나열

버킷 내의 모든 오브젝트 버전에 대한 메타데이터 목록을 반환합니다. 버킷에 대한 READ 액세스 권한이 필요합니다.

다음과 같이 버전 하위 리소스를 버킷 요청에 추가합니다.

구문

GET /BUCKET?versions HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

GET /BUCKET?versions 에 대한 매개변수를 지정할 수 있지만 필요한 것은 아닙니다.

매개 변수

prefix
설명
지정된 접두사가 포함된 키를 사용하여 진행 중인 업로드를 반환합니다.
유형
문자열
구분 기호
설명
접두사와 나머지 개체 이름의 구분 기호입니다.
유형
문자열
key-marker
설명
업로드 목록에 대한 시작 마커입니다.
유형
문자열
max-keys
설명
진행 중인 최대 업로드 수입니다. 기본값은 1000입니다.
유형
정수
version-id-marker
설명
목록을 시작할 오브젝트 버전을 지정합니다.
유형
문자열

응답 엔터티

KeyMarker
설명
key-marker 요청 매개변수(있는 경우)로 지정된 키 마커입니다.
유형
문자열
NextKeyMarker
설명
IsTruncatedtrue 인 경우 후속 요청에 사용할 주요 마커입니다.
유형
문자열
NextUploadIdMarker
설명
IsTruncatedtrue 인 경우 후속 요청에 사용할 업로드 ID 마커입니다.
유형
문자열
IsTruncated
설명
true 인 경우 버킷의 업로드 콘텐츠 서브 세트만 반환되었습니다.
유형
부울
크기
설명
업로드된 부분의 크기입니다.
유형
정수
DisplayName
설명
소유자의 표시 이름입니다.
유형
문자열
ID
설명
소유자의 ID입니다.
유형
문자열
소유자
설명
오브젝트를 소유한 사용자의 IDDisplayName 에 대한 컨테이너입니다.
유형
컨테이너
StorageClass
설명
결과 오브젝트를 저장하는 데 사용되는 메서드입니다. STANDARD 또는 REDUCED_REDUNDANCY
유형
문자열
버전
설명
버전 정보의 컨테이너입니다.
유형
컨테이너
versionId
설명
오브젝트의 버전 ID입니다.
유형
문자열
versionIdMarker
설명
잘린 응답의 키의 마지막 버전입니다.
유형
문자열

3.3.28. S3 헤드 버킷

버킷에서 HEAD를 호출하여 존재하는지 여부와 호출자에 액세스 권한이 있는지 확인합니다. 버킷이 존재하고 호출자에 권한이 있는 경우 200 OK 를 반환합니다. 버킷이 존재하지 않는 경우 404 Not Found; 및, 버킷이 존재하지만 호출자에 액세스 권한이 없는 경우 403 Forbidden 을 반환합니다.

구문

HEAD /BUCKET HTTP/1.1
Host: cname.domain.com
Date: date
Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

3.3.29. S3 다중 파트 업로드 목록

GET /?uploads 는 현재 진행 중인 멀티 파트 업로드, 즉 애플리케이션이 다중 파트 업로드를 시작하지만 서비스는 아직 모든 업로드를 완료하지 않은 목록을 반환합니다.

구문

GET /BUCKET?uploads HTTP/1.1
Copy to Clipboard Toggle word wrap

GET /BUCKET?uploads 에 대한 매개변수를 지정할 수 있지만 이 매개변수는 필요하지 않습니다.

매개 변수

prefix
설명
지정된 접두사가 포함된 키를 사용하여 진행 중인 업로드를 반환합니다.
유형
문자열
구분 기호
설명
접두사와 나머지 개체 이름의 구분 기호입니다.
유형
문자열
key-marker
설명
업로드 목록에 대한 시작 마커입니다.
유형
문자열
max-keys
설명
진행 중인 최대 업로드 수입니다. 기본값은 1000입니다.
유형
정수
max-uploads
설명
다중 파트 업로드의 최대 수입니다. 범위는 1-1000입니다. 기본값은 1000입니다.
유형
정수
version-id-marker
설명
key-marker 가 지정되지 않은 경우 무시됩니다. ID 에 따라 사전순으로 나열할 첫 번째 업로드의 ID 를 지정합니다.
유형
문자열

응답 엔터티

ListMultipartUploadsResult
설명
결과를 위한 컨테이너입니다.
유형
컨테이너
ListMultipartUploadsResult.Prefix
설명
접두사 request 매개변수(있는 경우)로 지정된 접두사 입니다.
유형
문자열
bucket
설명
버킷 콘텐츠를 수신할 버킷입니다.
유형
문자열
KeyMarker
설명
key-marker 요청 매개변수(있는 경우)로 지정된 키 마커입니다.
유형
문자열
UploadIdMarker
설명
upload-id-marker 요청 매개변수(있는 경우)로 지정된 마커입니다.
유형
문자열
NextKeyMarker
설명
IsTruncatedtrue 인 경우 후속 요청에 사용할 주요 마커입니다.
유형
문자열
NextUploadIdMarker
설명
IsTruncatedtrue 인 경우 후속 요청에 사용할 업로드 ID 마커입니다.
유형
문자열
MaxUploads
설명
max-uploads 요청 매개변수로 지정된 최대 업로드입니다.
유형
정수
구분 기호
설명
설정하면 접두사가 동일한 개체가 CommonPrefixes 목록에 표시됩니다.
유형
문자열
IsTruncated
설명
true 인 경우 버킷의 업로드 콘텐츠 서브 세트만 반환되었습니다.
유형
부울
업로드
설명
,UploadId,InitiatorOwner,StorageClassInitiated 요소를 위한 컨테이너입니다.
유형
컨테이너
설명
다중 파트 업로드가 완료되면 오브젝트의 키입니다.
유형
문자열
UploadId
설명
다중 파트 업로드를 식별하는 ID 입니다.
유형
문자열
이니시에이터
설명
업로드를 시작한 사용자의 IDDisplayName 을 포함합니다.
유형
컨테이너
DisplayName
설명
이니시에이터의 표시 이름입니다.
유형
문자열
ID
설명
이니시에이터의 ID입니다.
유형
문자열
소유자
설명
업로드된 오브젝트를 소유한 사용자의 IDDisplayName 에 대한 컨테이너입니다.
유형
컨테이너
StorageClass
설명
결과 오브젝트를 저장하는 데 사용되는 메서드입니다. STANDARD 또는 REDUCED_REDUNDANCY
유형
문자열
시작됨
설명
사용자가 업로드를 시작한 날짜 및 시간입니다.
유형
날짜
CommonPrefixes
설명
여러 오브젝트에 동일한 접두사가 포함된 경우 이 목록에 표시됩니다.
유형
컨테이너
CommonPrefixes.Prefix
설명
prefix request 매개 변수에 정의된 접두사 뒤에 있는 키의 하위 문자열입니다.
유형
문자열

3.3.30. S3 버킷 정책

Ceph Object Gateway는 버킷에 적용된 Amazon S3 정책 언어의 하위 집합을 지원합니다.

생성 및 제거

Ceph Object Gateway는 radosgw-admin CLI 툴을 사용하는 대신 표준 S3 작업을 통해 S3 버킷 정책을 관리합니다.

관리자는 s3cmd 명령을 사용하여 정책을 설정하거나 삭제할 수 있습니다.

예제

$ cat > examplepol
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": ["arn:aws:iam::usfolks:user/fred"]},
    "Action": "s3:PutObjectAcl",
    "Resource": [
      "arn:aws:s3:::happybucket/*"
    ]
  }]
}

$ s3cmd setpolicy examplepol s3://happybucket
$ s3cmd delpolicy s3://happybucket
Copy to Clipboard Toggle word wrap

제한

Ceph Object Gateway는 다음 S3 작업만 지원합니다.

  • s3:AbortMultipartUpload
  • s3:CreateBucket
  • s3:DeleteBucketPolicy
  • s3:DeleteBucket
  • s3:DeleteBucketWebsite
  • s3:DeleteBucketReplication
  • s3:DeleteReplicationConfiguration
  • s3:DeleteObject
  • s3:DeleteObjectVersion
  • s3:GetBucketAcl
  • s3:GetBucketCORS
  • s3:GetBucketLocation
  • s3:GetBucketPolicy
  • s3:GetBucketRequestPayment
  • s3:GetBucketVersioning
  • s3:GetBucketWebsite
  • s3:GetBucketReplication
  • s3:GetReplicationConfiguration
  • s3:GetLifecycleConfiguration
  • s3:GetObjectAcl
  • s3:GetObject
  • s3:GetObjectTorrent
  • s3:GetObjectVersionAcl
  • s3:GetObjectVersion
  • s3:GetObjectVersionTorrent
  • s3:ListAllMyBuckets
  • s3:ListBucketMultiPartUploads
  • s3:ListBucket
  • s3:ListBucketVersions
  • s3:ListMultipartUploadParts
  • s3:PutBucketAcl
  • s3:PutBucketCORS
  • s3:PutBucketPolicy
  • s3:PutBucketRequestPayment
  • s3:PutBucketVersioning
  • s3:PutBucketWebsite
  • s3:PutBucketReplication
  • s3:PutReplicationConfiguration
  • s3:PutLifecycleConfiguration
  • s3:PutObjectAcl
  • s3:PutObject
  • s3:PutObjectVersionAcl
참고

Ceph Object Gateway는 사용자, 그룹 또는 역할에 대한 정책 설정을 지원하지 않습니다.

Ceph Object Gateway는 Amazon three-digit 계정 ID 대신 RGW 테넌트 ID를 사용합니다. AWS(Amazon Web Service) S3과 Ceph Object Gateway S3 간에 정책을 사용하려는 Ceph Object Gateway 관리자는 사용자를 생성할 때 Amazon 계정 ID를 테넌트 ID로 사용해야 합니다.

AWS S3를 사용하면 모든 테넌트가 단일 네임스페이스를 공유합니다. 반면 Ceph Object Gateway는 모든 테넌트에 버킷의 자체 네임스페이스를 제공합니다. 현재 다른 테넌트에 속하는 버킷에 액세스하려는 Ceph Object Gateway 클라이언트는 S3 요청에서 테넌트:bucket 으로 처리해야 합니다.

AWS에서 버킷 정책은 다른 계정에 대한 액세스 권한을 부여할 수 있으며 해당 계정 소유자는 사용자 권한이 있는 개별 사용자에게 액세스 권한을 부여할 수 있습니다. Ceph Object Gateway는 아직 사용자, 역할 및 그룹 권한을 지원하지 않으므로 계정 소유자가 개별 사용자에게 직접 액세스 권한을 부여해야 합니다.

중요

버킷에 대한 전체 계정 액세스 권한을 부여하면 해당 계정의 모든 사용자에게 액세스 권한이 부여됩니다.

버킷 정책은 문자열 보간을 지원하지 않습니다.

Ceph Object Gateway는 다음 조건 키를 지원합니다.

  • aws:CurrentTime
  • aws:EpochTime
  • aws:PrincipalType
  • aws:Referer
  • aws:SecureTransport
  • aws:SourceIp
  • aws:UserAgent
  • aws:username

Ceph Object Gateway ListBucket 작업에 대해 다음 조건 키만 지원합니다.

  • s3:prefix
  • s3:delimiter
  • s3:max-keys

Swift에 미치는 영향

Ceph Object Gateway는 Swift API에서 버킷 정책을 설정하는 기능을 제공하지 않습니다. 그러나 S3 API로 설정된 버킷 정책은 Swift 및 S3 작업을 제어합니다.

Ceph Object Gateway는 정책에 지정된 보안 주체와 Swift 자격 증명과 일치합니다.

3.3.31. S3 버킷에 요청 결제 구성 가져오기

requestPayment 하위 리소스를 사용하여 버킷의 요청 결제 구성을 반환합니다. 사용자는 버킷 소유자이거나 버킷에 READ_ACP 권한이 부여되어야 합니다.

다음과 같이 requestPayment 하위 리소스를 버킷 요청에 추가합니다.

구문

GET /BUCKET?requestPayment HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

3.3.32. S3 버킷에 요청 결제 구성 설정

requestPayment 하위 리소스를 사용하여 버킷의 요청 결제 구성을 설정합니다. 기본적으로 버킷 소유자는 버킷에서 다운로드 비용을 지불합니다. 이 구성 매개변수를 사용하면 버킷 소유자가 다운로드를 요청하는 사람이 요청 및 버킷에서 데이터 다운로드에 대해 청구되도록 지정할 수 있습니다.

다음과 같이 requestPayment 하위 리소스를 버킷 요청에 추가합니다.

구문

PUT /BUCKET?requestPayment HTTP/1.1
Host: cname.domain.com
Copy to Clipboard Toggle word wrap

요청 엔터티

Payer
설명
다운로드 및 요청 요금을 지불하는 사용자를 지정합니다.
유형
enum
requestPaymentConfiguration
설명
Payer 용 컨테이너입니다.
유형
컨테이너

3.3.33. 멀티 테넌트 버킷 작업

클라이언트 애플리케이션이 버킷에 액세스하면 항상 특정 사용자의 인증 정보로 작동합니다. Red Hat Ceph Storage 클러스터에서 모든 사용자는 테넌트에 속합니다. 결과적으로 테넌트가 명시적으로 지정되지 않은 경우 모든 버킷 작업에는 해당 컨텍스트에 암시적 테넌트가 있습니다. 따라서 참조된 버킷과 동일한 테넌트에 속하는 경우 멀티 테넌시는 이전 릴리스와 완전히 호환됩니다.

명시적 테넌트를 지정하는 데 사용되는 확장 기능은 사용된 프로토콜 및 인증 시스템에 따라 다릅니다.

다음 예에서 콜론 문자는 테넌트와 버킷을 구분합니다. 따라서 샘플 URL은 다음과 같습니다.

https://rgw.domain.com/tenant:bucket
Copy to Clipboard Toggle word wrap

반면 간단한 Python 예제에서는 버킷 메서드 자체에서 테넌트와 버킷을 구분합니다.

예제

from boto.s3.connection import S3Connection, OrdinaryCallingFormat
  c = S3Connection(
    aws_access_key_id="TESTER",
    aws_secret_access_key="test123",
    host="rgw.domain.com",
    calling_format = OrdinaryCallingFormat()
  )
  bucket = c.get_bucket("tenant:bucket")
Copy to Clipboard Toggle word wrap

참고

호스트 이름에 콜론 또는 버킷 이름에 아직 유효하지 않은 다른 구분자를 포함할 수 없기 때문에 멀티 테넌시를 사용하는 S3 스타일 하위 도메인을 사용할 수 없습니다. 마침표를 사용하면 모호한 구문이 생성됩니다. 따라서 bucket-in-URL-path 형식을 다중 테넌시와 함께 사용해야 합니다.

추가 리소스

  • 자세한 내용은 Red Hat Ceph Storage Object Gateway 가이드사용자 관리에서 멀티 테넌시 섹션을 참조하십시오.

3.3.34. S3 블록 공용 액세스

S3 Block Public Access 기능을 사용하여 버킷과 사용자를 설정하여 Red Hat Ceph Storage 오브젝트 스토리지 S3 리소스에 대한 공용 액세스를 관리할 수 있습니다.

이 기능을 사용하여 버킷 정책, 액세스 포인트 정책 및 오브젝트 권한을 재정의하여 공용 액세스를 허용할 수 있습니다. 기본적으로 새 버킷, 액세스 포인트 및 오브젝트는 공용 액세스를 허용하지 않습니다.

Ceph Object Gateway의 S3 API는 AWS 공용 액세스 설정의 하위 집합을 지원합니다.

  • BlockPublicPolicy: 사용자가 액세스 포인트 및 버킷 정책을 관리할 수 있도록 하는 설정을 정의합니다. 이 설정을 사용하면 사용자가 버킷 또는 포함된 오브젝트를 공개적으로 공유할 수 없습니다. 기존 액세스 지점 및 버킷 정책은 이 설정을 활성화하면 영향을 받지 않습니다. 이 옵션을 TRUE 로 설정하면 S3가 발생합니다.

    • PUT Bucket 정책에 대한 호출을 거부하려면 다음을 수행합니다.
    • 모든 버킷의 동일한 계정 액세스 지점에 대해 PUT 액세스 포인트 정책에 대한 호출을 거부하려면 다음을 수행합니다.
중요

사용자가 특정 버킷의 블록 공용 액세스 설정을 변경할 수 없도록 사용자 수준에서 이 설정을 적용합니다.

참고

TRUE 설정은 지정된 정책에서 공용 액세스를 허용하는 경우에만 작동합니다.

  • RestrictPublicBuckets: 공용 정책으로 버킷 또는 액세스 지점에 대한 액세스를 제한하는 설정을 정의합니다. 이 제한은 버킷 소유자 계정 및 액세스 지점 소유자 계정 내의 AWS 서비스 주체 및 권한 부여 사용자에게만 적용됩니다. 이렇게 하면 계정 내 사용자가 액세스 포인트 또는 버킷을 관리할 수 있지만 지정된 경우를 제외하고 액세스 지점 또는 버킷에 대한 계정 간 액세스가 차단됩니다. 이 설정을 활성화하면 기존 액세스 지점 또는 버킷 정책에는 영향을 미치지 않습니다. 이는 Amazon S3가 특정 계정에 대한 공용 위임을 포함하여 모든 공용 액세스 지점 또는 버킷 정책에서 파생된 공용 액세스 및 교차 계정 액세스를 차단하는 경우에만 정의합니다.
참고

ACL(액세스 제어 목록)은 현재 Red Hat Ceph Storage에서 지원되지 않습니다.

달리 정의하지 않는 한 버킷 정책은 공용으로 간주됩니다. 버킷 정책의 공용 액세스를 차단하려면 다음 중 하나 이상에 대해 고정된 값에만 액세스 권한을 부여해야 합니다.

참고

고정 값에는 와일드카드(*) 또는 AWS ID 및 액세스 관리 정책 변수가 포함되어 있지 않습니다.

  • AWS 주체, 사용자, 역할 또는 서비스 주체
  • aws:SourceIp를 사용한 CIDR(Classless Inter-Domain Routings) 세트
  • aws:SourceArn
  • aws:SourceVpc
  • aws:SourceVpce
  • aws:SourceOwner
  • aws:SourceAccount
  • s3:x-amz-server-side-encryption-aws-kms-key-id
  • 패턴 외부 AWS:userid: ROLEID:*
  • s3:DataAccessPointArn

    참고

    버킷 정책에서 사용하는 경우 계정 ID가 수정된 한 이 값은 정책을 공용으로 렌더링하지 않고 액세스 포인트 이름에 대한 와일드카드를 포함할 수 있습니다.

  • s3:DataAccessPointPointAccount

다음 예제 정책은 공용으로 간주됩니다.

예제

{
		"Principal": "*",
		"Resource": "*",
		"Action": "s3:PutObject",
		"Effect": "Allow",
		"Condition": { "StringLike": {"aws:SourceVpc": "vpc-*"}}
	}
Copy to Clipboard Toggle word wrap

정책을 공용이 아닌 상태로 만들려면 고정 값이 있는 조건 키를 포함합니다.

예제

{
		"Principal": "*",
		"Resource": "*",
		"Action": "s3:PutObject",
		"Effect": "Allow",
		"Condition": {"StringEquals": {"aws:SourceVpc": "vpc-91237329"}}
	}
Copy to Clipboard Toggle word wrap

추가 리소스

3.3.35. S3 GET PublicAccessBlock

S3 Block Public Access 기능을 구성하려면 GET 을 사용하고 대상 AWS 계정을 지정합니다.

구문

GET /v20180820/configuration/publicAccessBlock HTTP/1.1
Host: cname.domain.com
x-amz-account-id: _ACCOUNTID_
Copy to Clipboard Toggle word wrap

요청 헤더

일반적인 요청 헤더에 대한 자세한 내용은 부록 B 의 S3 공통 요청 헤더를 참조하십시오.

응답

응답은 HTTP 200 응답이며 XML 형식으로 반환됩니다.

3.3.36. S3 PUT PublicAccessBlock

이를 사용하여 S3 버킷에 대한 PublicAccessBlock 구성을 생성하거나 수정합니다.

이 작업을 사용하려면 s3:PutBucketPublicAccessBlock 권한이 있어야 합니다.

중요

PublicAccessBlock 구성이 버킷과 계정 간에 다른 경우 Amazon S3는 버킷 수준 및 계정 수준 설정의 가장 제한적인 조합을 사용합니다.

구문

PUT /?publicAccessBlock HTTP/1.1
Host: Bucket.s3.amazonaws.com
Content-MD5: ContentMD5
x-amz-sdk-checksum-algorithm: ChecksumAlgorithm
x-amz-expected-bucket-owner: ExpectedBucketOwner
<?xml version="1.0" encoding="UTF-8"?>
<PublicAccessBlockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
   <BlockPublicAcls>boolean</BlockPublicAcls>
   <IgnorePublicAcls>boolean</IgnorePublicAcls>
   <BlockPublicPolicy>boolean</BlockPublicPolicy>
   <RestrictPublicBuckets>boolean</RestrictPublicBuckets>
</PublicAccessBlockConfiguration>
Copy to Clipboard Toggle word wrap

요청 헤더

일반적인 요청 헤더에 대한 자세한 내용은 부록 B 의 S3 공통 요청 헤더를 참조하십시오.

응답

응답은 HTTP 200 응답이며 빈 HTTP 본문으로 반환됩니다.

3.3.37. S3 PublicAccessBlock삭제

이를 사용하여 S3 버킷의 PublicAccessBlock 구성을 삭제합니다.

구문

DELETE /v20180820/configuration/publicAccessBlock HTTP/1.1
Host: s3-control.amazonaws.com
x-amz-account-id: AccountId
Copy to Clipboard Toggle word wrap

요청 헤더

일반적인 요청 헤더에 대한 자세한 내용은 부록 B 의 S3 공통 요청 헤더를 참조하십시오.

응답

응답은 HTTP 200 응답이며 빈 HTTP 본문으로 반환됩니다.

3.4. S3 오브젝트 작업

개발자는 Ceph Object Gateway를 통해 Amazon S3 API(애플리케이션 프로그래밍 인터페이스)를 사용하여 오브젝트 작업을 수행할 수 있습니다.

다음 표에는 해당 기능의 지원 상태와 함께 오브젝트에 대한 Amazon S3 기능 작업이 나열되어 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.

3.4.1. S3 버킷에서 오브젝트 가져오기

버킷에서 오브젝트를 검색합니다.

구문

GET /BUCKET/OBJECT HTTP/1.1
Copy to Clipboard Toggle word wrap

versionId 하위 리소스를 추가하여 특정 버전의 오브젝트를 검색합니다.

구문

GET /BUCKET/OBJECT?versionId=VERSION_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 헤더

partNumber
설명
읽을 개체의 일부입니다. 이렇게 하면 지정된 부분에 대해 범위가 지정된 GET 요청이 활성화됩니다. 이 요청을 사용하면 오브젝트의 일부만 다운로드하는 데 유용합니다.
유효한 값
1에서 10,000 사이의 양의 정수입니다.
필수 항목
없음
범위
설명

검색할 오브젝트의 범위입니다.

참고

GET 요청당 여러 데이터 범위가 지원되지 않습니다.

유효한 값
Range:bytes=beginbyte-endbyte
필수 항목
없음
if-modified-since
설명
타임스탬프 이후 수정된 경우에만 가져옵니다.
유효한 값
Timestamp
필수 항목
없음
if-unmodified-since
설명
타임스탬프 이후 수정되지 않은 경우에만 가져옵니다.
유효한 값
Timestamp
필수 항목
없음
if-match
설명
오브젝트 ETag가 ETag와 일치하는 경우에만 가져옵니다.
유효한 값
엔터티 태그
필수 항목
없음
if-none-match
설명
개체 ETag가 ETag와 일치하지 않는 경우에만 가져옵니다.
유효한 값
엔터티 태그
필수 항목
없음

요청 헤더가 있는 Sytnax

GET /BUCKET/OBJECT?partNumber=PARTNUMBER&versionId=VersionId HTTP/1.1
Host: Bucket.s3.amazonaws.com
If-Match: IfMatch
If-Modified-Since: IfModifiedSince
If-None-Match: IfNoneMatch
If-Unmodified-Since: IfUnmodifiedSince
Range: Range
Copy to Clipboard Toggle word wrap

응답 헤더

content-Range
설명
데이터 범위는 요청에 range 헤더 필드가 지정된 경우에만 반환됩니다.
x-amz-version-id
설명
버전 ID 또는 null을 반환합니다.

3.4.2. S3 오브젝트에 대한 정보 가져오기

개체에 대한 정보를 반환합니다. 이 요청은 Get Object 요청과 동일한 헤더 정보를 반환하지만 오브젝트 데이터 페이로드가 아닌 메타데이터만 포함합니다.

현재 오브젝트 버전을 검색합니다.

구문

HEAD /BUCKET/OBJECT HTTP/1.1
Copy to Clipboard Toggle word wrap

versionId 하위 리소스를 추가하여 특정 버전에 대한 정보를 검색합니다.

구문

HEAD /BUCKET/OBJECT?versionId=VERSION_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 헤더

범위
설명
검색할 오브젝트의 범위입니다.
유효한 값
Range:bytes=beginbyte-endbyte
필수 항목
없음
if-modified-since
설명
타임스탬프 이후 수정된 경우에만 가져옵니다.
유효한 값
Timestamp
필수 항목
없음
if-match
설명
오브젝트 ETag가 ETag와 일치하는 경우에만 가져옵니다.
유효한 값
엔터티 태그
필수 항목
없음
if-none-match
설명
오브젝트 ETag가 ETag와 일치하는 경우에만 가져옵니다.
유효한 값
엔터티 태그
필수 항목
없음

응답 헤더

x-amz-version-id
설명
버전 ID 또는 null을 반환합니다.

3.4.3. S3 put object lock

put 오브젝트 잠금 API는 선택한 버킷에 잠금 구성을 배치합니다. 오브젝트 잠금을 사용하면 WORM(Write-Once-Read-Many) 모델을 사용하여 오브젝트를 저장할 수 있습니다. 개체 잠금을 사용하면 고정된 시간 또는 무기한으로 오브젝트를 삭제하거나 덮어쓰지 않도록 합니다. 오브젝트 잠금 구성에 지정된 규칙은 선택한 버킷에 배치된 모든 새 오브젝트에 기본적으로 적용됩니다.

중요

버킷을 생성할 때 오브젝트 잠금을 활성화합니다. 그렇지 않으면 작업이 실패합니다.

구문

PUT /BUCKET?object-lock HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

PUT /testbucket?object-lock HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 엔터티

ObjectLockConfiguration
설명
요청에 대한 컨테이너입니다.
유형
컨테이너
필수 항목
제공됨
ObjectLockEnabled
설명
이 버킷에 오브젝트 잠금 구성이 활성화되어 있는지 여부를 나타냅니다.
유형
문자열
필수 항목
제공됨
Rule
설명
지정된 버킷에 대한 오브젝트 잠금 규칙입니다.
유형
컨테이너
필수 항목
없음
DefaultRetention
설명
지정된 버킷에 배치된 새 오브젝트에 적용되는 기본 보존 기간입니다.
유형
컨테이너
필수 항목
없음
mode
설명
기본 오브젝트 잠금 보존 모드입니다. 유효한 값: GOVERNANCE/COMPLIANCE.
유형
컨테이너
필수 항목
제공됨
설명
기본 보존 기간에 지정된 일 수입니다.
유형
정수
필수 항목
없음
설명
기본 보존 기간에 지정된 연도 수입니다.
유형
정수
필수 항목
없음

HTTP 응답

400
상태 코드
Malformed XML
설명
XML이 제대로 구성되어 있지 않습니다.
409
상태 코드
InvalidBucketState
설명
버킷 오브젝트 잠금이 활성화되지 않습니다.

3.4.4. S3 개체 잠금 가져오기

get 오브젝트 잠금 API는 버킷에 대한 잠금 구성을 검색합니다.

구문

GET /BUCKET?object-lock HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

GET /testbucket?object-lock HTTP/1.1
Copy to Clipboard Toggle word wrap

응답 엔터티

ObjectLockConfiguration
설명
요청에 대한 컨테이너입니다.
유형
컨테이너
필수 항목
제공됨
ObjectLockEnabled
설명
이 버킷에 오브젝트 잠금 구성이 활성화되어 있는지 여부를 나타냅니다.
유형
문자열
필수 항목
제공됨
Rule
설명
지정된 버킷에 대한 오브젝트 잠금 규칙이 있습니다.
유형
컨테이너
필수 항목
없음
DefaultRetention
설명
지정된 버킷에 배치된 새 오브젝트에 적용되는 기본 보존 기간입니다.
유형
컨테이너
필수 항목
없음
mode
설명
기본 오브젝트 잠금 보존 모드입니다. 유효한 값: GOVERNANCE/COMPLIANCE.
유형
컨테이너
필수 항목
제공됨
설명
기본 보존 기간에 지정된 일 수입니다.
유형
정수
필수 항목
없음
설명
기본 보존 기간에 지정된 연도 수입니다.
유형
정수
필수 항목
없음

3.4.7. S3 put 오브젝트 보존

put 오브젝트 보존 API는 오브젝트에 오브젝트 보존 구성을 배치합니다. 보존 기간은 고정된 시간 동안 오브젝트 버전을 보호합니다. 두 가지 모드가 있습니다: GOVERNANCE 및 COMPLIANCE. 이 두 가지 보존 모드는 오브젝트에 서로 다른 수준의 보호를 적용합니다.

참고

이 기간 동안 오브젝트는 WORM으로 보호되는 Write-Once-Read-Many-protected (WORM-protected)이며 덮어쓰거나 삭제할 수 없습니다.

구문

PUT /BUCKET/OBJECT?retention&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

PUT /testbucket/testobject?retention&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

versionId 하위 리소스는 특정 버전의 오브젝트를 검색합니다.

요청 엔터티

보존
설명
요청에 대한 컨테이너입니다.
유형
컨테이너
필수 항목
제공됨
mode
설명
지정된 오브젝트의 보존 모드입니다. 유효한 값: GOVERNANCE, COMPLIANCE.
유형
문자열
필수 항목
제공됨
RetainUntilDate
설명
보존 날짜.
형식
2020-01-05T00:00:00.000Z
유형
Timestamp
필수 항목
제공됨

3.4.8. S3 가져오기 오브젝트 보존

get 오브젝트 보존 API는 오브젝트의 오브젝트 보존 구성을 검색합니다.

구문

GET /BUCKET/OBJECT?retention&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

GET /testbucket/testobject?retention&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

versionId 하위 리소스는 특정 버전의 오브젝트를 검색합니다.

응답 엔터티

보존
설명
요청에 대한 컨테이너입니다.
유형
컨테이너
필수 항목
제공됨
mode
설명
지정된 오브젝트의 보존 모드입니다. 유효한 값: GOVERNANCE/COMPLIANCE
유형
문자열
필수 항목
제공됨
RetainUntilDate
설명
보존 날짜. 형식: 2020-01-05T00:00:00.000Z
유형
Timestamp
필수 항목
제공됨

3.4.9. S3 put object tagging

put 오브젝트 태그 지정 API는 태그를 오브젝트와 연결합니다. 태그는 키-값 쌍입니다. 다른 버전의 태그를 배치하려면 versionId 쿼리 매개변수를 사용합니다. s3:PutObjectTagging 작업을 수행할 수 있는 권한이 있어야 합니다. 기본적으로 버킷 소유자는 이 권한이 있으며 다른 사용자에게 이 권한을 부여할 수 있습니다.

구문

PUT /BUCKET/OBJECT?tagging&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

PUT /testbucket/testobject?tagging&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 엔터티

태그 지정
설명
요청에 대한 컨테이너입니다.
유형
컨테이너
필수 항목
제공됨
tagset
설명
태그 집합의 컬렉션입니다.
유형
문자열
필수 항목
제공됨

3.4.10. S3 오브젝트 태그 지정

get 오브젝트 태그 지정 API는 오브젝트의 태그를 반환합니다. 기본적으로 GET 작업은 현재 오브젝트 버전에 대한 정보를 반환합니다.

참고

버전이 지정된 버킷의 경우 버킷에 여러 버전의 오브젝트를 보유할 수 있습니다. 다른 버전의 태그를 검색하려면 요청에 versionId 쿼리 매개변수를 추가합니다.

구문

GET /BUCKET/OBJECT?tagging&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

GET /testbucket/testobject?tagging&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

3.4.11. S3 오브젝트 태그 삭제

delete 오브젝트 태그 지정 API는 지정된 오브젝트에서 전체 태그 세트를 제거합니다. 이 작업을 사용하려면 s3:DeleteObjectTagging 작업을 수행할 수 있는 권한이 있어야 합니다.

참고

특정 오브젝트 버전의 태그를 삭제하려면 요청에 versionId 쿼리 매개변수를 추가합니다.

구문

DELETE /BUCKET/OBJECT?tagging&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

예제

DELETE /testbucket/testobject?tagging&versionId= HTTP/1.1
Copy to Clipboard Toggle word wrap

3.4.12. S3 버킷에 오브젝트 추가

버킷에 오브젝트를 추가합니다. 이 작업을 수행하려면 버킷에 대한 쓰기 권한이 있어야 합니다.

구문

PUT /BUCKET/OBJECT HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 헤더

content-md5
설명
메시지의 base64로 인코딩된 MD-5 해시입니다.
유효한 값
문자열입니다. 기본값 또는 제약 조건이 없습니다.
필수 항목
없음
content-type
설명
표준 MIME 유형입니다.
유효한 값
모든 MIME 유형. 기본값: binary/octet-stream.
필수 항목
없음
x-amz-meta-<…​>*
설명
사용자 메타데이터. 오브젝트로 저장됩니다.
유효한 값
최대 8kb의 문자열입니다. 기본값이 없습니다.
필수 항목
없음
x-amz-acl
설명
사용할 수 있는 ACL입니다.
유효한 값
private, public-read, public-read-write, authenticated-read
필수 항목
없음

응답 헤더

x-amz-version-id
설명
버전 ID 또는 null을 반환합니다.

3.4.13. S3 오브젝트 삭제

개체를 제거합니다. 포함된 버킷에 WRITE 권한이 설정되어 있어야 합니다.

오브젝트를 삭제합니다. 오브젝트 버전 지정이 있는 경우 마커를 생성합니다.

구문

DELETE /BUCKET/OBJECT HTTP/1.1
Copy to Clipboard Toggle word wrap

버전 관리가 있을 때 오브젝트를 삭제하려면 versionId 하위 리소스와 삭제할 오브젝트 버전을 지정해야 합니다.

DELETE /BUCKET/OBJECT?versionId=VERSION_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

3.4.14. S3 여러 오브젝트 삭제

이 API 호출은 버킷에서 여러 오브젝트를 삭제합니다.

구문

POST /BUCKET/OBJECT?delete HTTP/1.1
Copy to Clipboard Toggle word wrap

3.4.15. S3 오브젝트의 ACL(액세스 제어 목록) 가져오기

현재 오브젝트 버전에 대한 ACL을 반환합니다.

구문

GET /BUCKET/OBJECT?acl HTTP/1.1
Copy to Clipboard Toggle word wrap

versionId 하위 리소스를 추가하여 특정 버전에 대한 ACL을 검색합니다.

구문

GET /BUCKET/OBJECT?versionId=VERSION_ID&acl HTTP/1.1
Copy to Clipboard Toggle word wrap

응답 헤더

x-amz-version-id
설명
버전 ID 또는 null을 반환합니다.

응답 엔터티

AccessControlPolicy
설명
응답을 위한 컨테이너입니다.
유형
컨테이너
AccessControlList
설명
ACL 정보에 대한 컨테이너입니다.
유형
컨테이너
소유자
설명
버킷 소유자 IDDisplayName 의 컨테이너입니다.
유형
컨테이너
ID
설명
버킷 소유자의 ID입니다.
유형
문자열
DisplayName
설명
버킷 소유자의 표시 이름입니다.
유형
문자열
부여
설명
GranteePermission 에 대한 컨테이너입니다.
유형
컨테이너
부여자
설명
권한 부여를 수신하는 사용자의 DisplayNameID 에 대한 컨테이너입니다.
유형
컨테이너
권한
설명
Grantee 버킷에 부여된 권한입니다.
유형
문자열

3.4.16. S3 오브젝트의 ACL(액세스 제어 목록) 설정

현재 오브젝트 버전에 대한 오브젝트 ACL을 설정합니다.

구문

PUT /BUCKET/OBJECT?acl
Copy to Clipboard Toggle word wrap

요청 엔터티

AccessControlPolicy
설명
응답을 위한 컨테이너입니다.
유형
컨테이너
AccessControlList
설명
ACL 정보에 대한 컨테이너입니다.
유형
컨테이너
소유자
설명
버킷 소유자 IDDisplayName 의 컨테이너입니다.
유형
컨테이너
ID
설명
버킷 소유자의 ID입니다.
유형
문자열
DisplayName
설명
버킷 소유자의 표시 이름입니다.
유형
문자열
부여
설명
GranteePermission 에 대한 컨테이너입니다.
유형
컨테이너
부여자
설명
권한 부여를 수신하는 사용자의 DisplayNameID 에 대한 컨테이너입니다.
유형
컨테이너
권한
설명
Grantee 버킷에 부여된 권한입니다.
유형
문자열

3.4.17. S3 오브젝트 복사

오브젝트를 복사하려면 PUT 을 사용하고 대상 버킷과 오브젝트 이름을 지정합니다.

구문

PUT /DEST_BUCKET/DEST_OBJECT HTTP/1.1
x-amz-copy-source: SOURCE_BUCKET/SOURCE_OBJECT
Copy to Clipboard Toggle word wrap

요청 헤더

x-amz-copy-source
설명
소스 버킷 이름 + 오브젝트 이름입니다.
유효한 값
버킷 /오브젝트
필수 항목
제공됨
x-amz-acl
설명
사용할 수 있는 ACL입니다.
유효한 값
private, public-read, public-read-write, authenticated-read
필수 항목
없음
x-amz-copy-if-modified-since
설명
타임스탬프 이후 수정된 경우에만 복사합니다.
유효한 값
Timestamp
필수 항목
없음
x-amz-copy-if-unmodified-since
설명
타임스탬프 이후 수정되지 않은 경우에만 복사합니다.
유효한 값
Timestamp
필수 항목
없음
x-amz-copy-if-match
설명
개체 ETag가 ETag와 일치하는 경우에만 복사합니다.
유효한 값
엔터티 태그
필수 항목
없음
x-amz-copy-if-none-match
설명
개체 ETag가 ETag와 일치하는 경우에만 복사합니다.
유효한 값
엔터티 태그
필수 항목
없음

응답 엔터티

CopyObjectResult
설명
응답 요소에 대한 컨테이너입니다.
유형
컨테이너
Last Cryostat
설명
소스 오브젝트의 마지막 수정된 날짜입니다.
유형
날짜
etag
설명
새 오브젝트의 ETag입니다.
유형
문자열

3.4.18. S3 HTML 양식을 사용하여 버킷에 오브젝트 추가

HTML 양식을 사용하여 버킷에 오브젝트를 추가합니다. 이 작업을 수행하려면 버킷에 대한 쓰기 권한이 있어야 합니다.

구문

POST /BUCKET/OBJECT HTTP/1.1
Copy to Clipboard Toggle word wrap

3.4.19. S3 요청 옵션 결정

실제 요청이 특정 origin, HTTP 메서드 및 헤더로 보낼 수 있는지 여부를 결정하는 preflight 요청입니다.

구문

OPTIONS /OBJECT HTTP/1.1
Copy to Clipboard Toggle word wrap

3.4.20. S3 다중 파트 업로드 시작

다중 부분 업로드 프로세스를 시작합니다. UploadId 를 반환하며, 추가 부분을 추가하고, 부분을 나열하고, 다중 파트 업로드를 완료 또는 중단할 때 지정할 수 있습니다.

구문

POST /BUCKET/OBJECT?uploads
Copy to Clipboard Toggle word wrap

요청 헤더

content-md5
설명
메시지의 base64로 인코딩된 MD-5 해시입니다.
유효한 값
문자열입니다. 기본값 또는 제약 조건이 없습니다.
필수 항목
없음
content-type
설명
표준 MIME 유형입니다.
유효한 값
모든 MIME 유형. 기본값: binary/octet-stream
필수 항목
없음
x-amz-meta-<…​>
설명
사용자 메타데이터. 오브젝트로 저장됩니다.
유효한 값
최대 8kb의 문자열입니다. 기본값이 없습니다.
필수 항목
없음
x-amz-acl
설명
사용할 수 있는 ACL입니다.
유효한 값
private, public-read, public-read-write, authenticated-read
필수 항목
없음

응답 엔터티

InitiatedMultipartUploadsResult
설명
결과를 위한 컨테이너입니다.
유형
컨테이너
bucket
설명
오브젝트 콘텐츠를 수신할 버킷입니다.
유형
문자열
설명
키 요청 매개변수(있는 경우)에서 지정하는 입니다.
유형
문자열
UploadId
설명
있는 경우 multipart 업로드를 식별하는 upload-id 요청 매개변수로 지정된 ID입니다.
유형
문자열

3.4.21. S3 다중 업로드에 부분 추가

다중 파트 업로드에 부분을 추가합니다.

uploadId 하위 리소스와 업로드 ID를 지정하여 다중 파트 업로드에 부분을 추가합니다.

구문

PUT /BUCKET/OBJECT?partNumber=&uploadId=UPLOAD_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

다음 HTTP 응답이 반환될 수 있습니다.

HTTP 응답

404
상태 코드
NoSuchUpload
설명
지정된 upload-id가 이 오브젝트에 시작된 업로드와 일치하지 않습니다.

3.4.22. S3 다중 파트 업로드 부분 나열

uploadId 하위 리소스 및 업로드 ID를 지정하여 다중 파트 업로드 부분을 나열합니다.

구문

GET /BUCKET/OBJECT?uploadId=UPLOAD_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

응답 엔터티

InitiatedMultipartUploadsResult
설명
결과를 위한 컨테이너입니다.
유형
컨테이너
bucket
설명
오브젝트 콘텐츠를 수신할 버킷입니다.
유형
문자열
설명
키 요청 매개변수(있는 경우)에서 지정하는 입니다.
유형
문자열
UploadId
설명
있는 경우 multipart 업로드를 식별하는 upload-id 요청 매개변수로 지정된 ID입니다.
유형
문자열
이니시에이터
설명
업로드를 시작한 사용자의 IDDisplayName 을 포함합니다.
유형
컨테이너
ID
설명
이니시에이터의 ID입니다.
유형
문자열
DisplayName
설명
이니시에이터의 표시 이름입니다.
유형
문자열
소유자
설명
업로드된 오브젝트를 소유한 사용자의 IDDisplayName 에 대한 컨테이너입니다.
유형
컨테이너
StorageClass
설명
결과 오브젝트를 저장하는 데 사용되는 메서드입니다. STANDARD 또는 REDUCED_REDUNDANCY
유형
문자열
PartNumberMarker
설명
IsTruncatedtrue 인 경우 후속 요청에 사용할 부분 마커입니다. 목록 앞에 추가합니다.
유형
문자열
NextPartNumberMarker
설명
IsTruncatedtrue 인 경우 후속 요청에 사용할 다음 부분 마커입니다. 목록의 끝입니다.
유형
문자열
IsTruncated
설명
true 인 경우 오브젝트 업로드 콘텐츠의 하위 집합만 반환되었습니다.
유형
부울
부분
설명
,Part,InitiatorOwner,StorageClassInitiated 요소에 대한 컨테이너입니다.
유형
컨테이너
Partnumber
설명
,Part,InitiatorOwner,StorageClassInitiated 요소에 대한 컨테이너입니다.
유형
정수
etag
설명
해당 부분의 엔터티 태그입니다.
유형
문자열
크기
설명
업로드된 부분의 크기입니다.
유형
정수

3.4.23. S3 업로드된 부분 수집

어셈블은 업로드된 부분을 업로드하고 새 오브젝트를 생성하여 다중 파트 업로드를 완료합니다.

uploadId 하위 리소스 및 업로드 ID를 지정하여 다중 파트 업로드를 완료합니다.

구문

POST /BUCKET/OBJECT?uploadId=UPLOAD_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

요청 엔터티

CompleteMultipartUpload
설명
하나 이상의 부분으로 구성된 컨테이너입니다.
유형
컨테이너
필수 항목
제공됨
부분
설명
PartNumberETag 용 컨테이너입니다.
유형
컨테이너
필수 항목
제공됨
Partnumber
설명
부분의 식별자입니다.
유형
정수
필수 항목
제공됨
etag
설명
해당 부분의 엔터티 태그입니다.
유형
문자열
필수 항목
제공됨

응답 엔터티

CompleteMultipartUploadResult
설명
응답을 위한 컨테이너입니다.
유형
컨테이너
위치
설명
새 오브젝트의 리소스 식별자(path)입니다.
유형
URI
bucket
설명
새 오브젝트가 포함된 버킷의 이름입니다.
유형
문자열
설명
오브젝트의 키입니다.
유형
문자열
etag
설명
새 오브젝트의 entity 태그입니다.
유형
문자열

3.4.24. S3 다중 파트 업로드 복사

기존 오브젝트의 데이터를 데이터 소스로 복사하여 부분을 업로드합니다.

uploadId 하위 리소스와 업로드 ID를 지정하여 다중 파트 업로드 사본을 수행합니다.

구문

PUT /BUCKET/OBJECT?partNumber=PartNumber&uploadId=UPLOAD_ID HTTP/1.1
Host: cname.domain.com

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET
Copy to Clipboard Toggle word wrap

요청 헤더

x-amz-copy-source
설명
소스 버킷 이름 및 오브젝트 이름입니다.
유효한 값
버킷 /오브젝트
필수 항목
제공됨
x-amz-copy-source-range
설명
소스 오브젝트에서 복사할 바이트 범위입니다.
유효한 값
range: bytes=first-last, 여기서 첫 번째와 마지막은 복사할 0 기반 바이트 오프셋입니다. 예를 들어bytes=0-9 는 소스의 처음 10바이트를 복사하려는 것을 나타냅니다.
필수 항목
없음

응답 엔터티

CopyPartResult
설명
모든 응답 요소에 대한 컨테이너입니다.
유형
컨테이너
etag
설명
새 부분의 ETag를 반환합니다.
유형
문자열
Last Cryostat
설명
부분이 마지막으로 수정된 날짜를 반환합니다.
유형
문자열

추가 리소스

3.4.25. S3 다중 파트 업로드 중단

다중 파트 업로드를 중지합니다.

uploadId 하위 리소스 및 업로드 ID를 지정하여 다중 파트 업로드를 중단합니다.

구문

DELETE /BUCKET/OBJECT?uploadId=UPLOAD_ID HTTP/1.1
Copy to Clipboard Toggle word wrap

3.4.26. S3 0.0.0.0 상호 운용성

HDFS(HDFS) 액세스가 필요한 데이터 분석 애플리케이션의 경우 HDFS용 Apache S3A 커넥터를 사용하여 Ceph Object Gateway에 액세스할 수 있습니다. S3A 커넥터는 Ceph Object Gateway에 데이터가 저장되는 동안 HDFS 파일 시스템 읽기 및 쓰기 의미 체계와 함께 S3 호환 개체 스토리지를 HDFS 파일 시스템으로 제공하는 오픈 소스 툴입니다.

Ceph Object Gateway는 HDFS 2.7.3과 함께 제공되는 S3A 커넥터와 완벽하게 호환됩니다.

3.5. S3 Select operations

개발자는 S3 select를 실행하여 처리량을 가속화할 수 있습니다. 사용자는 중재자 없이 S3 선택 쿼리를 직접 실행할 수 있습니다.

CSV, Apache Parquet (Parquet) 및 JSON 오브젝트에 CSV, Parquet 및 JSON 오브젝트와 함께 S3 선택 작업을 제공하는 JSON의 세 가지 S3 선택 워크플로우가 있습니다.

  • CSV 파일은 테이블 형식 데이터를 일반 텍스트 형식으로 저장합니다. 파일의 각 행은 데이터 레코드입니다.
  • parquet는 효율적인 데이터 저장 및 검색을 위해 설계된 오픈 소스 열 중심 데이터 파일 형식입니다. 매우 효율적인 데이터 압축 및 인코딩 체계를 제공하여 복잡한 데이터를 대량으로 처리할 수 있는 향상된 성능을 제공합니다. parquet를 사용하면 S3 select-engine이 열과 청크를 건너뛸 수 있으므로 IOPS를 크게 줄일 수 있습니다(CSV 및 JSON 형식 비교).
  • JSON은 형식 구조입니다. S3 선택 엔진을 사용하면 JSON 리더를 사용하여 JSON 형식 입력 데이터 상단에 SQL 문을 사용할 수 있으므로 매우 중첩되고 복잡한 JSON 형식의 데이터를 스캔할 수 있습니다.

예를 들어 CSV, Parquet 또는 JSON S3 개체가 여러 기가바이트의 데이터를 사용하여 사용자는 다음 쿼리를 사용하여 다른 열로 필터링되는 단일 열을 추출할 수 있습니다.

예제

select customerid from s3Object where age>30 and age<65;
Copy to Clipboard Toggle word wrap

현재 S3 오브젝트는 데이터를 필터링하고 추출하기 전에 Ceph Object Gateway를 통해 Ceph OSD에서 데이터를 검색해야 합니다. 개체가 크고 쿼리가 더 구체적인 경우 성능이 향상됩니다. Parquet 형식은 CSV보다 더 효율적으로 처리할 수 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.
  • 사용자 액세스 권한이 있는 S3 사용자

3.5.1. S3 오브젝트에서 콘텐츠 선택

select 오브젝트 콘텐츠 API는 구조화된 쿼리 언어(SQL)를 통해 오브젝트 콘텐츠를 필터링합니다. 인벤토리 오브젝트에 상주해야 하는 사항에 대한 설명의 예는 AWS Systems Manager 사용자 가이드 의 인벤토리에서 수집한 메타데이터 섹션을 참조하십시오. 인벤토리 콘텐츠는 해당 인벤토리에 대해 실행해야 하는 쿼리 유형에 영향을 미칩니다. 필수 정보를 제공할 수 있는 SQL 문의 수는 크지만 S3 select는 SQL과 같은 유틸리티이므로 그룹별조인 과 같이 일부 연산자는 지원되지 않습니다.

CSV에만 대해 지정된 콘텐츠를 검색하려면 개체의 쉼표로 구분된 값으로 데이터 직렬화 형식을 지정해야 합니다. parquet는 바이너리 형식이므로 구분 기호가 없습니다. AWS(Amazon Web Services) CLI(명령줄 인터페이스) 선택 오브젝트 콘텐츠는 CSV 또는 Parquet 형식을 사용하여 오브젝트 데이터를 레코드로 구문 분석하고 쿼리에 지정된 레코드만 반환합니다.

응답에 대한 데이터 직렬화 형식을 지정해야 합니다. 이 작업에 대한 s3:GetObject 권한이 있어야 합니다.

참고
  • InputSerialization 요소는 쿼리되는 개체의 데이터 형식을 설명합니다. 오브젝트는 CSV 또는 Parquet 형식일 수 있습니다.
  • OutputSerialization 요소는 AWS-CLI 사용자 클라이언트의 일부이며 출력 데이터의 포맷 방법을 설명합니다. Ceph는 AWS-CLI에 대한 서버 클라이언트를 구현했기 때문에 현재 CSV만 있는 OutputSerialization 에 따라 동일한 출력을 제공합니다.
  • InputSerialization 형식은 OutputSerialization 의 형식과 일치시킬 필요가 없습니다. 예를 들어 OutputSerializationInputSerialization 및 CSV에서 Parquet를 지정할 수 있습니다.

구문

POST /BUCKET/KEY?select&select-type=2 HTTP/1.1\r\n
Copy to Clipboard Toggle word wrap

예제

POST /testbucket/sample1csv?select&select-type=2 HTTP/1.1\r\n
POST /testbucket/sample1parquet?select&select-type=2 HTTP/1.1\r\n
Copy to Clipboard Toggle word wrap

요청 엔티티

bucket
설명
오브젝트 콘텐츠를 선택할 버킷입니다.
유형
문자열
필수 항목
제공됨
설명
오브젝트 키입니다.
길이 제한
최소 길이는 1입니다.
유형
문자열
필수 항목
제공됨
SelectObjectContentRequest
설명
선택한 오브젝트 콘텐츠 요청 매개변수의 root 수준 태그입니다.
유형
문자열
필수 항목
제공됨
expression
설명
오브젝트를 쿼리하는 데 사용되는 식입니다.
유형
문자열
필수 항목
제공됨
ExpressionType
설명
예제 SQL에 대해 제공된 표현식의 유형입니다.
유형
문자열
유효한 값
SQL
필수 항목
제공됨
InputSerialization
설명
쿼리되는 개체의 데이터 형식에 대해 설명합니다.Describes the format of the data in the object that is being queried.
유형
문자열
필수 항목
제공됨
OutputSerialization
설명
쉼표 구분 기호 및 새 줄로 반환되는 데이터 형식입니다.
유형
문자열
필수 항목
제공됨

응답 엔티티

작업이 성공하면 서비스는 HTTP 200 응답을 보냅니다. 데이터는 서비스에서 XML 형식으로 반환됩니다.

페이로드
설명
페이로드 매개 변수의 루트 수준 태그입니다.
유형
문자열
필수 항목
제공됨
레코드
설명
레코드 이벤트입니다.
유형
base64로 인코딩된 바이너리 데이터 오브젝트
필수 항목
없음
통계
설명
통계 이벤트입니다.
유형
long
필수 항목
없음

Ceph Object Gateway는 다음 응답을 지원합니다.

예제

{:event-type,records} {:content-type,application/octet-stream} {:message-type,event}
Copy to Clipboard Toggle word wrap

구문(CSV의 경우)

aws --endpoint-URL http://localhost:80 s3api select-object-content
 --bucket BUCKET_NAME
 --expression-type 'SQL'
 --input-serialization
 '{"CSV": {"FieldDelimiter": "," , "QuoteCharacter": "\"" , "RecordDelimiter" : "\n" , "QuoteEscapeCharacter" : "\\" , "FileHeaderInfo": "USE" }, "CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}'
 --key OBJECT_NAME.csv
 --expression "select count(0) from s3object where int(_1)<10;" output.csv
Copy to Clipboard Toggle word wrap

예(CSV의 경우)

aws --endpoint-url http://localhost:80 s3api select-object-content
 --bucket testbucket
 --expression-type 'SQL'
 --input-serialization
 '{"CSV": {"FieldDelimiter": "," , "QuoteCharacter": "\"" , "RecordDelimiter" : "\n" , "QuoteEscapeCharacter" : "\\" , "FileHeaderInfo": "USE" }, "CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}'
 --key testobject.csv
 --expression "select count(0) from s3object where int(_1)<10;" output.csv
Copy to Clipboard Toggle word wrap

구문(Parquet의 경우)

aws --endpoint-url http://localhost:80 s3api select-object-content
 --bucket BUCKET_NAME
 --expression-type 'SQL'
 --input-serialization
 '{"Parquet": {}, {"CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}'
 --key OBJECT_NAME.parquet
 --expression "select count(0) from s3object where int(_1)<10;" output.csv
Copy to Clipboard Toggle word wrap

예: (Parquet)

aws --endpoint-url http://localhost:80 s3api select-object-content
 --bucket testbucket
 --expression-type 'SQL'
 --input-serialization
 '{"Parquet": {}, {"CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}'
 --key testobject.parquet
 --expression "select count(0) from s3object where int(_1)<10;" output.csv
Copy to Clipboard Toggle word wrap

구문(JSON의 경우)

aws --endpoint-URL http://localhost:80 s3api select-object-content
 --bucket BUCKET_NAME
 --expression-type 'SQL'
 --input-serialization
 '{"JSON": {"CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}}'
 --key OBJECT_NAME.json
 --expression "select count(0) from s3object where int(_1)<10;" output.csv
Copy to Clipboard Toggle word wrap

예(JSON의 경우)

aws --endpoint-url http://localhost:80 s3api select-object-content
 --bucket testbucket
 --expression-type 'SQL'
 --input-serialization
 '{"JSON": {"CompressionType": "NONE"}'
 --output-serialization '{"CSV": {}}}'
 --key testobject.json
 --expression "select count(0) from s3object where int(_1)<10;" output.csv
Copy to Clipboard Toggle word wrap

예(boTO3)

import pprint
import boto3
from botocore.exceptions import ClientError

def run_s3select(bucket,key,query,column_delim=",",row_delim="\n",quot_char='"',esc_char='\\',csv_header_info="NONE"):

   s3 = boto3.client('s3',
       endpoint_url=endpoint,
       aws_access_key_id=access_key,
       region_name=region_name,
       aws_secret_access_key=secret_key)

   result = ""
   try:
       r = s3.select_object_content(
       Bucket=bucket,
       Key=key,
       ExpressionType='SQL',
       InputSerialization = {"CSV": {"RecordDelimiter" : row_delim, "FieldDelimiter" : column_delim,"QuoteEscapeCharacter": esc_char, "QuoteCharacter": quot_char, "FileHeaderInfo": csv_header_info}, "CompressionType": "NONE"},
       OutputSerialization = {"CSV": {}},
       Expression=query,
       RequestProgress = {"Enabled": progress})

   except ClientError as c:
       result += str(c)
       return result

   for event in r['Payload']:
           if 'Records' in event:
               result = ""
               records = event['Records']['Payload'].decode('utf-8')
               result += records
           if 'Progress' in event:
               print("progress")
               pprint.pprint(event['Progress'],width=1)
           if 'Stats' in event:
               print("Stats")
               pprint.pprint(event['Stats'],width=1)
           if 'End' in event:
               print("End")
               pprint.pprint(event['End'],width=1)

   return result




 run_s3select(
 "my_bucket",
 "my_csv_object",
 "select int(_1) as a1, int(_2) as a2 , (a1+a2) as a3 from s3object where a3>100 and a3<300;")
Copy to Clipboard Toggle word wrap

지원되는 기능

현재 AWS s3 select 명령의 일부만 지원됩니다.

Expand
기능세부 정보설명예제

연산 연산자

^ * % / + - ( )

 

s3object에서 (int(_1)+int(_2))*int(_9)를 선택합니다.

연산 연산자

% modulo

 

캐스팅(_1을 int로)%2 = 0인 s3 오브젝트에서 count(*)를 선택합니다.

연산 연산자

^ power-of

 

s3object에서 캐스팅(2^10 as int)을 선택합니다.

Operator 비교

> < >= ⇐ == !=

 

s3object에서 _1,_2를 선택합니다. 여기서 (int(_1)+int(_3))>int(_5);

논리 Operator

또는

 

s3object이 아닌 위치에서 count(*)를 선택합니다(정수(1)>123 및 int(_5)<200);

논리 Operator

null입니다.

표현식의 null 표시에 대해 true/false를 반환합니다.

 

논리 연산자 및 NULL

null이 아닙니다.

표현식의 null 표시에 대해 true/false를 반환합니다.

 

논리 연산자 및 NULL

알 수 없는 상태

null을 검토하고 NULL을 사용하여 논리 작업의 결과를 관찰합니다. 쿼리는 0 을 반환합니다.

s3 개체에서 null 및 (3>2)를 선택합니다.

NULL을 사용하는 연산 연산자

알 수 없는 상태

null을 검토하고 NULL을 사용하여 바이너리 작업의 결과를 관찰합니다. 쿼리는 0 을 반환합니다.

s3object where (null+1) 및 (3>2)에서 count(*)를 선택합니다.

NULL과 비교

알 수 없는 상태

null-handle을 검토하고 NULL을 사용한 비교 작업의 결과를 관찰합니다. 쿼리는 0 을 반환합니다.

select count(*) from s3object where (null*1.5) != 3;

누락된 열

알 수 없는 상태

 

s3object에서 count(*)를 선택합니다. 여기서 _1은 null입니다.

프로젝션 열

if 또는 그 이상과 유사합니다.

 

1+1== (2+1)*3인 경우 케이스를 선택한 후 'case_1'을 선택합니다. 4*3)===" then 'case_2' other 'case_else' end, age*2 from s3object;

프로젝션 열

전환/케이스 기본값과 유사합니다.

 

케이스 캐스팅(_1 as int) + 1 when 2 then "a" when 3 then "b" else "c" end from s3object;

논리 Operator

 

coalesce 는 null이 아닌 첫 번째 인수를 반환합니다.

select coalesce(nullif(5,5),nullif(1,1.0),age+12) from s3object;

논리 Operator

 

NULLIF는 두 인수가 모두 같거나 첫 번째 인수인 nullif (1,1)=NULL nullif(null,1)=NULL nullif(2,1)=2인 경우 null을 반환합니다.

s3object에서 nullif(cast(_1)를 int로),cast(_2 as int)를 선택합니다.

논리 Operator

 

{expression} in (.. {expression} ..)

'ben' in (trim(_5),substring(_1,char_length(_1)-3,3),last_name); s3object에서 count(*)를 선택합니다.

논리 Operator

 

{expression}과 {expression} 사이의 {expression}

800과 900 사이의 캐스팅(_1 as int)에서 _1을 선택합니다. 여기서 stdin(_3,char_length(_3),1) 간에 "x"와 트리트(_3,char_length(_3)-1,1) = ":" 사이의 count(_3,char_length(_3),1) 를 선택합니다.

논리 Operator

 

{expression} like {match-pattern}

'%de_'와 같은 s3object에서 count( )를 선택하고, s3object에서 count( )를 선택합니다. 여기서 _1은 "%a[r-s]와 같습니다.

캐스팅 Operator

  

s3object에서 cast(123 as int)%2를 선택합니다.

캐스팅 Operator

  

s3object에서 cast(123.456 as float)%2를 선택합니다.

캐스팅 Operator

  

s3object에서 cast('ABC0-9'를 문자열로),cast(substr('ab12cd',3,2)를 int)*4를 선택합니다.

캐스팅 Operator

  

s3object에서 cast( 2007-01-01',12,10)에서 cast(substring('publish on 2007-01-01',12,10))를 선택합니다.

AWS 캐스팅 Operator가 아닌 경우

  

select int(_1),int( 1.2 + 3.4) from s3object;

AWS 캐스팅 Operator가 아닌 경우

  

s3object에서 float(1.2)를 선택합니다.

AWS 캐스팅 Operator가 아닌 경우

  

s3object에서 to_timestamp('1999-10-10T12:23:44Z')를 선택합니다.

집계 기능

일요일

 

select sum(int(_1)) from s3object;

집계 기능

AVG

 

s3object에서 avg(cast(_1 as float) + cast(_2 as int))를 선택합니다.

집계 기능

 

s3object에서 avg(cast(_1 a float) + cast(_2 as int))를 선택합니다.

집계 기능

Max

 

select max(float(_1)),min(int(_5)) from s3object;

집계 기능

count

 

s3object에서 count(*)를 선택합니다. 여기서 (int(1)+int(_3))>int(_5);

타임 스탬프 기능

extract

 

extract(year from to_timestamp(_2)) > extract(year from to_timestamp(_2))에서 count(*)를 선택하고 <year from to_timestamp(_1)를 추출합니다.

타임 스탬프 기능

DateAdd

 

s3object에서 date_diff(year,to_timestamp(_1),date_add(day,366,to_timestamp(_1)) = 1을 선택합니다.

타임 스탬프 기능

DateDiff

 

s3object에서 count(0)를 선택합니다. 여기서 date_diff(month,to_timestamp(_1),to_timestamp(_2)) = 2;

타임 스탬프 기능

UtcNow

 

s3object에서 count(0)를 선택합니다. 여기서 date_diff(hour,utcnow(),date_add(day,1,utcnow())) = 24

타임 스탬프 기능

to_string

 

s3object에서 to_string( to_timestamp("2009-09-17T17:56:06.234567Z"), "yyyyMMdd-H:m:s")를 선택합니다.

문자열 기능

하위 문자열

 

int(substring(_1,1,4)>1950 및 int(substring(_1,1,4))<1960인 s3object에서 count(0)를 선택합니다.

문자열 기능

하위 문자열

음수가 포함된 하위 문자열은 첫 번째 것으로 간주됩니다.

s3object에서 하위 문자열("123456789"을 -4)을 선택합니다.

문자열 기능

하위 문자열

범위를 벗어난 숫자의 하위 문자열은 (first,last)와 동일합니다.

s3object에서 하위 문자열("123456789"에서 0의 경우 100)을 선택합니다.

문자열 기능

Trim

 

s3object에서 trim(' foobar ')을 선택합니다.

문자열 기능

Trim

 

s3object에서 trim(trailing from ' foobar ')을 선택합니다.

문자열 기능

Trim

 

s3object에서 트리를 선택합니다(예: foobar ')

문자열 기능

Trim

 

s3object에서 트리밍(1112211foobar22211122')을 선택합니다.

문자열 기능

낮음 또는 상한

 

s3object에서 lower('ABcD12#$e')을 선택합니다.

문자열 기능

char_length, character_length

 

char_length(_3)=3인 s3object에서 count(*)를 선택합니다.

복잡한 쿼리

  

sum(cast(_1 as int)),max(cast(_3 as int)), 하위 문자열('abcdefghijklm', (2-1)*3+sum(_1 as int))/sum(cast(_1 as int))+1, (count() + count(0))을 s3object에서 선택합니다.

별칭 지원

  

int(_1)를 a1, int(_2)를 a2로, (a1+a2)를 s3object 여기서 a3>100 및 a3<300으로 선택합니다.

3.5.2. S3 지원 선택 함수

S3 select supports the following functions: .Timestamp

to_timestamp(string)
설명
문자열을 timestamp 기본 형식으로 변환합니다. 문자열 형식에서 누락된 '시간' 값은 0으로 채워집니다. 월과 일 값의 경우 1은 기본값입니다. '시간 영역' 형식은 +/-HH:mm 또는 Z입니다. 여기서 'Z' 문자는 UTC(Coordinated Universal Time)를 나타냅니다. 시간대 값의 범위는 12:00에서 +14:00 사이입니다.
지원됨

현재 다음 문자열 형식을 타임 스탬프로 변환할 수 있습니다.

  • YYYY-MM-DDTHH:mm:ss.SSSSSS+/-HH:mm
  • YYYY-MM-DDTHH:mm:ss.SSSSSSZ
  • YYYY-MM-DDTHH:mm:ss+/-HH:mm
  • YYYY-MM-DDTHH:mm:ssZ
  • YYYY-MM-DDTHH:mm+/-HH:mm
  • YYYY-MM-DDTHH:mmZ
  • YYYY-MM-DDT
  • YYYYT
to_string(timestamp, format_pattern)
설명
지정된 입력 문자열 형식으로 입력 타임스탬프의 문자열 표현을 반환합니다.
매개 변수
Expand
형식예제설명

YY

69

2년 숫자입니다.

y

1969

4년차 숫자입니다.

YYYY

1969

zero-padded 4자리 연도.

M

1

해당 연도의 월입니다.

MM

01

해당 연도의 제로 추가 월입니다.

MMM

1월

연도 이름의 축약된 월입니다.

MMMM

1월

연도의 전체 이름입니다.The full month of the year.

MMMMM

J

연중 첫 번째 편지입니다. to_timestamp 함수와 함께 사용하면 유효하지 않습니다.

d

2

달의 날 (1-31).

dd

02

해당 월의 제로 추가 일(01-31).

a

AM

오전 또는 오후

h

3

하루 (1-12)

hh

03

0padded hour of day (01-12)

H

3

시간(0-23)입니다.

HH

03

0padded hour of the day (00-23).

m

4

시간(0-59)의 분입니다.

mm

04

시간(00-59)의 0padded 분.

S

5

분의 초(0-59)입니다.

SS

05

분의 1초(00-59)입니다.

S

1

초의 분수(정밀: 0.1, 범위: 0.0-0.9).

SS

12

초의 분수(정수: 0.01, 범위: 0.0-0.99).

SSS

123

초의 분수(정밀: 0.01, 범위: 0.0-0.999).

SSSS

1234

초의 분수(정수: 0.001, 범위: 0.0-0.9999).

SSSSSS

123456

초의 분수(최대 정확도: 1 나노초, 범위: 0.0-0.999999).

n

60000000

second 입니다.

X

+07 또는 Z

오프셋이 0인 경우 시간 또는 "Z"로 오프셋합니다.

XX 또는 XXXX

+0700 또는 Z

오프셋이 0인 경우 시간 및 분 또는 "Z"로 오프셋합니다.

XXX 또는 XXXXX

+07:00 또는 Z

오프셋이 0인 경우 시간 및 분 또는 "Z"로 오프셋합니다.

x

7

시간 내에 오프셋합니다.

Xx 또는 xxxx

700

시간 및 분 단위로 오프셋합니다.

xxx 또는 xxxxx

+07:00

시간 및 분 단위로 오프셋합니다.

extract(date-part from timestamp)
설명
입력 타임스탬프에서 date-part 추출에 따라 정수를 반환합니다.
지원됨
year, month, week, week, day, minute, second, timezone_minute.
date_add(date-part ,integer,timestamp)
설명
입력 타임스탬프 및 date-part 결과를 기반으로 하는 타임 스탬프를 반환합니다.
지원됨
year, month, day, hour, minute, second.
date_diff(date-part,timestamp,timestamp)
설명
date-part에 따라 두 타임스탬프의 차이에 대한 계산된 결과인 정수를 반환합니다.
지원됨
year, month, day, hour, minute, second.
utcnow()
설명
현재 시간 타임스탬프를 반환합니다.

집계

count()
설명
1인 경우 조건과 일치하는 행 수를 기반으로 정수를 반환합니다.
sum(expression)
설명
항목이 하나 있는 경우 조건과 일치하는 각 행에 대한 요약을 반환합니다.
avg(expression)
설명
하나의 조건이 있는 경우 조건과 일치하는 각 행의 평균 표현식을 반환합니다.
max(expression)
설명
하나가 있는 경우 조건과 일치하는 모든 표현식의 최대 결과를 반환합니다.
min(expression)
설명
하나의 조건이 있는 경우 조건과 일치하는 모든 표현식에 대한 최소 결과를 반환합니다.

문자열

하위 문자열(문자열, from,for)
설명
입력에 대해 from에 따라 입력 문자열에서 문자열 추출을 반환합니다.
Char_length
설명
문자열에 있는 여러 문자를 반환합니다. character_length도 동일한 작업을 수행합니다.
Trim([[leading | trailing | both remove_chars] from] string )
설명
대상 문자열에서 선행/추적(또는 둘 다) 문자를 트리밍합니다. 기본값은 공백 문자입니다.
상위\lower
설명
문자를 대문자 또는 소문자로 변환합니다.

NULL

NULL 값이 없거나 NULL 인 알 수 없는 연산에 대한 값을 생성할 수 없습니다. 연산 비교에도 동일하게 적용되며, NULL 에 대한 비교는 알 수 없는 NULL 입니다.

Expand
표 3.4. NULL 사용 사례
A는 NULL입니다.result(NULL=UNKNOWN)

Not A

NULL

A 또는 False

NULL

A 또는 True

True

A 또는 A

NULL

A 및 False

False

A 및 True

NULL

A 및 A

NULL

3.5.3. S3 별칭 프로그래밍 구성

별칭 프로그래밍 구문은 많은 열 또는 복잡한 쿼리가 포함된 개체로 더 잘 프로그래밍할 수 있기 때문에 s3 선택 언어의 필수 부분입니다. 별칭 구문이 있는 문을 구문 분석할 때 별칭을 올바른 프로젝션 열에 대한 참조로 바꾸고 쿼리 실행 시 참조는 다른 식과 같이 평가됩니다. 별칭은 별칭을 두 번 이상 사용하는 경우 캐시의 결과가 사용되므로 동일한 표현식이 평가되지 않고 동일한 결과가 반환됩니다. 현재 Red Hat은 열 별칭을 지원합니다.

예제

select int(_1) as a1, int(_2) as a2 , (a1+a2) as a3 from s3object where a3>100 and a3<300;")
Copy to Clipboard Toggle word wrap

3.5.4. S3 구문 분석 설명

S3 선택 엔진에는 CSV, Parquet, JSON 등 세 가지 파일 형식 모두에 대한 구문 분석기가 있어 더 처리 가능한 구성 요소로 명령을 분리한 다음 각 구성 요소를 정의하는 태그에 연결됩니다.

3.5.4.1. S3 CSV 구문 분석

입력 직렬화가 있는 CSV 정의에서는 다음 기본값을 사용합니다.

  • row-delimiter에는 {\n}' 을 사용합니다.
  • 인용에는 {"} 를 사용합니다.
  • 이스케이프 문자에는 {\} 를 사용합니다.

csv-header-info 는 AWS-CLI에 표시되는 경우 구문 분석됩니다. 스키마가 포함된 입력 오브젝트의 첫 번째 행입니다. 현재 출력 직렬화 및 압축 유형이 지원되지 않습니다. S3 선택 엔진에는 S3 개체를 구문 분석하는 CSV 구문 분석기가 있습니다.

  • 각 행은 row-delimiter로 끝납니다.
  • 필드 분리기는 인접한 열을 구분합니다.
  • 연속 필드 구분자는 NULL 열을 정의합니다.
  • 인용 문자는 필드를 재정의합니다. 즉, 필드 구분 기호는 따옴표 사이의 문자입니다.
  • 이스케이프 문자는 행 구분 기호를 제외한 특수 문자를 비활성화합니다.

다음은 CSV 구문 분석 규칙의 예입니다.

Expand
표 3.5. CSV 구문 분석
기능설명입력 (토큰)

NULL

연속 필드 구분 기호

,,1,,2, =⇒ {null}{null}{1}{null}{2}{null}

QUOTE

인용 문자는 필드 구분자를 덮어씁니다.

11,22,”a,b,c,d”,last =⇒ {11}{22}{“a,b,c,d”}{last}

escape

이스케이프 문자는 메타 문자를 덮어씁니다.

오브젝트 소유자의 IDDisplayName의 컨테이너

행 구분 기호

닫은 따옴표가 없습니다. 행 구분 기호는 닫는 줄입니다.

11,22,a=”str,44,55,66 =⇒ {11}{22}{a=”str,44,55,66}

CSV 헤더 정보

FileHeaderInfo tag

USE 값은 첫 번째 줄의 각 토큰이 열 이름임을 의미합니다. IGNORE 값은 첫 번째 행을 건너뛰는 것을 의미합니다.

3.5.4.2. S3 Parquet 구문 분석

Apache Parquet는 효율적인 데이터 저장 및 검색을 위해 설계된 오픈 소스 데이터 파일 형식입니다.

S3 select 엔진의 Parquet parser는 다음과 같이 S3 개체를 구문 분석합니다.

예제

4-byte magic number "PAR1"
<Column 1 Chunk 1 + Column Metadata>
<Column 2 Chunk 1 + Column Metadata>
...
<Column N Chunk 1 + Column Metadata>
<Column 1 Chunk 2 + Column Metadata>
<Column 2 Chunk 2 + Column Metadata>
...
<Column N Chunk 2 + Column Metadata>
...
<Column 1 Chunk M + Column Metadata>
<Column 2 Chunk M + Column Metadata>
...
<Column N Chunk M + Column Metadata>
File Metadata
4-byte length in bytes of file metadata
4-byte magic number "PAR1"
Copy to Clipboard Toggle word wrap

  • 위의 예제에는 이 테이블에 N개의 열이 있으며 M 행 그룹으로 나뉩니다. 파일 메타데이터에는 모든 열 메타데이터 시작 위치의 위치가 포함되어 있습니다.
  • 메타데이터는 단일 패스 쓰기를 허용할 데이터 뒤에 작성됩니다.
  • 모든 열 청크는 나중에 순차적으로 읽어야 하는 파일 메타데이터에서 찾을 수 있습니다.
  • 형식은 데이터와 메타데이터를 분리하도록 명시적으로 설계되었습니다. 이렇게 하면 열을 여러 파일로 분할하고 단일 메타데이터 파일을 여러 개의 parquet 파일을 참조할 수 있습니다.
3.5.4.3. S3 JSON 구문 분석

JSON 문서를 사용하면 제한 없이 개체 또는 배열 내에 값을 중첩할 수 있습니다. S3 선택 엔진의 JSON 문서의 특정 값을 쿼리할 때 값의 위치는 SELECT 문의 경로를 통해 지정됩니다.

JSON 문서의 일반 구조에는 CSV 및 Parquet와 같은 행 및 열 구조가 없습니다. 대신 JSON 문서를 쿼리할 때 행과 열을 정의하는 SQL 문 자체입니다.

S3 Select 엔진의 JSON 구문 분석기는 다음과 같이 S3 개체를 구문 분석합니다.

  • SELECT 문의 FROM 절은 행 경계를 정의합니다.
  • JSON 문서의 행은 CSV 개체에 대한 행을 정의하는 데 행 구분 기호를 사용하는 방법 및 Parquet 오브젝트에 대한 행을 정의하는 데 사용되는 방법과 유사합니다.
  • 다음 예제를 고려하십시오.

    예제

    {
        "firstName": "Joe",
        "lastName": "Jackson",
        "gender": "male",
        "age": "twenty"
    },
    
    {
        "firstName": "Joe_2",
        "lastName": "Jackson_2",
        "gender": "male",
        "age": 21
    },
    
    "phoneNumbers":
    [
        { "type": "home1", "number": "734928_1","addr": 11 },
        { "type": "home2", "number": "734928_2","addr": 22 }
    ],
    
    "key_after_array": "XXX",
    
    "description" :
    {
        "main_desc" : "value_1",
        "second_desc" : "value_2"
    }
    
    # the from-clause define a single row.
    # _1 points to root object level.
    # _1.age appears twice in Documnet-row, the last value is used for the operation.
    query = "select _1.firstname,_1.key_after_array,_1.age+4,_1.description.main_desc,_1.description.second_desc from s3object[*].aa.bb.cc;";
    
    expected_result = Joe_2,XXX,25,value_1,value_2
    Copy to Clipboard Toggle word wrap

    • 이 설명은 리더에게 aa.bb.cc 경로를 검색하고 이 경로의 발생에 따라 행 경계를 정의하도록 지시합니다.
    • 행은 독자가 경로에 직면할 때 시작되고, 리더가 경로의 가장 내부 부분을 종료할 때 종료됩니다. 이 경우 오브젝트 cc 입니다.

3.5.5. Ceph Object Gateway와 Trino 통합

사용자가 S3 개체에서 SQL 쿼리 9x를 더 빠르게 실행할 수 있는 중요한 유틸리티인 Trino와 Ceph Object Gateway를 통합합니다.

다음은 Trino 사용의 몇 가지 이점입니다.

  • Trino는 완전한 SQL 엔진입니다.
  • S3를 푸시하면 Trino 엔진이 서버 측에서 실행하는 데 비용 효율적인 SQL 문의 일부를 식별할 수 있는 요청을 선택합니다.
  • Ceph/S3select의 최적화 규칙을 사용하여 성능을 향상시킵니다.
  • Red Hat Ceph Storage 확장성을 활용하여 원본 오브젝트를 동일한 여러 부분으로 분할하고 S3 Select requests를 수행하고 요청을 병합합니다.
중요

trino를 쿼리하는 동안 s3select 구문이 작동하지 않는 경우 SQL 구문을 사용합니다.

사전 요구 사항

  • Ceph Object Gateway가 설치된 실행 중인 Red Hat Ceph Storage 클러스터
  • Docker 또는 Podman이 설치되어 있어야 합니다.
  • 생성된 버킷입니다.
  • 오브젝트가 업로드됩니다.

프로세스

  1. Trino 및 hive를 배포합니다.

    예제

    [cephuser@host01 ~]$ git clone https://github.com/ceph/s3select.git
    [cephuser@host01 ~]$ cd s3select
    Copy to Clipboard Toggle word wrap

  2. S3 끝점, 액세스 키 및 시크릿 키로 hms_trino.yaml 파일을 수정합니다.

    예제

    [cephuser@host01 s3select]$ cat container/trino/hms_trino.yaml
    version: '3'
    services:
      hms:
        image: galsl/hms:dev
        container_name: hms
        environment:
          # S3_ENDPOINT the CEPH/RGW end-point-url
          - S3_ENDPOINT=http://rgw_ip:port
          - S3_ACCESS_KEY=abc
          - S3_SECRET_KEY=abc
        # the container starts with booting the hive metastore
        command: sh -c '. ~/.bashrc; start_hive_metastore'
        ports:
          - 9083:9083
        networks:
          - trino_hms
    
      trino:
        image: trinodb/trino:405
        container_name: trino
        volumes:
          # the trino directory contains the necessary configuration
          - ./trino:/etc/trino
        ports:
          - 8080:8080
        networks:
          - trino_hms
    
    networks:
      trino_hm
    Copy to Clipboard Toggle word wrap

  3. S3 끝점, 액세스 키 및 시크릿 키로 hive.properties 파일을 수정합니다.

    예제

    [cephuser@host01 s3select]$ cat container/trino/trino/catalog/hive.properties
    connector.name=hive
    hive.metastore.uri=thrift://hms:9083
    
    #hive.metastore.warehouse.dir=s3a://hive/
    
    hive.allow-drop-table=true
    hive.allow-rename-table=true
    hive.allow-add-column=true
    hive.allow-drop-column=true
    hive.allow-rename-column=true
    
    hive.non-managed-table-writes-enabled=true
    hive.s3select-pushdown.enabled=true
    hive.s3.aws-access-key=abc
    hive.s3.aws-secret-key=abc
    
    # should modify per s3-endpoint-url
    hive.s3.endpoint=http://rgw_ip:port
    #hive.s3.max-connections=1
    #hive.s3select-pushdown.max-connections=1
    
    hive.s3.connect-timeout=100s
    hive.s3.socket-timeout=100s
    hive.max-splits-per-second=10000
    hive.max-split-size=128MB
    Copy to Clipboard Toggle word wrap

  4. Trino 컨테이너를 시작하여 Ceph Object Gateway를 통합합니다.

    예제

    [cephuser@host01 s3select]$ sudo docker compose -f ./container/trino/hms_trino.yaml up -d
    Copy to Clipboard Toggle word wrap

  5. 통합을 확인합니다.

    예제

    [cephuser@host01 s3select]$ sudo docker exec -it trino /bin/bash
    trino@66f753905e82:/$ trino
    trino> create schema hive.csvbkt1schema;
    trino> create table hive.csvbkt1schema.polariondatacsv(c1 varchar,c2 varchar, c3 varchar, c4 varchar, c5 varchar, c6 varchar, c7 varchar, c8 varchar, c9 varchar) WITH ( external_location = 's3a://csvbkt1/',format = 'CSV');
    trino> select * from hive.csvbkt1schema.polariondatacsv;
    Copy to Clipboard Toggle word wrap

    참고

    외부 위치는 파일 끝부분이 아닌 버킷 이름 또는 디렉터리를 가리켜야 합니다.

4장. Ceph Object Gateway 및 Swift API

개발자는 Swift API 데이터 액세스 모델과 호환되는 RESTful API(애플리케이션 프로그래밍 인터페이스)를 사용할 수 있습니다. Ceph Object Gateway를 통해 Red Hat Ceph Storage 클러스터에 저장된 버킷과 오브젝트를 관리할 수 있습니다.

다음 표에서는 현재 Swift 기능 기능에 대한 지원 상태를 설명합니다.

Expand
표 4.1. 기능
기능상태주석

인증

지원됨

 

계정 메타데이터 가져오기

지원됨

사용자 정의 메타데이터 없음

Swift ACL

지원됨

Swift ACL의 하위 집합 지원

컨테이너 목록

지원됨

 

컨테이너의 오브젝트 나열

지원됨

 

컨테이너 생성

지원됨

 

컨테이너 삭제

지원됨

 

컨테이너 메타데이터 가져오기

지원됨

 

컨테이너 메타데이터 추가/업데이트

지원됨

 

컨테이너 메타데이터 삭제

지원됨

 

오브젝트 가져오기

지원됨

 

오브젝트 생성/업데이트

지원됨

 

대규모 오브젝트 생성

지원됨

 

오브젝트 삭제

지원됨

 

오브젝트 복사

지원됨

 

오브젝트 메타데이터 가져오기

지원됨

 

오브젝트 메타데이터 추가/업데이트

지원됨

 

임시 URL 작업

지원됨

 

CORS

지원되지 않음

 

오브젝트 만료

지원됨

 

오브젝트 버전 지정

지원되지 않음

 

정적 웹사이트

지원되지 않음

 

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.

4.1. Swift API 제한 사항

중요

다음 제한 사항은 주의해서 사용해야 합니다. 하드웨어 선택과 관련된 영향이 있으므로 Red Hat 계정 팀과 항상 이러한 요구 사항을 논의해야 합니다.

  • Swift API를 사용할 때 최대 오브젝트 크기: 5GB
  • Swift API 사용 시 최대 메타데이터 크기: 오브젝트에 적용할 수 있는 사용자 메타데이터의 총 크기에 대해 정의된 제한이 없지만 단일 HTTP 요청은 16,000바이트로 제한됩니다.

4.2. Swift 사용자 만들기

Swift 인터페이스를 테스트하려면 Swift 하위 사용자를 만듭니다. Swift 사용자를 만드는 것은 2단계 프로세스입니다. 첫 번째 단계는 사용자를 생성하는 것입니다. 두 번째 단계는 시크릿 키를 생성하는 것입니다.

참고

다중 사이트 배포에서 master 영역 그룹의 마스터 영역에 항상 호스트에 사용자를 생성합니다.

사전 요구 사항

  • Ceph Object Gateway 설치
  • Ceph Object Gateway 노드에 대한 루트 수준 액세스.

프로세스

  1. Swift 사용자를 만듭니다.

    구문

    radosgw-admin subuser create --uid=NAME --subuser=NAME:swift --access=full
    Copy to Clipboard Toggle word wrap

    NAME 을 Swift 사용자 이름으로 교체합니다. 예를 들면 다음과 같습니다.

    예제

    [root@host01 ~]# radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full
    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [
            {
                "id": "testuser:swift",
                "permissions": "full-control"
            }
        ],
        "keys": [
            {
                "user": "testuser",
                "access_key": "O8JDE41XMI74O185EHKD",
                "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6"
            }
        ],
        "swift_keys": [
            {
                "user": "testuser:swift",
                "secret_key": "13TLtdEW7bCqgttQgPzxFxziu0AgabtOc6vM8DLA"
            }
        ],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }
    Copy to Clipboard Toggle word wrap

  2. 시크릿 키를 생성합니다.

    구문

    radosgw-admin key create --subuser=NAME:swift --key-type=swift --gen-secret
    Copy to Clipboard Toggle word wrap

    NAME 을 Swift 사용자 이름으로 교체합니다. 예를 들면 다음과 같습니다.

    예제

    [root@host01 ~]# radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [
            {
                "id": "testuser:swift",
                "permissions": "full-control"
            }
        ],
        "keys": [
            {
                "user": "testuser",
                "access_key": "O8JDE41XMI74O185EHKD",
                "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6"
            }
        ],
        "swift_keys": [
            {
                "user": "testuser:swift",
                "secret_key": "a4ioT4jEP653CDcdU8p4OuhruwABBRZmyNUbnSSt"
            }
        ],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }
    Copy to Clipboard Toggle word wrap

4.3. 사용자 인증 Swift

사용자를 인증하려면 헤더에 X-Auth-UserX-Auth-Key 를 포함하는 요청을 만듭니다.

구문

GET /auth HTTP/1.1
Host: swift.example.com
X-Auth-User: johndoe
X-Auth-Key: R7UUOLFDI2ZI9PRCQ53K
Copy to Clipboard Toggle word wrap

응답 예

HTTP/1.1 204 No Content
Date: Mon, 16 Jul 2012 11:05:33 GMT
Server: swift
X-Storage-Url: https://swift.example.com
X-Storage-Token: UOlCCC8TahFKlWuv9DB09TWHF0nDjpPElha0kAa
Content-Length: 0
Content-Type: text/plain; charset=UTF-8
Copy to Clipboard Toggle word wrap

참고

인증 중에 X-Storage-Url 값을 사용하여 GET 요청을 실행하여 Ceph의 Swift 호환 서비스에 대한 데이터를 검색할 수 있습니다.

4.4. Swift 컨테이너 작업

개발자는 Ceph Object Gateway를 통해 Swift API(애플리케이션 프로그래밍 인터페이스)를 사용하여 컨테이너 작업을 수행할 수 있습니다. 컨테이너를 나열, 생성, 업데이트 및 삭제할 수 있습니다. 컨테이너의 메타데이터를 추가하거나 업데이트할 수도 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.

4.4.1. Swift 컨테이너 작업

컨테이너는 데이터 오브젝트를 저장하는 메커니즘입니다. 계정에는 여러 컨테이너가 있을 수 있지만 컨테이너 이름은 고유해야 합니다. 이 API를 사용하면 클라이언트가 컨테이너를 생성하고, 액세스 제어 및 메타데이터를 설정하고, 컨테이너 콘텐츠를 검색하고, 컨테이너를 삭제할 수 있습니다. 이 API는 특정 사용자 계정의 정보와 관련된 요청을 만들기 때문에 컨테이너의 액세스 제어가 의도적으로 액세스되지 않는 한, 즉 익명 요청을 허용하는 경우 이 API의 모든 요청을 인증해야 합니다.

참고

Amazon S3 API는 'bucket'이라는 용어를 사용하여 데이터 컨테이너를 설명합니다. 누군가가 Swift API 내에서 'bucket'을 참조하는 경우 'bucket'이라는 용어는 'container'라는 용어와 동일하게 해석될 수 있습니다.

오브젝트 스토리지의 한 측면은 계층적 경로 또는 디렉터리를 지원하지 않는다는 것입니다. 대신 각 컨테이너에 오브젝트가 있을 수 있는 하나 이상의 컨테이너로 구성된 하나의 수준을 지원합니다. RADOS 게이트웨이의 Swift 호환 API는 'pseudo-hierarchical containers'의 개념을 지원합니다. 이는 오브젝트 이름 지정을 사용하여 컨테이너 또는 디렉터리 계층 구조를 실제로 스토리지 시스템에 구현하지 않고 사용하는 수단입니다. 예를 들어, photos/buildings/empire-state. Cryostat와 같이 의사 계층 이름으로 오브젝트의 이름을 지정할 수 있지만 컨테이너 이름에는 슬래시(/) 문자가 포함될 수 없습니다.

중요

대용량 오브젝트를 버전이 지정된 Swift 컨테이너에 업로드할 때 python-swiftclient 유틸리티와 함께 --leave-segments 옵션을 사용합니다. --leave-segments 를 사용하지 않는 경우 매니페스트 파일을 덮어씁니다. 결과적으로 기존 오브젝트를 덮어쓰므로 데이터가 손실됩니다.

4.4.2. Swift에서 컨테이너의 ACL(액세스 제어 목록) 업데이트

사용자가 컨테이너를 생성하면 기본적으로 사용자는 컨테이너에 대한 읽기 및 쓰기 액세스 권한을 갖습니다. 다른 사용자가 컨테이너의 콘텐츠를 읽거나 컨테이너에 쓸 수 있도록 하려면 사용자를 구체적으로 활성화해야 합니다. X-Container-Read 또는 X-Container-Write 설정에서 * 를 지정하면 모든 사용자가 컨테이너에서 읽거나 쓸 수 있습니다. 설정 * 은 컨테이너를 공개합니다. 이를 통해 익명 사용자가 컨테이너에서 읽거나 쓸 수 있습니다.

구문

POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Read: *
X-Container-Write: UID1, UID2, UID3
Copy to Clipboard Toggle word wrap

요청 헤더

X-Container-Read
설명
컨테이너에 대한 읽기 권한이 있는 사용자 ID입니다.
유형
사용자 ID의 쉼표로 구분된 문자열 값입니다.
필수 항목
없음
x-Container-Write
설명
컨테이너에 대한 쓰기 권한이 있는 사용자 ID입니다.
유형
사용자 ID의 쉼표로 구분된 문자열 값입니다.
필수 항목
없음

4.4.3. Swift 목록 컨테이너 목록

API 버전을 지정하는 GET 요청으로, 계정은 특정 사용자 계정에 대한 컨테이너 목록을 반환합니다. 요청이 특정 사용자의 컨테이너를 반환하므로 요청에 인증 토큰이 필요합니다. 요청은 익명으로 만들 수 없습니다.

구문

GET /API_VERSION/ACCOUNT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

요청 매개변수

제한
설명
결과 수를 지정된 값으로 제한합니다.
유형
정수
유효한 값
해당 없음
필수 항목
제공됨
format
설명
결과 수를 지정된 값으로 제한합니다.
유형
정수
유효한 값
JSON 또는 xml
필수 항목
없음
마커
설명
마커 값보다 큰 결과 목록을 반환합니다.
유형
문자열
유효한 값
해당 없음
필수 항목
없음

응답에는 컨테이너 목록이 포함되어 있거나 HTTP 204 응답 코드가 반환됩니다.

응답 엔터티

계정
설명
계정 정보 목록입니다.
유형
컨테이너
container
설명
컨테이너 목록입니다.
유형
컨테이너
name
설명
컨테이너의 이름입니다.
유형
문자열
바이트
설명
컨테이너의 크기입니다.
유형
정수

4.4.4. Swift에서 컨테이너의 오브젝트 나열

컨테이너 내의 오브젝트를 나열하려면 API 버전, 계정 및 컨테이너 이름을 사용하여 GET 요청을 만듭니다. 쿼리 매개변수를 지정하여 전체 목록을 필터링하거나 매개변수를 벗어나 컨테이너에 저장된 처음 10,000개의 개체 이름 목록을 반환할 수 있습니다.

구문

GET /API_VERSION/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

요청 매개변수

format
설명
결과 수를 지정된 값으로 제한합니다.
유형
정수
유효한 값
JSON 또는 xml
필수 항목
없음
prefix
설명
결과 세트를 지정된 접두사로 시작하는 오브젝트로 제한합니다.
유형
문자열
유효한 값
해당 없음
필수 항목
없음
마커
설명
마커 값보다 큰 결과 목록을 반환합니다.
유형
문자열
유효한 값
해당 없음
필수 항목
없음
제한
설명
결과 수를 지정된 값으로 제한합니다.
유형
정수
유효한 값
0 - 10,000
필수 항목
없음
구분 기호
설명
접두사와 나머지 개체 이름의 구분 기호입니다.
유형
문자열
유효한 값
해당 없음
필수 항목
없음
경로
설명
오브젝트의 의사 계층적 경로입니다.
유형
문자열
유효한 값
해당 없음
필수 항목
없음

응답 엔터티

container
설명
컨테이너입니다.
유형
컨테이너
object
설명
컨테이너 내의 오브젝트입니다.
유형
컨테이너
name
설명
컨테이너 내의 오브젝트 이름입니다.
유형
문자열
hash
설명
오브젝트 콘텐츠의 해시 코드입니다.
유형
문자열
last_modified
설명
오브젝트의 콘텐츠가 마지막으로 수정된 시간입니다.
유형
날짜
content_type
설명
오브젝트 내의 콘텐츠 유형입니다.
유형
문자열

4.4.5. Swift에서 컨테이너 생성

새 컨테이너를 생성하려면 API 버전, 계정 및 새 컨테이너의 이름을 사용하여 PUT 요청을 만듭니다. 컨테이너 이름은 고유해야 하며 forward-slash(/) 문자를 포함하지 않아야 하며 256바이트 미만이어야 합니다. 요청에 액세스 제어 헤더 및 메타데이터 헤더를 포함할 수 있습니다. 배치 풀 세트의 키를 식별하는 스토리지 정책을 포함할 수도 있습니다. 예를 들어 radosgw-admin zone get 을 실행하여 placement_pools 에서 사용 가능한 키 목록을 확인합니다. 스토리지 정책을 사용하면 컨테이너의 특수 풀 세트(예: SSD 기반 스토리지)를 지정할 수 있습니다. 작업은 멱등입니다. 이미 존재하는 컨테이너를 생성하라는 요청을 하면 HTTP 202 반환 코드와 함께 반환되지만 다른 컨테이너는 생성하지 않습니다.

구문

PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Read: COMMA_SEPARATED_UIDS
X-Container-Write: COMMA_SEPARATED_UIDS
X-Container-Meta-KEY:VALUE
X-Storage-Policy: PLACEMENT_POOLS_KEY
Copy to Clipboard Toggle word wrap

headers

X-Container-Read
설명
컨테이너에 대한 읽기 권한이 있는 사용자 ID입니다.
유형
사용자 ID의 쉼표로 구분된 문자열 값입니다.
필수 항목
없음
x-Container-Write
설명
컨테이너에 대한 쓰기 권한이 있는 사용자 ID입니다.
유형
사용자 ID의 쉼표로 구분된 문자열 값입니다.
필수 항목
없음
X-Container-Meta-KEY
설명
임의의 문자열 값을 사용하는 사용자 정의 메타데이터 키입니다.
유형
문자열
필수 항목
없음
x-Storage-Policy
설명
Ceph Object Gateway의 placement_pools 에서 스토리지 정책을 식별하는 키입니다. radosgw-admin 영역을 실행하면 사용 가능한 키에 대해 가져올 수 있습니다.
유형
문자열
필수 항목
없음

동일한 이름의 컨테이너가 이미 존재하고 사용자가 컨테이너 소유자인 경우 작업이 성공합니다. 그렇지 않으면 작업이 실패합니다.

HTTP 응답

409
상태 코드
BucketAlreadyExists
설명
컨테이너는 이미 다른 사용자의 소유권 아래에 있습니다.

4.4.6. Swift 컨테이너 삭제

컨테이너를 삭제하려면 API 버전, 계정 및 컨테이너 이름을 사용하여 DELETE 요청을 만듭니다. 컨테이너는 비어 있어야 합니다. 컨테이너가 비어 있는지 확인하려면 컨테이너에 대해 HEAD 요청을 실행합니다. 컨테이너를 성공적으로 제거하면 컨테이너 이름을 재사용할 수 있습니다.

구문

DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

HTTP 응답

204
상태 코드
NoContent
설명
컨테이너가 제거되었습니다.

4.4.7. Swift에서 컨테이너 메타데이터 추가 또는 업데이트

컨테이너에 메타데이터를 추가하려면 API 버전, 계정 및 컨테이너 이름을 사용하여 POST 요청을 만듭니다. 메타데이터를 추가하거나 업데이트하려면 컨테이너에 대한 쓰기 권한이 있어야 합니다.

구문

POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Meta-Color: red
X-Container-Meta-Taste: salty
Copy to Clipboard Toggle word wrap

요청 헤더

X-Container-Meta-KEY
설명
임의의 문자열 값을 사용하는 사용자 정의 메타데이터 키입니다.
유형
문자열
필수 항목
없음

4.5. Swift 오브젝트 작업

개발자는 Ceph Object Gateway를 통해 Swift API(애플리케이션 프로그래밍 인터페이스)를 사용하여 오브젝트 작업을 수행할 수 있습니다. 오브젝트를 나열, 생성, 업데이트 및 삭제할 수 있습니다. 오브젝트의 메타데이터를 추가하거나 업데이트할 수도 있습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트입니다.

4.5.1. Swift 오브젝트 작업

오브젝트는 데이터 및 메타데이터를 저장하기 위한 컨테이너입니다. 컨테이너에 많은 오브젝트가 있을 수 있지만 오브젝트 이름은 고유해야 합니다. 이 API를 사용하면 클라이언트는 오브젝트를 생성하고, 액세스 제어 및 메타데이터를 설정하고, 오브젝트의 데이터 및 메타데이터를 검색하고, 오브젝트를 삭제할 수 있습니다. 이 API는 특정 사용자 계정의 정보와 관련된 요청을 수행하기 때문에 이 API의 모든 요청을 인증해야 합니다. 컨테이너 또는 오브젝트의 액세스 제어가 의도적으로 공개적으로 액세스되지 않는 한, 이는 익명 요청을 허용합니다.

4.5.2. Swift에서 오브젝트를 가져옵니다.

오브젝트를 검색하려면 API 버전, 계정, 컨테이너 및 오브젝트 이름을 사용하여 GET 요청을 만듭니다. 컨테이너 내의 오브젝트를 검색하려면 컨테이너에 대한 읽기 권한이 있어야 합니다.

구문

GET /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

요청 헤더

범위
설명
오브젝트 콘텐츠의 하위 집합을 검색하려면 바이트 범위를 지정할 수 있습니다.
유형
날짜
필수 항목
없음
if- Cryostat-Since
설명
소스 오브젝트의 last_modified 속성의 날짜 및 시간 이후 수정된 경우에만 복사합니다.
유형
날짜
필수 항목
없음
if-Unmodified-Since
설명
소스 오브젝트의 last_modified 속성의 날짜와 시간 이후 수정되지 않은 경우에만 복사합니다.
유형
날짜
필수 항목
없음
copy-If-Match
설명
요청의 ETag가 소스 오브젝트의 ETag와 일치하는 경우에만 복사합니다.
유형
etag
필수 항목
없음
copy-If-None-Match
설명
요청의 ETag 가 소스 오브젝트의 ETag와 일치하지 않는 경우에만 복사합니다.
유형
etag
필수 항목
없음

응답 헤더

content-Range
설명
오브젝트 콘텐츠 하위 집합의 범위입니다. request에 range 헤더 필드가 지정된 경우에만 반환됩니다.

4.5.3. Swift에서 오브젝트를 생성하거나 업데이트합니다.

새 오브젝트를 생성하려면 API 버전, 계정, 컨테이너 이름 및 새 오브젝트 이름을 사용하여 PUT 요청을 만듭니다. 오브젝트를 생성하거나 업데이트하려면 컨테이너에 대한 쓰기 권한이 있어야 합니다. 오브젝트 이름은 컨테이너 내에서 고유해야 합니다. PUT 요청은 멱등이 아니므로 고유한 이름을 사용하지 않으면 요청이 오브젝트를 업데이트합니다. 그러나 오브젝트 이름에 pseudo-hierarchical 구문을 사용하여 다른 pseudo-hierarchical 디렉터리 아래에 있는 경우 동일한 이름의 다른 오브젝트와 구별할 수 있습니다. 요청에 액세스 제어 헤더 및 메타데이터 헤더를 포함할 수 있습니다.

구문

PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

요청 헤더

etag
설명
오브젝트 콘텐츠의 MD5 해시입니다. 권장됨.
유형
문자열
유효한 값
해당 없음
필수 항목
없음
content-Type
설명
오브젝트 콘텐츠의 MD5 해시입니다.
유형
문자열
유효한 값
해당 없음
필수 항목
없음
transfer-Encoding
설명
개체가 더 큰 집계 개체의 일부인지 여부를 나타냅니다.Indicates whether the object is part of a larger aggregate object.
유형
문자열
유효한 값
청크
필수 항목
없음

4.5.4. Swift 오브젝트 삭제

오브젝트를 삭제하려면 API 버전, 계정, 컨테이너 및 오브젝트 이름을 사용하여 DELETE 요청을 만듭니다. 해당 오브젝트를 삭제하려면 컨테이너에 대한 쓰기 권한이 있어야 합니다. 오브젝트를 성공적으로 삭제하면 오브젝트 이름을 재사용할 수 있습니다.

구문

DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

4.5.5. Swift에서 오브젝트 복사

오브젝트를 복사하면 오브젝트의 서버 측 복사본을 만들 수 있으므로 다른 컨테이너에서 다운로드하여 업로드할 필요가 없습니다. 한 오브젝트의 콘텐츠를 다른 오브젝트로 복사하려면 API 버전, 계정 및 컨테이너 이름을 사용하여 PUT 요청 또는 COPY 요청을 수행할 수 있습니다.

PUT 요청의 경우 요청에 있는 대상 컨테이너 및 오브젝트 이름과 요청 헤더의 소스 컨테이너 및 오브젝트를 사용합니다.

복사 요청의 경우 요청에서 소스 컨테이너 및 오브젝트와 요청 헤더에 있는 대상 컨테이너 및 오브젝트를 사용합니다. 오브젝트를 복사하려면 컨테이너에 대한 쓰기 권한이 있어야 합니다. 대상 오브젝트 이름은 컨테이너 내에서 고유해야 합니다. 요청은 멱등이 아니므로 고유한 이름을 사용하지 않으면 요청이 대상 오브젝트를 업데이트합니다. 오브젝트 이름에 pseudo-hierarchical 구문을 사용하여 대상 오브젝트가 다른 pseudo-hierarchical 디렉터리 아래에 있는 경우 동일한 이름의 소스 오브젝트와 구별할 수 있습니다. 요청에 액세스 제어 헤더 및 메타데이터 헤더를 포함할 수 있습니다.

구문

PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
X-Copy-From: TENANT:SOURCE_CONTAINER/SOURCE_OBJECT
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

또는 다음을 수행합니다.

구문

COPY /API_VERSION/ACCOUNT/TENANT:SOURCE_CONTAINER/SOURCE_OBJECT HTTP/1.1
Destination: TENANT:DEST_CONTAINER/DEST_OBJECT
Copy to Clipboard Toggle word wrap

요청 헤더

X-Copy-From
설명
PUT 요청과 함께 소스 컨테이너/오브젝트 경로를 정의합니다.
유형
문자열
필수 항목
예, PUT 을 사용하는 경우입니다.
대상
설명
COPY 요청과 함께 사용하여 대상 컨테이너/오브젝트 경로를 정의합니다.
유형
문자열
필수 항목
예, COPY 를 사용하는 경우 .
if- Cryostat-Since
설명
소스 오브젝트의 last_modified 속성의 날짜 및 시간 이후 수정된 경우에만 복사합니다.
유형
날짜
필수 항목
없음
if-Unmodified-Since
설명
소스 오브젝트의 last_modified 속성의 날짜와 시간 이후 수정되지 않은 경우에만 복사합니다.
유형
날짜
필수 항목
없음
copy-If-Match
설명
요청의 ETag가 소스 오브젝트의 ETag와 일치하는 경우에만 복사합니다.
유형
etag
필수 항목
없음
copy-If-None-Match
설명
요청의 ETag 가 소스 오브젝트의 ETag와 일치하지 않는 경우에만 복사합니다.
유형
etag
필수 항목
없음

4.5.6. Swift get 오브젝트 메타데이터

오브젝트의 메타데이터를 검색하려면 API 버전, 계정, 컨테이너 및 오브젝트 이름을 사용하여 HEAD 요청을 만듭니다. 컨테이너 내의 오브젝트에서 메타데이터를 검색하려면 컨테이너에 대한 읽기 권한이 있어야 합니다. 이 요청은 오브젝트 자체에 대한 요청과 동일한 헤더 정보를 반환하지만 오브젝트의 데이터를 반환하지는 않습니다.

구문

HEAD /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

4.5.7. Swift 오브젝트 메타데이터 추가 또는 업데이트

오브젝트에 메타데이터를 추가하려면 API 버전, 계정, 컨테이너 및 오브젝트 이름을 사용하여 POST 요청을 만듭니다. 메타데이터를 추가하거나 업데이트하려면 상위 컨테이너에 대한 쓰기 권한이 있어야 합니다.

구문

POST /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

요청 헤더

X-Object-Meta-KEY
설명
임의의 문자열 값을 사용하는 사용자 정의 메타 데이터 키입니다.
유형
문자열
필수 항목
없음

4.6. Swift 임시 URL 작업

임시 액세스를 허용하도록 temp url 기능은 radosgw 의 swift 끝점에서 지원됩니다. 예를 들어 GET 요청은 자격 증명을 공유할 필요 없이 오브젝트에 요청합니다.

이 기능의 경우 처음에 X-Account-Meta-Temp-URL-Key 의 값을 설정하고 선택적으로 X-Account-Meta-Temp-URL-Key-2 를 설정해야 합니다. Temp URL 기능은 이러한 비밀 키에 대해 HMAC-SHA1 서명을 사용합니다.

4.7. Swift는 임시 URL 오브젝트를 가져옵니다.

임시 URL은 다음 요소를 포함하는 암호화 HMAC-SHA1 서명을 사용합니다.

  • 요청 메서드의 값, 예를 들어 "GET"
  • 만료 시간, epoch 이후의 초 형식으로, 즉 Unix 시간
  • "v1" 이후의 요청 경로입니다.

위의 항목은 새로 추가된 줄로 정규화되며 이전에 게시된 임시 URL 키 중 하나에 대해 SHA-1 해시 알고리즘을 사용하여 HMAC가 생성됩니다.

위 내용을 보여주는 샘플 python 스크립트는 다음과 같습니다.

예제

import hmac
from hashlib import sha1
from time import time

method = 'GET'
host = 'https://objectstore.example.com'
duration_in_seconds = 300  # Duration for which the url is valid
expires = int(time() + duration_in_seconds)
path = '/v1/your-bucket/your-object'
key = 'secret'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
hmac_body = hmac.new(key, hmac_body, sha1).hexdigest()
sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
     host=host, path=path, sig=sig, expires=expires)
print rest_uri
Copy to Clipboard Toggle word wrap

출력 예

https://objectstore.example.com/v1/your-bucket/your-object?temp_url_sig=ff4657876227fc6025f04fcf1e82818266d022c6&temp_url_expires=1423200992
Copy to Clipboard Toggle word wrap

4.8. Swift POST 임시 URL 키

필요한 Key를 사용하여 swift 계정에 대한 POST 요청은 계정에 임시 URL 액세스를 제공할 수 있는 계정에 대한 시크릿 임시 URL 키를 설정합니다. 최대 두 개의 키가 지원되고 서명이 두 키(있는 경우)에 대해 확인되므로 임시 URL을 무효화하지 않고 키를 순환할 수 있습니다.

구문

POST /API_VERSION/ACCOUNT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
Copy to Clipboard Toggle word wrap

요청 헤더

X-Account-Meta-Temp-URL-Key
설명
임의의 문자열 값을 사용하는 사용자 정의 키입니다.
유형
문자열
필수 항목
제공됨
X-Account-Meta-Temp-URL-Key-2
설명
임의의 문자열 값을 사용하는 사용자 정의 키입니다.
유형
문자열
필수 항목
없음

4.9. Swift 멀티 테넌시 컨테이너 작업

클라이언트 애플리케이션이 컨테이너에 액세스하면 항상 특정 사용자의 자격 증명으로 작동합니다. Red Hat Ceph Storage 클러스터에서 모든 사용자는 테넌트에 속합니다. 결과적으로 테넌트가 명시적으로 지정되지 않은 경우 모든 컨테이너 작업에는 해당 컨텍스트에 암시적 테넌트가 있습니다. 따라서 참조된 컨테이너와 동일한 테넌트에 속하는 경우 멀티 테넌시는 이전 릴리스와 완전히 호환됩니다.

명시적 테넌트를 지정하는 데 사용되는 확장 기능은 사용된 프로토콜 및 인증 시스템에 따라 다릅니다.

콜론 문자는 테넌트와 컨테이너를 구분하므로 샘플 URL은 다음과 같습니다.

예제

https://rgw.domain.com/tenant:container
Copy to Clipboard Toggle word wrap

반대로 create_container() 메서드에서는 컨테이너 메서드 자체에서 테넌트와 컨테이너를 간단히 분리합니다.

예제

create_container("tenant:container")
Copy to Clipboard Toggle word wrap

부록 A. Ceph RESTful API 사양

스토리지 관리자는 Ceph RESTful API 엔드포인트를 통해 다양한 Ceph 하위 시스템에 액세스할 수 있습니다. 이는 사용 가능한 Ceph RESTful API 방법에 대한 참조 가이드입니다.

사용 가능한 Ceph API 끝점:

사전 요구 사항

  • RESTful API 사용 방법에 대한 이해.
  • 정상 실행 Red Hat Ceph Storage 클러스터.
  • Ceph Manager 대시보드 모듈이 활성화되어 있습니다.

A.1. Ceph 요약

Ceph RESTful API 요약 엔드포인트를 사용하여 Ceph 요약 세부 정보를 표시하는 메서드 참조입니다.

GET /api/summary
설명
Ceph 세부 정보 요약을 표시합니다.
예제
GET /api/summary HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.2. 인증

Ceph RESTful API auth 엔드포인트를 사용하여 Red Hat Ceph Storage로 세션을 시작하기 위한 메서드 참조입니다.

POST /api/auth
curl 예
curl -i -k --location -X POST 'https://192.168.0.44:8443/api/auth' -H 'Accept: application/vnd.ceph.api.v1.0+json' -H 'Content-Type: application/json' --data '{"password": "admin@123", "username": "admin"}'
Copy to Clipboard Toggle word wrap
예제
 POST /api/auth HTTP/1.1
 Host: example.com
 Content-Type: application/json

 {
     "password": "STRING",
     "username": "STRING"
 }
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/auth/check
설명
인증 토큰에 대한 요구 사항을 확인합니다.
예제
POST /api/auth/check?token=STRING HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "token": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/auth/logout
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.3. Ceph 파일 시스템

Ceph RESTful API cephfs 엔드포인트를 사용하여 Ceph File Systems(CephFS)를 관리하기 위한 메서드 참조입니다.

GET /api/cephfs
예제
GET /api/cephfs HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cephfs/FS_ID
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
예제
GET /api/cephfs/FS_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/cephfs/FS_ID/client/CLIENT_ID
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • CLIENT_ID 를 Ceph 클라이언트 ID 문자열로 교체합니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cephfs/FS_ID/clients
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
예제
GET /api/cephfs/FS_ID/clients HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cephfs/FS_ID/get_root_directory
설명
ls_dir API 호출을 사용하여 가져올 수 없는 루트 디렉터리입니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
예제
GET /api/cephfs/FS_ID/get_root_directory HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cephfs/FS_ID/ls_dir
설명
지정된 경로의 디렉터리를 나열합니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • 쿼리:

    • path - 목록을 시작할 문자열 값입니다. 지정되지 않은 경우 기본 경로는 / 입니다.
    • 깊이 - 디렉터리 트리 아래로 이동할 단계 수를 지정하는 정수 값입니다.
예제
GET /api/cephfs/FS_ID/ls_dir HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cephfs/FS_ID/mds_counters
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • 쿼리:

    • 카운터 - 정수 값입니다.
예제
GET /api/cephfs/FS_ID/mds_counters HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cephfs/FS_ID/quota
설명
지정된 경로의 CephFS 할당량을 표시합니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • 쿼리:

    • path - 디렉터리 경로를 지정하는 필수 문자열 값입니다.
예제
GET /api/cephfs/FS_ID/quota?path=STRING HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/cephfs/FS_ID/quota
설명
지정된 경로에 대한 할당량을 설정합니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • max_bytes - 바이트 제한을 정의하는 문자열 값입니다.
  • max_files - 파일 제한을 정의하는 문자열 값입니다.
  • path - 디렉터리 또는 파일의 경로를 정의하는 문자열 값입니다.
예제
PUT /api/cephfs/FS_ID/quota HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "max_bytes": "STRING",
    "max_files": "STRING",
    "path": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/cephfs/FS_ID/snapshot
설명
snapsnot를 제거합니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • 쿼리:

    • name - 스냅샷 이름을 지정하는 필수 문자열 값입니다.
    • path - 디렉터리의 경로를 정의하는 필수 문자열 값입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/cephfs/FS_ID/snapshot
설명
스냅샷을 생성합니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • name - 스냅샷 이름을 지정하는 문자열 값입니다. 이름을 지정하지 않으면 RFC3339 UTC 형식의 현재 시간을 사용하는 이름이 생성됩니다.
  • path - 디렉터리의 경로를 정의하는 문자열 값입니다.
예제
POST /api/cephfs/FS_ID/snapshot HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "STRING",
    "path": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/cephfs/FS_ID/tree
설명
디렉터리를 제거합니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • 쿼리:

    • path - 디렉터리의 경로를 정의하는 필수 문자열 값입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/cephfs/FS_ID/tree
설명
디렉터리를 생성합니다.
매개 변수
  • FS_ID 를 Ceph File System ID 문자열로 바꿉니다.
  • path - 디렉터리의 경로를 정의하는 문자열 값입니다.
예제
POST /api/cephfs/FS_ID/tree HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "path": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.4. 스토리지 클러스터 구성

Ceph RESTful API cluster_conf 엔드포인트를 사용하여 Red Hat Ceph Storage 클러스터를 관리하는 메서드 참조입니다.

GET /api/cluster_conf
예제
GET /api/cluster_conf HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/cluster_conf
예제
POST /api/cluster_conf HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "STRING",
    "value": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/cluster_conf
예제
PUT /api/cluster_conf HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "options": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cluster_conf/filter
설명
이름으로 스토리지 클러스터 구성을 표시합니다.
매개 변수
  • 쿼리:

    • names - 구성 옵션 이름의 문자열 값입니다.
예제
GET /api/cluster_conf/filter HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/cluster_conf/NAME
매개 변수
  • NAME 을 스토리지 클러스터 구성 이름으로 바꿉니다.
  • 쿼리:

    • 섹션 - 필수 문자열 값입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/cluster_conf/NAME
매개 변수
  • NAME 을 스토리지 클러스터 구성 이름으로 바꿉니다.
예제
GET /api/cluster_conf/NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.5. CRUSH 규칙

Ceph RESTful API crush_rule 엔드포인트를 사용하여 CRUSH 규칙을 관리하는 메서드 참조입니다.

GET /api/crush_rule
설명
CRUSH 규칙 구성을 나열합니다.
예제
GET /api/crush_rule HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/crush_rule
예제
POST /api/crush_rule HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "device_class": "STRING",
    "failure_domain": "STRING",
    "name": "STRING",
    "root": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/crush_rule/NAME
매개 변수
  • NAME 을 규칙 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/crush_rule/NAME
매개 변수
  • NAME 을 규칙 이름으로 바꿉니다.
예제
GET /api/crush_rule/NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.6. 코드 프로필 삭제

Ceph RESTful API erasure_code_profile 엔드포인트를 사용하여 삭제 코딩 프로필을 관리하기 위한 메서드 참조입니다.

GET /api/erasure_code_profile
설명
삭제 코딩 된 프로필 정보를 나열합니다.
예제
GET /api/erasure_code_profile HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/erasure_code_profile
예제
POST /api/erasure_code_profile HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/erasure_code_profile/NAME
매개 변수
  • NAME 을 프로필 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/erasure_code_profile/NAME
매개 변수
  • NAME 을 프로필 이름으로 바꿉니다.
예제
GET /api/erasure_code_profile/NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인합니다.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.7. 기능 토글

Ceph RESTful API feature_toggles 엔드포인트를 사용하여 CRUSH 규칙을 관리하는 메서드 참조입니다.

GET /api/feature_toggles
설명
Red Hat Ceph Storage의 기능을 나열합니다.
예제
GET /api/feature_toggles HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.8. Grafana

Ceph RESTful API grafana 엔드포인트를 사용하여 Grafana를 관리하는 메서드 참조입니다.

POST /api/grafana/dashboards
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/grafana/url
설명
Grafana URL 인스턴스를 나열합니다.
예제
GET /api/grafana/url HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/grafana/validation/PARAMS
매개 변수
  • PARAMS 를 문자열 값으로 바꿉니다.
예제
GET /api/grafana/validation/PARAMS HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.9. 스토리지 클러스터 상태

Ceph RESTful API 상태 엔드포인트를 사용하여 스토리지 클러스터 상태 세부 정보 및 상태를 표시하는 메서드 참조입니다.

GET /api/health/full
예제
GET /api/health/full HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/health/minimal
설명
스토리지 클러스터의 최소 상태 보고서를 표시합니다.
예제
GET /api/health/minimal HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.10. 호스트

Ceph RESTful API 호스트 엔드포인트를 사용하여 노드 정보라고도 하는 호스트를 표시하는 메서드 참조입니다.

GET /api/host
설명
호스트 사양을 나열합니다.
매개 변수
  • 쿼리:

    • source - 호스트 소스의 문자열 값입니다.
예제
GET /api/host HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/host
예제
POST /api/host HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "hostname": "STRING",
    "status": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/host/HOST_NAME
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/host/HOST_NAME
설명
지정된 호스트에 대한 정보를 표시합니다.
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
예제
GET /api/host/HOST_NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/host/HOST_NAME
설명
지정된 호스트에 대한 정보를 업데이트합니다. 이 방법은 Ceph Orchestrator가 활성화된 경우에만 지원됩니다.
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
  • 강제 - 호스트가 유지 관리 모드로 전환되도록 강제 적용합니다.
  • 레이블 - 라벨 목록입니다.
  • 유지 관리 - 유지 관리 모드를 입력하거나 종료합니다.
  • update_labels - 레이블을 업데이트합니다.
예제
PUT /api/host/HOST_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "force": true,
    "labels": [
        "STRING"
    ],
    "maintenance": true,
    "update_labels": true
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/host/HOST_NAME/daemons
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
예제
GET /api/host/HOST_NAME/daemons HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/host/HOST_NAME/devices
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
예제
GET /api/host/HOST_NAME/devices HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/host/HOST_NAME/identify_device
설명
지정된 초 수의 장치 표시등을 전환하여 장치를 식별합니다.
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
  • 장치 - /dev/dm-0 또는 Cryostat 1234DEF567-1R1234_ABC8DE0Q 와 같은 장치 ID입니다.
  • duration - 장치의 gdd가 플래시해야 하는 시간(초)입니다.
예제
POST /api/host/HOST_NAME/identify_device HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "device": "STRING",
    "duration": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/host/HOST_NAME/inventory
설명
호스트의 인벤토리를 표시합니다.
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
  • 쿼리:

    • refresh - 비동기 새로 고침을 트리거하는 문자열 값입니다.
예제
GET /api/host/HOST_NAME/inventory HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/host/HOST_NAME/smart
매개 변수
  • HOST_NAME 을 노드 이름으로 바꿉니다.
예제
GET /api/host/HOST_NAME/smart HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.11. 로그

Ceph RESTful API 로그 끝점을 사용하여 로그 정보를 표시하는 메서드 참조입니다.

GET /api/logs/all
설명
모든 로그 구성을 확인합니다.
예제
GET /api/logs/all HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.12. Ceph Manager 모듈

Ceph RESTful API mgr/module 엔드포인트를 사용하여 Ceph Manager 모듈을 관리하는 메서드 참조입니다.

GET /api/mgr/module
설명
관리 모듈 목록을 확인합니다.
예제
GET /api/mgr/module HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/mgr/module/MODULE_NAME
설명
영구 구성 설정 값을 검색합니다.
매개 변수
  • MODULE_NAME 을 Ceph Manager 모듈 이름으로 교체합니다.
예제
GET /api/mgr/module/MODULE_NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/mgr/module/MODULE_NAME
설명
영구 구성 설정 값을 설정합니다.
매개 변수
  • MODULE_NAME 을 Ceph Manager 모듈 이름으로 교체합니다.
  • config - 모듈 옵션의 값입니다.
예제
PUT /api/mgr/module/MODULE_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "config": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/mgr/module/MODULE_NAME/disable
설명
지정된 Ceph Manager 모듈을 비활성화합니다.
매개 변수
  • MODULE_NAME 을 Ceph Manager 모듈 이름으로 교체합니다.
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/mgr/module/MODULE_NAME/enable
설명
지정된 Ceph Manager 모듈을 활성화합니다.
매개 변수
  • MODULE_NAME 을 Ceph Manager 모듈 이름으로 교체합니다.
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/mgr/module/MODULE_NAME/options
설명
지정된 Ceph Manager 모듈의 옵션을 확인합니다.
매개 변수
  • MODULE_NAME 을 Ceph Manager 모듈 이름으로 교체합니다.
예제
GET /api/mgr/module/MODULE_NAME/options HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.13. Ceph Monitor

Ceph RESTful API 모니터 엔드포인트를 사용하여 Ceph Monitor에 대한 정보를 표시하는 메서드 참조입니다.

GET /api/monitor
설명
Ceph Monitor 세부 정보를 확인합니다.
예제
GET /api/monitor HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.14. Ceph OSD

Ceph RESTful API osd 엔드포인트를 사용하여 Ceph OSD를 관리하는 메서드 참조입니다.

GET /api/osd
예제
GET /api/osd HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/osd
예제
POST /api/osd HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "data": "STRING",
    "method": "STRING",
    "tracking_id": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/flags
설명
Ceph OSD 플래그를 확인합니다.
예제
GET /api/osd/flags HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/osd/flags
설명
전체 스토리지 클러스터에 대해 Ceph OSD 플래그를 설정합니다.
매개 변수
  • recovery_deletes,sortbitwisepglog_hardlimit 플래그는 설정되지 않을 수 있습니다.
  • purged_snapshots 플래그를 설정할 수 없습니다.

    중요

    성공적인 작업을 위해서는 다음 4가지 플래그를 포함해야 합니다.

예제
PUT /api/osd/flags HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "flags": [
        "STRING"
    ]
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/flags/individual
설명
개별 Ceph OSD 플래그를 확인합니다.
예제
GET /api/osd/flags/individual HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/osd/flags/individual
설명
Ceph OSD의 개별 하위 집합에 대해 noout,noin,nodown, noup 플래그를 업데이트합니다.
예제
PUT /api/osd/flags/individual HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "flags": {
        "nodown": true,
        "noin": true,
        "noout": true,
        "noup": true
    },
    "ids": [
        1
    ]
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/safe_to_delete
매개 변수
  • 쿼리:

    • svc_ids - Ceph OSD 서비스 식별자의 필수 문자열입니다.
예제
GET /api/osd/safe_to_delete?svc_ids=STRING HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/safe_to_destroy
설명
Ceph OSD가 안전한지 확인합니다.
매개 변수
  • 쿼리:

    • ID - Ceph OSD 서비스 식별자의 필수 문자열입니다.
예제
GET /api/osd/safe_to_destroy?ids=STRING HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/osd/SVC_ID
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
  • 쿼리:

    • preserve_id - 문자열 값입니다.
    • force - 문자열 값입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/SVC_ID
설명
Ceph OSD에 대한 수집된 데이터를 반환합니다.
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
예제
GET /api/osd/SVC_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/osd/SVC_ID
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
예제
PUT /api/osd/SVC_ID HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "device_class": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/osd/SVC_ID/destroy
설명

Ceph OSD가 제거됨을 나타냅니다. Ceph OSD가 제거되기 전에 표시되어 있어야 합니다. 이 작업은 Ceph OSD 식별자를 그대로 유지하지만 Cephx 키, 구성 키 데이터 및 lockbox 키를 제거합니다.

주의

이 작업은 데이터를 영구적으로 읽을 수 없게 만듭니다.

매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/SVC_ID/devices
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
예제
GET /api/osd/SVC_ID/devices HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/SVC_ID/histogram
설명
Ceph OSD 히스토그램 데이터를 반환합니다.
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
예제
GET /api/osd/SVC_ID/histogram HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/osd/SVC_ID/mark
설명

Ceph OSD (, ,down, lost )로 표시합니다.

참고

손실 됨을 표시하기 전에 Ceph OSD를 down 으로 표시해야 합니다.

매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
예제
PUT /api/osd/SVC_ID/mark HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "action": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/osd/SVC_ID/purge
설명

CRUSH 맵에서 Ceph OSD를 제거합니다.

참고

제거하기 전에 Ceph OSD를 down 으로 표시해야 합니다.

매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/osd/SVC_ID/reweight
설명
Ceph OSD를 일시적으로 재중량합니다. Ceph OSD 표시되면 OSD의 weight가 0 으로 설정됩니다. Ceph OSD가 다시 표시되면 OSD의 weight가 1 로 설정됩니다.
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
예제
POST /api/osd/SVC_ID/reweight HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "weight": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/osd/SVC_ID/scrub
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
  • 쿼리:

    • deep - true 또는 false 부울 값입니다.
예제
POST /api/osd/SVC_ID/scrub HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "deep": true
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/osd/SVC_ID/smart
매개 변수
  • SVC_ID 를 Ceph OSD 서비스 식별자의 문자열 값으로 바꿉니다.
예제
GET /api/osd/SVC_ID/smart HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.15. Ceph Object Gateway

Ceph RESTful API rgw 엔드포인트를 사용하여 Ceph Object Gateway를 관리하기 위한 메서드 참조입니다.

GET /api/rgw/status
설명
Ceph Object Gateway 상태를 표시합니다.
예제
GET /api/rgw/status HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/rgw/daemon
설명
Ceph Object Gateway 데몬을 표시합니다.
예제
GET /api/rgw/daemon HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/rgw/daemon/SVC_ID
매개 변수
  • SVC_ID 를 서비스 식별자로 문자열 값으로 바꿉니다.
예제
GET /api/rgw/daemon/SVC_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/rgw/site
매개 변수
  • 쿼리:

    • query - 문자열 값입니다.
    • daemon_name - 데몬의 이름입니다.
예제
GET /api/rgw/site HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

버킷 관리

GET /api/rgw/bucket
매개 변수
  • 쿼리:

    • stats - 버킷 통계의 부울 값입니다.
    • daemon_name - 데몬의 이름입니다.
예제
GET /api/rgw/bucket HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/rgw/bucket
예제
POST /api/rgw/bucket HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "bucket": "STRING",
    "daemon_name": "STRING",
    "lock_enabled": "false",
    "lock_mode": "STRING",
    "lock_retention_period_days": "STRING",
    "lock_retention_period_years": "STRING",
    "placement_target": "STRING",
    "uid": "STRING",
    "zonegroup": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/rgw/bucket/BUCKET
매개 변수
  • BUCKET 을 버킷 이름으로 문자열 값으로 바꿉니다.
  • 쿼리:

    • purge_objects - 문자열 값입니다.
    • daemon_name - 데몬의 이름입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/rgw/bucket/BUCKET
매개 변수
  • BUCKET 을 버킷 이름으로 문자열 값으로 바꿉니다.
  • 쿼리:

    • daemon_name - 데몬의 이름입니다.
예제
GET /api/rgw/bucket/BUCKET HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/rgw/bucket/BUCKET
매개 변수
  • BUCKET 을 버킷 이름으로 문자열 값으로 바꿉니다.
예제
PUT /api/rgw/bucket/BUCKET HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "bucket_id": "STRING",
    "daemon_name": "STRING",
    "lock_mode": "STRING",
    "lock_retention_period_days": "STRING",
    "lock_retention_period_years": "STRING",
    "mfa_delete": "STRING",
    "mfa_token_pin": "STRING",
    "mfa_token_serial": "STRING",
    "uid": "STRING",
    "versioning_state": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

사용자 관리

GET /api/rgw/user
설명
Ceph Object Gateway 사용자를 표시합니다.
매개 변수
  • 쿼리:

    • daemon_name - 데몬의 이름입니다.
예제
GET /api/rgw/user HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/rgw/user
예제
POST /api/rgw/user HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "access_key": "STRING",
    "daemon_name": "STRING",
    "display_name": "STRING",
    "email": "STRING",
    "generate_key": "STRING",
    "max_buckets": "STRING",
    "secret_key": "STRING",
    "suspended": "STRING",
    "uid": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/rgw/user/get_emails
매개 변수
  • 쿼리:

    • daemon_name - 데몬의 이름입니다.
예제
GET /api/rgw/user/get_emails HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/rgw/user/UID
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
  • 쿼리:

    • daemon_name - 데몬의 이름입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/rgw/user/UID
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
  • 쿼리:

    • daemon_name - 데몬의 이름입니다.
    • stats - 사용자 통계의 부울 값입니다.
예제
GET /api/rgw/user/UID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/rgw/user/UID
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
예제
PUT /api/rgw/user/UID HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "daemon_name": "STRING",
    "display_name": "STRING",
    "email": "STRING",
    "max_buckets": "STRING",
    "suspended": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/rgw/user/UID/capability
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
  • 쿼리:

    • daemon_name - 데몬의 이름입니다.
    • type - 필수 항목입니다. 문자열 값.
    • perm - 필수 항목입니다. 문자열 값.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/rgw/user/UID/capability
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
예제
POST /api/rgw/user/UID/capability HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "daemon_name": "STRING",
    "perm": "STRING",
    "type": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/rgw/user/UID/key
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
  • 쿼리:

    • daemon_name - 데몬의 이름입니다.
    • KEY_TYPE - 문자열 값입니다.
    • 하위 사용자 - 문자열 값입니다.
    • access_key - 문자열 값입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/rgw/user/UID/key
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
예제
POST /api/rgw/user/UID/key HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "access_key": "STRING",
    "daemon_name": "STRING",
    "generate_key": "true",
    "key_type": "s3",
    "secret_key": "STRING",
    "subuser": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/rgw/user/UID/quota
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
예제
GET /api/rgw/user/UID/quota HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/rgw/user/UID/quota
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
예제
PUT /api/rgw/user/UID/quota HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "daemon_name": "STRING",
    "enabled": "STRING",
    "max_objects": "STRING",
    "max_size_kb": 1,
    "quota_type": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/rgw/user/UID/subuser
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
예제
POST /api/rgw/user/UID/subuser HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "access": "STRING",
    "access_key": "STRING",
    "daemon_name": "STRING",
    "generate_secret": "true",
    "key_type": "s3",
    "secret_key": "STRING",
    "subuser": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/rgw/user/UID/subuser/SUBUSER
매개 변수
  • UID 를 문자열로 사용자 ID로 바꿉니다.
  • SUBUSER 를 하위 사용자 이름으로 교체합니다.
  • 쿼리:

    • purge_keys - 키를 제거하지 않도록 false 로 설정합니다. 이는 S3 하위 사용자만 사용할 수 있습니다.
    • daemon_name - 데몬의 이름입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.16. 역할을 조작하기 위한 REST API

radosgw-admin 역할 명령 외에도 REST API를 사용하여 역할을 조작할 수 있습니다.

REST 관리 API를 호출하려면 admin caps가 있는 사용자를 생성합니다.

예제

[root@host01 ~]# radosgw-admin --uid TESTER --display-name "TestUser" --access_key TESTER --secret test123 user create
[root@host01 ~]# radosgw-admin caps add --uid="TESTER" --caps="roles=*"
Copy to Clipboard Toggle word wrap

  • 역할을 생성합니다.

    구문

    POST “<hostname>?Action=CreateRole&RoleName=ROLE_NAME&Path=PATH_TO_FILE&AssumeRolePolicyDocument=TRUST_RELATIONSHIP_POLICY_DOCUMENT
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=CreateRole&RoleName=S3Access&Path=/application_abc/component_xyz/&AssumeRolePolicyDocument={"Version":"2022-06-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER"]},"Action":["sts:AssumeRole"]}]}”
    Copy to Clipboard Toggle word wrap

    응답 예

    <role>
      <id>8f41f4e0-7094-4dc0-ac20-074a881ccbc5</id>
      <name>S3Access</name>
      <path>/application_abc/component_xyz/</path>
      <arn>arn:aws:iam:::role/application_abc/component_xyz/S3Access</arn>
      <create_date>2022-06-23T07:43:42.811Z</create_date>
      <max_session_duration>3600</max_session_duration>
      <assume_role_policy_document>{"Version":"2022-06-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER"]},"Action":["sts:AssumeRole"]}]}</assume_role_policy_document>
    </role>
    Copy to Clipboard Toggle word wrap

  • 역할을 가져옵니다.

    구문

    POST “<hostname>?Action=GetRole&RoleName=ROLE_NAME
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=GetRole&RoleName=S3Access”
    Copy to Clipboard Toggle word wrap

    응답 예

    <role>
      <id>8f41f4e0-7094-4dc0-ac20-074a881ccbc5</id>
      <name>S3Access</name>
      <path>/application_abc/component_xyz/</path>
      <arn>arn:aws:iam:::role/application_abc/component_xyz/S3Access</arn>
      <create_date>2022-06-23T07:43:42.811Z</create_date>
      <max_session_duration>3600</max_session_duration>
      <assume_role_policy_document>{"Version":"2022-06-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER"]},"Action":["sts:AssumeRole"]}]}</assume_role_policy_document>
    </role>
    Copy to Clipboard Toggle word wrap

  • 역할을 나열합니다.

    구문

    POST “<hostname>?Action=GetRole&RoleName=ROLE_NAME&PathPrefix=PATH_PREFIX
    Copy to Clipboard Toggle word wrap

    요청 예

    POST “<hostname>?Action=ListRoles&RoleName=S3Access&PathPrefix=/application”
    Copy to Clipboard Toggle word wrap

    응답 예

    <role>
      <id>8f41f4e0-7094-4dc0-ac20-074a881ccbc5</id>
      <name>S3Access</name>
      <path>/application_abc/component_xyz/</path>
      <arn>arn:aws:iam:::role/application_abc/component_xyz/S3Access</arn>
      <create_date>2022-06-23T07:43:42.811Z</create_date>
      <max_session_duration>3600</max_session_duration>
      <assume_role_policy_document>{"Version":"2022-06-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER"]},"Action":["sts:AssumeRole"]}]}</assume_role_policy_document>
    </role>
    Copy to Clipboard Toggle word wrap

  • assume 역할 정책 문서를 업데이트합니다.

    구문

    POST “<hostname>?Action=UpdateAssumeRolePolicy&RoleName=ROLE_NAME&PolicyDocument=TRUST_RELATIONSHIP_POLICY_DOCUMENT
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=UpdateAssumeRolePolicy&RoleName=S3Access&PolicyDocument={"Version":"2022-06-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER2"]},"Action":["sts:AssumeRole"]}]}”
    Copy to Clipboard Toggle word wrap

  • 역할에 연결된 정책을 업데이트합니다.

    구문

    POST “<hostname>?Action=PutRolePolicy&RoleName=ROLE_NAME&PolicyName=POLICY_NAME&PolicyDocument=TRUST_RELATIONSHIP_POLICY_DOCUMENT
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=PutRolePolicy&RoleName=S3Access&PolicyName=Policy1&PolicyDocument={"Version":"2022-06-17","Statement":[{"Effect":"Allow","Action":["s3:CreateBucket"],"Resource":"arn:aws:s3:::example_bucket"}]}”
    Copy to Clipboard Toggle word wrap

  • 역할에 연결된 권한 정책 이름을 나열합니다.

    구문

    POST “<hostname>?Action=ListRolePolicies&RoleName=ROLE_NAME
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=ListRolePolicies&RoleName=S3Access”
    
    <PolicyNames>
      <member>Policy1</member>
    </PolicyNames>
    Copy to Clipboard Toggle word wrap

  • 역할에 연결된 권한 정책을 가져옵니다.

    구문

    POST “<hostname>?Action=GetRolePolicy&RoleName=ROLE_NAME&PolicyName=POLICY_NAME
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=GetRolePolicy&RoleName=S3Access&PolicyName=Policy1”
    
    <GetRolePolicyResult>
      <PolicyName>Policy1</PolicyName>
      <RoleName>S3Access</RoleName>
      <Permission_policy>{"Version":"2022-06-17","Statement":[{"Effect":"Allow","Action":["s3:CreateBucket"],"Resource":"arn:aws:s3:::example_bucket"}]}</Permission_policy>
    </GetRolePolicyResult>
    Copy to Clipboard Toggle word wrap

  • 역할에 연결된 정책 삭제:

    구문

    POST “hostname>?Action=DeleteRolePolicy&RoleName=ROLE_NAME&PolicyName=POLICY_NAME
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=DeleteRolePolicy&RoleName=S3Access&PolicyName=Policy1”
    Copy to Clipboard Toggle word wrap

  • 역할을 삭제합니다.

    참고

    권한 정책이 연결되어 있지 않은 경우에만 역할을 삭제할 수 있습니다.

    구문

    POST “<hostname>?Action=DeleteRole&RoleName=ROLE_NAME"
    Copy to Clipboard Toggle word wrap

    예제

    POST “<hostname>?Action=DeleteRole&RoleName=S3Access"
    Copy to Clipboard Toggle word wrap

A.17. NFS Ganesha

Ceph RESTful API nfs-ganesha 엔드포인트를 사용하여 Ceph NFS 게이트웨이를 관리하는 메서드 참조입니다.

GET /api/nfs-ganesha/daemon
설명
NFS Ganesha 데몬에 대한 정보를 봅니다.
예제
GET /api/nfs-ganesha/daemon HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/nfs-ganesha/export
설명
모든 NFS Ganesha 내보내기 보기.
예제
GET /api/nfs-ganesha/export HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/nfs-ganesha/export
설명
새 NFS Ganesha 내보내기를 생성합니다.
예제
POST /api/nfs-ganesha/export HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "access_type": "STRING",
    "clients": [
        {
            "access_type": "STRING",
            "addresses": [
                "STRING"
            ],
            "squash": "STRING"
        }
    ],
    "cluster_id": "STRING",
    "daemons": [
        "STRING"
    ],
    "fsal": {
        "filesystem": "STRING",
        "name": "STRING",
        "rgw_user_id": "STRING",
        "sec_label_xattr": "STRING",
        "user_id": "STRING"
    },
    "path": "STRING",
    "protocols": [
        1
    ],
    "pseudo": "STRING",
    "reload_daemons": true,
    "security_label": "STRING",
    "squash": "STRING",
    "tag": "STRING",
    "transports": [
        "STRING"
    ]
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/nfs-ganesha/export/CLUSTER_ID/EXPORT_ID
설명
NFS Ganesha 내보내기를 삭제합니다.
매개 변수
  • CLUSTER_ID 를 스토리지 클러스터 ID 문자열로 바꿉니다.
  • EXPORT_ID 를 내보내기 식별자로 정수로 바꿉니다.
  • 쿼리:

    • reload_daemons - NFS Ganesha 데몬 구성의 다시 로드를 트리거하는 부울 값입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/nfs-ganesha/export/CLUSTER_ID/EXPORT_ID
설명
NFS Ganesha 내보내기 정보를 확인합니다.
매개 변수
  • CLUSTER_ID 를 스토리지 클러스터 ID 문자열로 바꿉니다.
  • EXPORT_ID 를 내보내기 식별자로 정수로 바꿉니다.
예제
GET /api/nfs-ganesha/export/CLUSTER_ID/EXPORT_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/nfs-ganesha/export/CLUSTER_ID/EXPORT_ID
설명
NFS Ganesha 내보내기 정보를 업데이트합니다.
매개 변수
  • CLUSTER_ID 를 스토리지 클러스터 ID 문자열로 바꿉니다.
  • EXPORT_ID 를 내보내기 식별자로 정수로 바꿉니다.
예제
PUT /api/nfs-ganesha/export/CLUSTER_ID/EXPORT_ID HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "access_type": "STRING",
    "clients": [
        {
            "access_type": "STRING",
            "addresses": [
                "STRING"
            ],
            "squash": "STRING"
        }
    ],
    "daemons": [
        "STRING"
    ],
    "fsal": {
        "filesystem": "STRING",
        "name": "STRING",
        "rgw_user_id": "STRING",
        "sec_label_xattr": "STRING",
        "user_id": "STRING"
    },
    "path": "STRING",
    "protocols": [
        1
    ],
    "pseudo": "STRING",
    "reload_daemons": true,
    "security_label": "STRING",
    "squash": "STRING",
    "tag": "STRING",
    "transports": [
        "STRING"
    ]
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/nfs-ganesha/status
설명
NFS Ganesha 관리 기능의 상태 정보를 확인합니다.
예제
GET /api/nfs-ganesha/status HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.18. Ceph Orchestrator

Ceph RESTful API 오케스트레이터 끝점을 사용하여 Ceph Orchestrator 상태를 표시하는 메서드 참조입니다.

GET /api/orchestrator/status
설명
Ceph Orchestrator 상태를 표시합니다.
예제
GET /api/orchestrator/status HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.19. 풀

Ceph RESTful API 풀 엔드포인트를 사용하여 스토리지 풀 을 관리하는 메서드 참조입니다.

GET /api/pool
설명
풀 목록을 표시합니다.
매개 변수
  • 쿼리:

    • attrs - 풀 속성의 문자열 값입니다.
    • stats - 풀 통계의 부울 값입니다.
예제
GET /api/pool HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/pool
예제
POST /api/pool HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "application_metadata": "STRING",
    "configuration": "STRING",
    "erasure_code_profile": "STRING",
    "flags": "STRING",
    "pg_num": 1,
    "pool": "STRING",
    "pool_type": "STRING",
    "rule_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/pool/POOL_NAME
매개 변수
  • POOL_NAME 을 풀 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/pool/POOL_NAME
매개 변수
  • POOL_NAME 을 풀 이름으로 바꿉니다.
  • 쿼리:

    • attrs - 풀 속성의 문자열 값입니다.
    • stats - 풀 통계의 부울 값입니다.
예제
GET /api/pool/POOL_NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/pool/POOL_NAME
매개 변수
  • POOL_NAME 을 풀 이름으로 바꿉니다.
예제
PUT /api/pool/POOL_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "application_metadata": "STRING",
    "configuration": "STRING",
    "flags": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/pool/POOL_NAME/configuration
매개 변수
  • POOL_NAME 을 풀 이름으로 바꿉니다.
예제
GET /api/pool/POOL_NAME/configuration HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.20. Prometheus

Ceph RESTful API prometheus 끝점을 사용하여 Prometheus를 관리하는 메서드 참조입니다.

GET /api/prometheus
예제
GET /api/prometheus/rules HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/prometheus/rules
예제
GET /api/prometheus/rules HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/prometheus/silence
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/prometheus/silence/S_ID
매개 변수
  • S_ID 를 문자열 값으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/prometheus/silences
예제
GET /api/prometheus/silences HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/prometheus/notifications
예제
GET /api/prometheus/notifications HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.21. RADOS 블록 장치

Ceph RESTful API 블록 엔드포인트를 사용하여 RADOS 블록 장치(RBD)를 관리하기 위한 메서드 참조입니다. 이 참조에는 다음과 같이 사용 가능한 모든 RBD 기능 엔드 포인트가 포함됩니다.

RBD 이미지

GET /api/block/image
설명
RBD 이미지를 확인합니다.
매개 변수
  • 쿼리:

    • pool_name - 풀 이름을 문자열로 나타냅니다.
예제
GET /api/block/image HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image
예제
POST /api/block/image HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "configuration": "STRING",
    "data_pool": "STRING",
    "features": "STRING",
    "name": "STRING",
    "namespace": "STRING",
    "obj_size": 1,
    "pool_name": "STRING",
    "size": 1,
    "stripe_count": 1,
    "stripe_unit": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/block/image/clone_format_version
설명
RBD 복제 형식 버전을 반환합니다.
예제
GET /api/block/image/clone_format_version HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/block/image/default_features
예제
GET /api/block/image/default_features HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/block/image/default_features
예제
GET /api/block/image/default_features HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/block/image/IMAGE_SPEC
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/block/image/IMAGE_SPEC
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
예제
GET /api/block/image/IMAGE_SPEC HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/block/image/IMAGE_SPEC
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
예제
PUT /api/block/image/IMAGE_SPEC HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "configuration": "STRING",
    "features": "STRING",
    "name": "STRING",
    "size": 1
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image/IMAGE_SPEC/copy
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
예제
POST /api/block/image/IMAGE_SPEC/copy HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "configuration": "STRING",
    "data_pool": "STRING",
    "dest_image_name": "STRING",
    "dest_namespace": "STRING",
    "dest_pool_name": "STRING",
    "features": "STRING",
    "obj_size": 1,
    "snapshot_name": "STRING",
    "stripe_count": 1,
    "stripe_unit": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image/IMAGE_SPEC/flatten
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image/IMAGE_SPEC/move_trash
설명
이미지를 휴지통으로 이동합니다. 복제본에서 적극적으로 사용하는 이미지는 휴지통으로 이동하고 나중에 삭제할 수 있습니다.
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
예제
POST /api/block/image/IMAGE_SPEC/move_trash HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "delay": 1
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD 미러링

GET /api/block/mirroring/site_name
설명
RBD 미러링 사이트 이름을 표시합니다.
예제
GET /api/block/mirroring/site_name HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/block/mirroring/site_name
예제
PUT /api/block/mirroring/site_name HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "site_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD 미러링 풀 부트스트랩

POST /api/block/mirroring/pool/POOL_NAME/bootstrap/peer
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
예제
POST /api/block/mirroring/pool/POOL_NAME/bootstrap/peer HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "direction": "STRING",
    "token": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/mirroring/pool/POOL_NAME/bootstrap/token
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD 미러링 풀 모드

GET /api/block/mirroring/pool/POOL_NAME
설명
RBD 미러링 요약을 표시합니다.
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
예제
GET /api/block/mirroring/pool/POOL_NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/block/mirroring/pool/POOL_NAME
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
예제
PUT /api/block/mirroring/pool/POOL_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "mirror_mode": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD 미러링 풀 피어

GET /api/block/mirroring/pool/POOL_NAME/peer
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
예제
GET /api/block/mirroring/pool/POOL_NAME/peer HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/mirroring/pool/POOL_NAME/peer
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
예제
POST /api/block/mirroring/pool/POOL_NAME/peer HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "client_id": "STRING",
    "cluster_name": "STRING",
    "key": "STRING",
    "mon_host": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/block/mirroring/pool/POOL_NAME/peer/PEER_UUID
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
  • PEER_UUID 를 문자열로 피어의 UUID로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/block/mirroring/pool/POOL_NAME/peer/PEER_UUID
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
  • PEER_UUID 를 문자열로 피어의 UUID로 바꿉니다.
예제
GET /api/block/mirroring/pool/POOL_NAME/peer/PEER_UUID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/block/mirroring/pool/POOL_NAME/peer/PEER_UUID
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
  • PEER_UUID 를 문자열로 피어의 UUID로 바꿉니다.
예제
PUT /api/block/mirroring/pool/POOL_NAME/peer/PEER_UUID HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "client_id": "STRING",
    "cluster_name": "STRING",
    "key": "STRING",
    "mon_host": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD 미러링 요약

GET /api/block/mirroring/summary
설명
RBD 미러링 요약을 표시합니다.
예제
GET /api/block/mirroring/summary HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD 네임스페이스

GET /api/block/pool/POOL_NAME/namespace
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
예제
GET /api/block/pool/POOL_NAME/namespace HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/pool/POOL_NAME/namespace
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
예제
POST /api/block/pool/POOL_NAME/namespace HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "namespace": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/block/pool/POOL_NAME/namespace/NAMESPACE
매개 변수
  • POOL_NAME 을 문자열 풀 이름으로 바꿉니다.
  • NAMESPACE 를 문자열로 네임 스페이스로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD 스냅샷

POST /api/block/image/IMAGE_SPEC/snap
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
예제
POST /api/block/image/IMAGE_SPEC/snap HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "snapshot_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/block/image/IMAGE_SPEC/snap/SNAPSHOT_NAME
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
  • SNAPSHOT_NAME 을 문자열 값으로 스냅샷 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/block/image/IMAGE_SPEC/snap/SNAPSHOT_NAME
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
  • SNAPSHOT_NAME 을 문자열 값으로 스냅샷 이름으로 바꿉니다.
예제
PUT /api/block/image/IMAGE_SPEC/snap/SNAPSHOT_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "is_protected": true,
    "new_snap_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image/IMAGE_SPEC/snap/SNAPSHOT_NAME/clone
설명
스냅샷을 이미지에 복제합니다.
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
  • SNAPSHOT_NAME 을 문자열 값으로 스냅샷 이름으로 바꿉니다.
예제
POST /api/block/image/IMAGE_SPEC/snap/SNAPSHOT_NAME/clone HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "child_image_name": "STRING",
    "child_namespace": "STRING",
    "child_pool_name": "STRING",
    "configuration": "STRING",
    "data_pool": "STRING",
    "features": "STRING",
    "obj_size": 1,
    "stripe_count": 1,
    "stripe_unit": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image/IMAGE_SPEC/snap/SNAPSHOT_NAME/rollback
매개 변수
  • IMAGE_SPEC 를 이미지 이름으로 문자열 값으로 바꿉니다.
  • SNAPSHOT_NAME 을 문자열 값으로 스냅샷 이름으로 바꿉니다.
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

RBD trsh

GET /api/block/image/trash
설명
모든 RBD 휴지통 항목 또는 풀 이름별로 RBD 휴지통 세부 정보를 표시합니다.
매개 변수
  • 쿼리:

    • pool_name - 풀 이름을 문자열 값으로 설정합니다.
예제
GET /api/block/image/trash HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image/trash/purge
설명
휴지통에서 만료된 모든 이미지를 제거합니다.
매개 변수
  • 쿼리:

    • pool_name - 풀 이름을 문자열 값으로 설정합니다.
예제
POST /api/block/image/trash/purge HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "pool_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/block/image/trash/IMAGE_ID_SPEC
설명
휴지통에서 이미지를 삭제합니다. 이미지 지연 시간이 만료되지 않은 경우 강제 를 사용하지 않는 한 삭제할 수 없습니다. 복제본에 의한 활성 사용 중인 이미지 또는 스냅샷이 있으므로 삭제할 수 없습니다.
매개 변수
  • IMAGE_ID_SPEC 를 문자열 값으로 이미지 이름으로 바꿉니다.
  • 쿼리:

    • force - 휴지통에서 이미지를 강제로 삭제하는 부울 값입니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/block/image/trash/IMAGE_ID_SPEC/restore
설명
휴지통에서 이미지를 복원합니다.
매개 변수
  • IMAGE_ID_SPEC 를 문자열 값으로 이미지 이름으로 바꿉니다.
예제
POST /api/block/image/trash/IMAGE_ID_SPEC/restore HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "new_image_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.22. 성능 카운터

Ceph RESTful API perf_counters 엔드포인트를 사용하여 다양한 Ceph 성능 카운터를 표시하는 메서드 참조입니다. 이 참조에는 다음과 같은 사용 가능한 모든 성능 카운터 끝점이 포함됩니다.

  • Ceph Metadata Server(MDS)
  • Ceph Manager
  • Ceph Monitor
  • Ceph OSD
  • Ceph Object Gateway
  • Ceph RADOS Block Device (RBD) Mirroring
  • TCMU Runner

    GET /api/perf_counters
    설명
    성능 카운터를 표시합니다.
    예제
    GET /api/perf_counters HTTP/1.1
    Host: example.com
    Copy to Clipboard Toggle word wrap
    상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

Ceph Metadata Server

GET /api/perf_counters/mds/SERVICE_ID
매개 변수
  • SERVICE_ID 를 문자열로 필요한 서비스 식별자로 바꿉니다.
예제
GET /api/perf_counters/mds/SERVICE_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

Ceph Manager

GET /api/perf_counters/mgr/SERVICE_ID
매개 변수
  • SERVICE_ID 를 문자열로 필요한 서비스 식별자로 바꿉니다.
예제
GET /api/perf_counters/mgr/SERVICE_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

Ceph Monitor

GET /api/perf_counters/mon/SERVICE_ID
매개 변수
  • SERVICE_ID 를 문자열로 필요한 서비스 식별자로 바꿉니다.
예제
GET /api/perf_counters/mon/SERVICE_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

Ceph OSD

GET /api/perf_counters/osd/SERVICE_ID
매개 변수
  • SERVICE_ID 를 문자열로 필요한 서비스 식별자로 바꿉니다.
예제
GET /api/perf_counters/osd/SERVICE_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

Ceph RADOS Block Device (RBD) Mirroring

GET /api/perf_counters/rbd-mirror/SERVICE_ID
매개 변수
  • SERVICE_ID 를 문자열로 필요한 서비스 식별자로 바꿉니다.
예제
GET /api/perf_counters/rbd-mirror/SERVICE_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

Ceph Object Gateway

GET /api/perf_counters/rgw/SERVICE_ID
매개 변수
  • SERVICE_ID 를 문자열로 필요한 서비스 식별자로 바꿉니다.
예제
GET /api/perf_counters/rgw/SERVICE_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

TCMU Runner

GET /api/perf_counters/tcmu-runner/SERVICE_ID
매개 변수
  • SERVICE_ID 를 문자열로 필요한 서비스 식별자로 바꿉니다.
예제
GET /api/perf_counters/tcmu-runner/SERVICE_ID HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.23. 역할

Ceph RESTful API 역할 엔드포인트를 사용하여 Ceph에서 다양한 사용자 역할을 관리하는 메서드 참조입니다.

GET /api/role
설명
역할 목록을 표시합니다.
예제
GET /api/role HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/role
예제
POST /api/role HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "description": "STRING",
    "name": "STRING",
    "scopes_permissions": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/role/NAME
매개 변수
  • NAME 을 문자열로 역할 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/role/NAME
매개 변수
  • NAME 을 문자열로 역할 이름으로 바꿉니다.
예제
GET /api/role/NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/role/NAME
매개 변수
  • NAME 을 문자열로 역할 이름으로 바꿉니다.
예제
PUT /api/role/NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "description": "STRING",
    "scopes_permissions": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/role/NAME/clone
매개 변수
  • NAME 을 문자열로 역할 이름으로 바꿉니다.
예제
POST /api/role/NAME/clone HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "new_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.24. 서비스

Ceph RESTful API 서비스 엔드포인트를 사용하여 다양한 Ceph 서비스를 관리하는 메서드 참조입니다.

GET /api/service
매개 변수
  • 쿼리:

    • service_name - 서비스 이름을 문자열로 지정합니다.
예제
GET /api/service HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/service
매개 변수
  • service_spec - JSON 파일로 서비스 사양입니다.
  • service_name - 서비스 이름입니다.
예제
POST /api/service HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "service_name": "STRING",
    "service_spec": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/service/known_types
설명
알려진 서비스 유형 목록을 표시합니다.
예제
GET /api/service/known_types HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/service/SERVICE_NAME
매개 변수
  • SERVICE_NAME 을 문자열로 서비스 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/service/SERVICE_NAME
매개 변수
  • SERVICE_NAME 을 문자열로 서비스 이름으로 바꿉니다.
예제
GET /api/service/SERVICE_NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/service/SERVICE_NAME/daemons
매개 변수
  • SERVICE_NAME 을 문자열로 서비스 이름으로 바꿉니다.
예제
GET /api/service/SERVICE_NAME/daemons HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.25. 설정

Ceph RESTful API 설정 끝점을 사용하여 다양한 Ceph 설정을 관리하는 메서드 참조입니다.

GET /api/settings
설명
사용 가능한 옵션 목록 표시
매개 변수
  • 쿼리:

    • name - 쉼표로 구분된 옵션 이름 목록입니다.
예제
GET /api/settings HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/settings
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/settings/NAME
매개 변수
  • NAME 을 옵션 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/settings/NAME
설명
지정된 옵션을 표시합니다.
매개 변수
  • NAME 을 옵션 이름으로 바꿉니다.
예제
GET /api/settings/NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/settings/NAME
매개 변수
  • NAME 을 옵션 이름으로 바꿉니다.
예제
PUT /api/settings/NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "value": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.26. Ceph 작업

Ceph RESTful API 작업 엔드포인트를 사용하여 Ceph 작업을 표시하는 메서드 참조입니다.

GET /api/task
설명
Ceph 작업을 표시합니다.
매개 변수
  • 쿼리:

    • name - 작업의 이름입니다.
예제
GET /api/task HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.27. telemetry

Ceph RESTful API Telemetry 엔드포인트를 사용하여 Telemetry Ceph Manager 모듈의 데이터를 관리하는 메서드 참조입니다.

PUT /api/telemetry
설명
Telemetry 모듈에서 수집된 데이터 전송을 활성화하거나 비활성화합니다.
매개 변수
  • Enable - 부울 값입니다.
  • license_name - sharing-1-0 과 같은 문자열 값입니다. 사용자가 Telemetry 데이터를 공유하기 위한 라이센스를 인식하고 수락하는지 확인합니다.
예제
PUT /api/telemetry HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "enable": true,
    "license_name": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/telemetry/report
설명
Ceph 및 장치의 보고서 데이터를 표시합니다.
예제
GET /api/telemetry/report HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

A.28. Ceph 사용자

Ceph RESTful API 사용자 엔드포인트를 사용하여 Ceph 사용자 세부 정보를 표시하고 Ceph 사용자 암호를 관리하기 위한 메서드 참조입니다.

GET /api/user
설명
사용자 목록을 표시합니다.
예제
GET /api/user HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/user
예제
POST /api/user HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "email": "STRING",
    "enabled": true,
    "name": "STRING",
    "password": "STRING",
    "pwdExpirationDate": "STRING",
    "pwdUpdateRequired": true,
    "roles": "STRING",
    "username": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
DELETE /api/user/USER_NAME
매개 변수
  • USER_NAME 을 문자열로 사용자 이름으로 바꿉니다.
상태 코드
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 204 콘텐츠 없음 - 리소스가 삭제됨
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
GET /api/user/USER_NAME
매개 변수
  • USER_NAME 을 문자열로 사용자 이름으로 바꿉니다.
예제
GET /api/user/USER_NAME HTTP/1.1
Host: example.com
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
PUT /api/user/USER_NAME
매개 변수
  • USER_NAME 을 문자열로 사용자 이름으로 바꿉니다.
예제
PUT /api/user/USER_NAME HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "email": "STRING",
    "enabled": "STRING",
    "name": "STRING",
    "password": "STRING",
    "pwdExpirationDate": "STRING",
    "pwdUpdateRequired": true,
    "roles": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 200 OK - OK
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/user/USER_NAME/change_password
매개 변수
  • USER_NAME 을 문자열로 사용자 이름으로 바꿉니다.
예제
POST /api/user/USER_NAME/change_password HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "new_password": "STRING",
    "old_password": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.
POST /api/user/validate_password
설명
암호를 확인하여 암호 정책을 충족하는지 확인합니다.
매개 변수
  • password - 유효성을 검사할 암호입니다.
  • 사용자 이름 - 선택 사항. 사용자의 이름입니다.
  • old_password - 선택 사항입니다. 이전 암호입니다.
예제
POST /api/user/validate_password HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "old_password": "STRING",
    "password": "STRING",
    "username": "STRING"
}
Copy to Clipboard Toggle word wrap
상태 코드
  • 201 생성됨 - 리소스가 생성되었습니다.
  • 202 허용 - 작업이 계속 실행 중입니다. 작업 대기열을 확인하십시오.
  • 400 잘못된 요청 - 예외 작업 자세한 내용은 응답 본문을 확인하십시오.
  • 401 무단 - 인증되지 않은 액세스 먼저 로그인하십시오.
  • 403 forbidden - 무단 액세스 권한을 확인하십시오.
  • 500 내부 서버 오류 - 예기치 않은 오류. 스택 추적을 위해 응답 본문을 확인하십시오.

부록 B. S3 공통 요청 헤더

다음 표에는 유효한 공통 요청 헤더와 설명이 나열되어 있습니다.

Expand
표 B.1. 요청 헤더
요청 헤더설명

CONTENT_LENGTH

요청 본문의 길이입니다.

날짜

요청 시간 및 날짜(UTC)

호스트

호스트 서버의 이름입니다.

권한 부여

권한 부여 토큰.

부록 C. S3 공통 응답 상태 코드

다음 표에는 유효한 공통 HTTP 응답 상태 및 해당 코드가 나열되어 있습니다.

Expand
표 C.1. 응답 상태
HTTP 상태응답 코드

100

계속

200

성공

201

Created

202

허용됨

204

NoContent

206

부분적인 콘텐츠

304

Not Cryostat

400

InvalidArgument

400

InvalidDigest

400

BadDigest

400

InvalidBucketName

400

InvalidObjectName

400

UnresolvableGrantByEmailAddress

400

InvalidPart

400

InvalidPartOrder

400

RequestTimeout

400

EntityTooLarge

403

AccessDenied

403

UserSuspended

403

RequestTimeTooSkewed

404

NoSuchKey

404

NoSuchBucket

404

NoSuchUpload

405

MethodNotAllowed

408

RequestTimeout

409

BucketAlreadyExists

409

BucketNotEmpty

411

MissingContentLength

412

PreconditionFailed

416

InvalidRange

422

UnprocessableEntity

500

InternalError

부록 D. S3 지원 및 지원되지 않는 동사

이 정보에는 지원되는 최신 S3 동사가 나열됩니다.

Expand
표 D.1. 지원되는 동사
동작API

AbortMultipartUpload

S3

CompleteMultipartUpload

S3

CopyObject

S3

CreateBucket

S3

CreateMultipartUpload

S3

DeleteBucket

S3

DeleteBucketCORS

S3

DeleteBucketEncryption

S3

DeleteBucketLifecycle

S3

DeleteBucketPolicy

S3

DeleteBucketReplication

S3

DeleteBucketTagging

S3

DeleteBucketWebsite

S3

DeleteObject

S3

DeleteObjects

S3

DeleteObjectTagging

S3

GetBucketAcl

S3

GetBucketCORS

S3

GetBucketEncryption

S3

GetBucketLocation

S3

GetBucketNotificationConfiguration

S3

GetBucketPolicy

S3

GetBucketPolicyStatus

S3

GetBucketReplication

S3

GetBucketRequestPayment

S3

GetBucketTagging

S3

GetBucketVersioning

S3

GetBucketWebsite

S3

GetObject

S3

GetObjectAcl

S3

GetObjectAttributes

S3

GetObjectLegalHold

S3

GetObjectLockConfiguration

S3

GetObjectRetention

S3

GetObjectTagging

S3

GetObjectTorrent

S3

HeadBucket

S3

HeadObject

S3

ListBuckets

S3

ListMultipartUploads

S3

ListObjects

S3

ListObjectsV2

S3

ListObjectVersions

S3

ListParts

S3

PutBucketAcl

S3

PutBucketCORS

S3

PutBucketEncryption

S3

PutBucketLifecycle

S3

PutBucketLifecycleConfiguration

S3

PutBucketNotificationConfiguration

S3

PutBucketPolicy

S3

PutBucketReplication

S3

PutBucketRequestPayment

S3

PutBucketTagging

S3

PutBucketVersioning

S3

PutBucketWebsite

S3

PutObject

S3

PutObjectAcl

S3

PutObjectLegalHold

S3

PutObjectLockConfiguration

S3

PutObjectRetention

S3

PutObjectTagging

S3

SelectObjectContent

S3

UploadPart

S3

UploadPartCopy

S3

AssumeRole

STS

AssumeRoleWithWebIdentity

STS

GetSessionToken

STS

CreateOpenIDConnectProvider

IAM

CreateRole

IAM

DeleteOpenIDConnectProvider

IAM

DeleteRole

IAM

GetOpenIDConnectProvider

IAM

GetRole

IAM

ListRoles

IAM

DeleteBucketNotification

S3 확장

CreateTopic

SNS

GetTopicAttributes

SNS

DeleteTopic

SNS

ListTopics

SNS

Expand
표 D.2. 지원되지 않는 동사
동작API

DeleteBucketInventoryConfiguration

S3

DeleteIntelligentTieringConfiguration

S3

GetBucketInventoryConfiguration

S3

GetBucketLogging

S3

GetIntelligentTieringConfiguration

S3

ListBucketIntelligentTieringConfigurations

S3

ListBucketInventoryConfigurations

S3

PutBucketIntelligentTieringConfiguration

S3

PutBucketInventoryConfiguration

S3

PutBucketLogging

S3

RestoreObject

S3

AssumeRoleWithSAML

STS

DecodeAuthorizationMessage

STS

GetAccessKeyInfo

STS

GetCallerIdentity

STS

GetFederationToken

STS

AttachGroupPolicy

IAM

AttachRolePolicy

IAM

AttachUserPolicy

IAM

CreatePolicy

IAM

CreateSAMLProvider

IAM

DeletePolicy

IAM

SAMLProviders 삭제

IAM

GetPolicy

IAM

SAMLProviders 가져오기

IAM

ListOpenIDConnectProviders

IAM

ListPolicies

IAM

SAMLProviders 나열

IAM

부록 E. S3 지원되지 않는 헤더 필드

Expand
표 E.1. 지원되지 않는 헤더 필드
이름유형

x-amz-security-token

요청

서버

응답

x-amz-delete-marker

응답

x-amz-id-2

응답

x-amz-request-id

응답

x-amz-version-id

응답

부록 F. Swift 요청 헤더

Expand
표 F.1. 요청 헤더
이름설명유형필수 항목

X-Auth-User

인증할 Ceph Object Gateway 사용자 이름입니다.

문자열

제공됨

X-Auth-Key

Ceph Object Gateway 사용자 이름과 연결된 키입니다.

문자열

제공됨

부록 G. Swift 응답 헤더

서버의 응답에는 X-Auth-Token 값이 포함되어야 합니다. 응답에는 API 문서 전체에서 다른 요청에 지정된 API_VERSION/ACCOUNT 접두사를 제공하는 X-Storage-Url 도 포함될 수 있습니다.

Expand
표 G.1. 응답 헤더
이름설명유형

X-Storage-Token

요청에 지정된 X-Auth-User 에 대한 권한 부여 토큰입니다.

문자열

X-Storage-Url

사용자의 URL 및 API_VERSION/ACCOUNT 경로입니다.

문자열

부록 H. 보안 토큰 서비스 API를 사용하는 예

이 예제에서는 Python의 boto3 모듈을 사용하여 Ceph Object Gateway의 STS(Secure Token Service) 구현과 상호 작용합니다. 이 예제에서ER 2 는 role에 연결된 권한 정책에 따라 CryostatER 1 이 소유한 S3 리소스에 액세스하기 위해 생성된 역할을 가정합니다.

AssumeRole 예제에서는 역할을 생성하고 역할에 정책을 할당한 다음 해당 임시 자격 증명을 사용하여 임시 자격 증명을 가져오고 S3 리소스에 대한 액세스 권한을 갖는 역할을 가정합니다.

AssumeRoleWithWebIdentity 예제에서는 Keycloak이 있는 외부 애플리케이션을 사용하여 사용자를 인증합니다. OpenID Connect ID 공급자는 역할의 권한 정책에 따라 임시 인증 정보를 가져오고 S3 리소스에 액세스하는 역할을 가정합니다.

AssumeRole 예

import boto3

iam_client = boto3.client('iam',
aws_access_key_id=ACCESS_KEY_OF_TESTER1,
aws_secret_access_key=SECRET_KEY_OF_TESTER1,
endpoint_url=<IAM URL>,
region_name=''
)

policy_document = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam:::user/TESTER1\"]},\"Action\":[\"sts:AssumeRole\"]}]}"

role_response = iam_client.create_role(
AssumeRolePolicyDocument=policy_document,
Path='/',
RoleName='S3Access',
)

role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Action\":\"s3:*\",\"Resource\":\"arn:aws:s3:::*\"}}"

response = iam_client.put_role_policy(
RoleName='S3Access',
PolicyName='Policy1',
PolicyDocument=role_policy
)

sts_client = boto3.client('sts',
aws_access_key_id=ACCESS_KEY_OF_TESTER2,
aws_secret_access_key=SECRET_KEY_OF_TESTER2,
endpoint_url=<STS URL>,
region_name='',
)

response = sts_client.assume_role(
RoleArn=role_response['Role']['Arn'],
RoleSessionName='Bob',
DurationSeconds=3600
)

s3client = boto3.client('s3',
aws_access_key_id = response['Credentials']['AccessKeyId'],
aws_secret_access_key = response['Credentials']['SecretAccessKey'],
aws_session_token = response['Credentials']['SessionToken'],
endpoint_url=<S3 URL>,
region_name='',)

bucket_name = 'my-bucket'
s3bucket = s3client.create_bucket(Bucket=bucket_name)
resp = s3client.list_buckets()
Copy to Clipboard Toggle word wrap

AssumeRoleWithWebIdentity Example

import boto3

iam_client = boto3.client('iam',
aws_access_key_id=ACCESS_KEY_OF_TESTER1,
aws_secret_access_key=SECRET_KEY_OF_TESTER1,
endpoint_url=<IAM URL>,
region_name=''
)

oidc_response = iam_client.create_open_id_connect_provider(
    Url=<URL of the OpenID Connect Provider>,
    ClientIDList=[
        <Client id registered with the IDP>
    ],
    ThumbprintList=[
        <IDP THUMBPRINT>
 ]
)

policy_document = "{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"Federated\":\[\"arn:aws:iam:::oidc-provider/localhost:8080/auth/realms/demo\"\]\},\"Action\":\[\"sts:AssumeRoleWithWebIdentity\"\],\"Condition\":\{\"StringEquals\":\{\"localhost:8080/auth/realms/demo:app_id\":\"customer-portal\"\}\}\}\]\}"
role_response = iam_client.create_role(
AssumeRolePolicyDocument=policy_document,
Path='/',
RoleName='S3Access',
)

role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Action\":\"s3:*\",\"Resource\":\"arn:aws:s3:::*\"}}"

response = iam_client.put_role_policy(
    RoleName='S3Access',
    PolicyName='Policy1',
    PolicyDocument=role_policy
)

sts_client = boto3.client('sts',
aws_access_key_id=ACCESS_KEY_OF_TESTER2,
aws_secret_access_key=SECRET_KEY_OF_TESTER2,
endpoint_url=<STS URL>,
region_name='',
)

response = sts_client.assume_role_with_web_identity(
RoleArn=role_response['Role']['Arn'],
RoleSessionName='Bob',
DurationSeconds=3600,
WebIdentityToken=<Web Token>
)

s3client = boto3.client('s3',
aws_access_key_id = response['Credentials']['AccessKeyId'],
aws_secret_access_key = response['Credentials']['SecretAccessKey'],
aws_session_token = response['Credentials']['SessionToken'],
endpoint_url=<S3 URL>,
region_name='',)

bucket_name = 'my-bucket'
s3bucket = s3client.create_bucket(Bucket=bucket_name)
resp = s3client.list_buckets()
Copy to Clipboard Toggle word wrap

추가 리소스

  • Python의 boto 모듈 사용에 대한 자세한 내용은 Red Hat Ceph Storage Object Gateway 구성 및 관리 가이드S3 액세스 테스트 섹션을 참조하십시오.

법적 공지

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat