분석계에서 데이터 당겨서 갈때, readonly로 주고 싶었음
secondary 만들어서 주는게 정석이지만, 과한 것 같아
radosgw + subuser + s3 policy로 구현함
요약
1. 상황
- readonly 계정이 필요함
- multi-site로 설정하기에는 너무 과함
2. 적용
- radosgw + subuser + s3 policy로 구현함
설명
1. 상황
- readonly 계정이 필요함
- multi-site로 설정하기에는 너무 과함
If the secondary zone needs to be a read-only configuration, update the secondary zone. # radosgw-admin zone modify --rgw-zone={zone-name} --read-only
https://docs.ceph.com/en/quincy/radosgw/multisite/#:~:text=The%20Ceph%20Object%20Gateway%20supports%20multi%2Dsite%20deployments%20and%20a,within%20one%20or%20more%20zones. |
2. 적용
그래서 다른 방법을 찾음
2-1. radosgw-admin로 user + bucket 연결
- radowgw-admin command로 으로 user, subuser를 생성 후 bucket에 할당함
- user 생성 및 bucket 할당
먼저 bucket과 user의 관계를 이해해야함
아래 커맨드는 bucket을 만들고 owner를 할당하는 작업인데
bucket:user=1:1 로 생각하면 편함
#user 생성
$ radosgw-admin user create --uid=hgkim \
--display-name="hgkim" \
--access-key=test-key \
--secret-key=test-key
$ radosgw-admin user info --uid=hgkim | grep access_key -a3
"keys": [
{
"user": "hgkim",
"access_key": "test-key",
"secret_key": "test-key"
}
],
#bucket에 user의 key 연결
$ radosgw-admin bucket link --uid=hgkim --bucket=sample
$ radosgw-admin bucket stats --bucket=sample | grep owner
"owner": "hgkim",
readonly를 줘야할 계정을 새로 만들어야하는데 bucket과 user는 1:1 관계라 모순이 생김
그래서 subuser를 생성하고 및 bucket 할당함 (bucket:subuser 1:N)
2-2. radosgw-admin로 subuser 만들기
subuser는 아래와 같음
hgkim ㄴ hgkim:bob -> bucket link하고 readonly 설정할 사용자 |
$ radosgw-admin key create --uid=hgkim \
--subuser=bob \
--key-type=s3 \
--access-key=test-key2 \
--secret-key=test-key2
# hgkim sample bucket에 할당, subuser도 함께 할당
$ radosgw-admin user info --uid=hgkim | grep access_key -a3
"keys": [
{
"user": "hgkim",
"access_key": "test-key",
"secret_key": "test-key"
},
{
"user": "hgkim:bob",
"access_key": "test-key2",
"secret_key": "test-key2"
}
],
2-3. S3-policy 로 readonly 주기
subuser bob은 hgkim과 동일한 권한을 가진 상태에서 s3 policy로 권한을 줌
아직은 role, group 이 안되서 그냥 s3 policy를 줘야함
공식문서에서 s3 policy를 사용하라고 함
아래는 공식 문서에서 주는 예시
# CREATION AND REMOVAL
# Bucket policies are managed through standard S3 operations rather than radosgw-admin.
# For example, one may use s3cmd to set or delete a policy thus:
$ cat > examplepol
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam::usfolks:user/fred:subuser"]},
"Action": "s3:PutObjectAcl",
"Resource": [
"arn:aws:s3:::happybucket/*"
]
}]
}
$ s3cmd setpolicy examplepol s3://happybucket
$ s3cmd delpolicy s3://happybucket
참고 : https://docs.ceph.com/en/latest/radosgw/bucketpolicy/
mc로 해도 되는데, s3 browser가 깔려있어서 window에서 설정함
2가지 커넥션을 맺음
|
owner 계정에서 sample bucket을 > edit Policy
|
실제 적용 json은 아래와 같음
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CephReadOnly",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam:::user/hgkim:bob"
]
},
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetBucketAcl"
],
"Resource": [
"arn:aws:s3:::sample",
"arn:aws:s3:::sample/*"
]
}
]
}
테스트
테스트해보면 아래와 같음
- read, download -> 잘됨
- upload, delete -> 안됨
- X (Failed-AccessDenied: 원격 서버에서 (403) 사용할 수 없음 오류를 반환햇습니다.
aws 를 거의 사용안해봐서 정확한지는 잘모르겠다.
하지만 내가 사용하는 ceph안에서는 충분함
readonly임을 확인할 수 있다.
참고
https://stackoverflow.com/questions/67421974/read-only-users-list-all-the-buckets-i-have-read-rights-to
https://stackoverflow.com/questions/64586216/how-do-ceph-s3-user-and-subuser-permissions-work-together
'Storage > Ceph' 카테고리의 다른 글
Ceph) k8s_rook-ceph_osd 제거하기 (0) | 2022.08.23 |
---|---|
ceph)mc cp로 클러스터간 데이터 옮기기 (0) | 2022.05.31 |
Ceph) ceph-dashboard object-storage ui 보이게 설정 (0) | 2022.04.21 |
Ceph)rgw instance 늘리기_ephemeral storage (0) | 2022.04.04 |
Ceph)osd resource limit 설정_계산공식 (0) | 2022.04.04 |