'데이터 엔지니어'로 성장하기

정리하는 걸 좋아하고, 남이 읽으면 더 좋아함

Storage/Ceph

Ceph) readonly 계정 만들기_radosgw,subuser,s3 policy

MightyTedKim 2022. 4. 25. 18:07
728x90
반응형

분석계에서 데이터 당겨서 갈때, 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가지 커넥션을 맺음

  • sample bucket의 owner
    • hgkim 계정 -> endpoint + test-key + test-key
  • sample bucket의 subuser
    • bob 계정 -> endpoint + test-key2 + test-key2

 

owner 계정에서 sample bucket을 > edit Policy

  • Action
    • 필수 : "s3:ListBucket", "s3:GetObjectAcl", "s3:GetBucketAcl"
    • 읽기 : "s3:GetObject 
  • Principal
    • hgkim:bob 
  • Resource
    • sample
      sample/*

실제 적용 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

728x90
반응형