Инструменты пользователя

Инструменты сайта


www:aws-s3-iam

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

www:aws-s3-iam [2015/01/02 20:45] (текущий)
Строка 1: Строка 1:
 +====== Знакомство с AWS IAM ======
  
 +
 +===== Введение =====
 +Для хранения снимков экрана,​ на данный момент мы используем [[http://​monosnap.com/​welcome|monosnap]]),​ и последующего предоставления клиентам мы используем [[http://​aws.amazon.com/​s3/​|Amazon S3]].  Возникла,​ казалось бы, тривиальная задача - разграничить доступ к S3 хранилищу. Так как на момент написания статьи использовалась учетная запись с т.н. full access правами. Т.е. в любой момент времени пользователь мог удалить все данные,​ что нас конечно не устраивало. Но не все так просто,​ доступа к консоли AWS не было, а были доступны лишь Access Key Id и Secret Access Key. Но так как это была учетная запись с полными правами этого было достаточно. Итак, у нас есть 3 бакета и необходимо создать 3х пользователей и дать им права на запись в соответствующий бакет, но при этом они не должны иметь право что-либо удалять в своем бакете. Реализиовать данную задачу как раз и поможет [[http://​docs.aws.amazon.com/​IAM/​latest/​UserGuide/​IAM_Introduction.html|IAM]] - **I**dentity and **A**ccess **M**anagement.
 +
 +
 +===== Подготовка системы =====
 +Итак в нашем распоряжении CentOS 6 со всеми установленными обновлениями и подключенными репозитариями [[https://​fedoraproject.org/​wiki/​EPEL|EPEL]]/​[[http://​repoforge.org/​|RPMForge]]/​[[https://​iuscommunity.org/​pages/​About.html|IUS Community]]
 +<cli>
 +# cat /​etc/​redhat-release
 +CentOS release 6.6 (Final)
 +
 +# uname -a
 +Linux staging.example.net 2.6.32-504.3.3.el6.x86_64 #1 SMP Wed Dec 17 01:55:02 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
 +</​cli>​
 +
 +
 +===== Установка и настройка aws cli =====
 +Устанавливаем aws cli
 +<cli>
 +# yum install python-pip python-devel gcc
 +</​cli>​
 +
 +В принципе gcc не обязательно ставить,​ но при его наличие,​ будут собираться модули,​ обеспечивающие ускорение работы.
 +<cli>
 +# pip install awscli
 +Downloading/​unpacking awscli
 +  Downloading awscli-1.6.10.tar.gz (282kB): 282kB downloaded
 +  Running setup.py egg_info for package awscli
 +Downloading/​unpacking botocore>​=0.80.0,<​0.81.0 (from awscli)
 +  Downloading botocore-0.80.0.tar.gz (1.2MB): 1.2MB downloaded
 +  Running setup.py egg_info for package botocore
 +...
 +...
 +...
 +  Running setup.py install for six
 +    no previously-included directories found matching '​documentation/​_build'​
 +  Running setup.py install for pyasn1
 +Successfully installed awscli botocore bcdoc colorama docutils rsa argparse jmespath python-dateutil ordereddict simplejson six pyasn1
 +Cleaning up...
 +</​cli>​
 +
 +Проверяем,​ что консоль установилась
 +<cli>
 +# aws --version
 +aws-cli/​1.6.10 Python/​2.6.6 Linux/​2.6.32-504.3.3.el6.x86_64
 +</​cli>​
 +
 +Производим настройку данных,​ вводим имеющиеся у нас Access Key Id и Secret Access Key. 
 +<cli>
 +# aws configure
 +AWS Access Key ID [None]: ICAMLORKAKIAJMHSTVUH
 +AWS Secret Access Key [None]: GsIS4ZSBNUllBEedAT8Qqb+SYCK0sChMaX66dQ8d
 +Default region name [None]:
 +Default output format [None]:
 +</​cli>​
 +
 +После выполнения этой команды в домашней папке пользователя должен появиться следующий файл
 +<cli>
 +# cat ~/​.aws/​credentials
 +[default]
 +aws_access_key_id = ICAMLORKAKIAJMHSTVUH
 +aws_secret_access_key = GsIS4ZSBNUllBEedAT8Qqb+SYCK0sChMaX66dQ8d
 +</​cli>​
 +
 +Проверяем,​ что все работает корректно. Выводим список доступных бакетов
 +<cli>
 +# aws s3 ls
 +2015-01-02 08:49:56 alpha01
 +2015-01-02 08:50:20 omega02
 +2015-01-02 08:52:25 sigma03
 +</​cli>​
 +
 +
 +
 +===== Создание IAM пользователей =====
 +Итак, на данный момент в нашем распоряжении всего один пользователь - root, с полными правами
 +
 +<cli>
 +# aws iam list-users
 +{
 +    "​Users":​ [
 +        {
 +            "​UserName":​ "​root",​
 +            "​Path":​ "/",​
 +            "​CreateDate":​ "​2014-12-03T09:​27:​58Z",​
 +            "​UserId":​ "​AIDASOCRCJSKGU6VIDAQF",​
 +            "​Arn":​ "​arn:​aws:​iam::​911345934031:​user/​root"​
 +        }
 +    ]
 +}
 +</​cli>​
 +
 +Создаем 3х пользователей для каждого из бакетов
 +
 +<cli>
 +# aws iam create-user --user-name scrnshots-alpha
 +{
 +    "​User":​ {
 +        "​UserName":​ "​scrnshots-alpha",​
 +        "​Path":​ "/",​
 +        "​CreateDate":​ "​2015-01-02T16:​05:​18.899Z",​
 +        "​UserId":​ "​AIDAIEIRMQH6HKQ4I5PPA",​
 +        "​Arn":​ "​arn:​aws:​iam::​934091134531:​user/​scrnshots-alpha"​
 +    }
 +}
 +</​cli>​
 +
 +<cli>
 +# aws iam create-user --user-name scrnshots-omega
 +{
 +    "​User":​ {
 +        "​UserName":​ "​scrnshots-omega",​
 +        "​Path":​ "/",​
 +        "​CreateDate":​ "​2015-01-02T16:​05:​24.496Z",​
 +        "​UserId":​ "​AIDAIDQCAINOCVH5DEQKI",​
 +        "​Arn":​ "​arn:​aws:​iam::​934091134531:​user/​scrnshots-omega"​
 +    }
 +}
 +</​cli>​
 +
 +<cli>
 +# aws iam create-user --user-name scrnshots-sigma
 +{
 +    "​User":​ {
 +        "​UserName":​ "​scrnshots-sigma",​
 +        "​Path":​ "/",​
 +        "​CreateDate":​ "​2015-01-02T16:​05:​34.284Z",​
 +        "​UserId":​ "​AIDAJCSMV2RO52DR6GBO2",​
 +        "​Arn":​ "​arn:​aws:​iam::​934091134531:​user/​scrnshots-sigma"​
 +    }
 +}
 +</​cli>​
 +
 +Создаем для каждого из пользователей Secret Access Key и Access Key Id
 +<cli>
 +# aws iam create-access-key --user-name scrnshots-alpha
 +{
 +    "​AccessKey":​ {
 +        "​UserName":​ "​scrnshots-alpha",​
 +        "​Status":​ "​Active",​
 +        "​CreateDate":​ "​2015-01-02T16:​09:​09.602Z",​
 +        "​SecretAccessKey":​ "​eLCXqSZNkVtW/​qfibBLd+9wZAKFnzJ7NeY7/​8+LL",​
 +        "​AccessKeyId":​ "​AKIAJY24GFHCXM3CTLAJ"​
 +    }
 +}
 +</​cli>​
 +
 +<cli>
 +# aws iam create-access-key --user-name scrnshots-omega
 +{
 +    "​AccessKey":​ {
 +        "​UserName":​ "​scrnshots-omega",​
 +        "​Status":​ "​Active",​
 +        "​CreateDate":​ "​2015-01-02T16:​09:​38.630Z",​
 +        "​SecretAccessKey":​ "​vyAwcMLS0LwU0Mmy9m0war1LPiJ3xhU1SCzkpp0D",​
 +        "​AccessKeyId":​ "​AKIAIUQE5XIXV4OQPKQH"​
 +    }
 +}
 +</​cli>​
 +
 +<cli>
 +# aws iam create-access-key --user-name scrnshots-sigma
 +{
 +    "​AccessKey":​ {
 +        "​UserName":​ "​scrnshots-sigma",​
 +        "​Status":​ "​Active",​
 +        "​CreateDate":​ "​2015-01-02T16:​09:​42.854Z",​
 +        "​SecretAccessKey":​ "​g4kl7ZsGSfz1jVdNKuQEJca0rYzGw3ifuzUAkOeG",​
 +        "​AccessKeyId":​ "​AKIAIH7QSYK2TRKMEQJN"​
 +    }
 +}
 +</​cli>​
 +
 +<​note>​Обратите внимение,​ что SecretAccessKey будет недоступен в консоли AWS, так что его необходимо обязательно сохранить!</​note>​
 +
 +
 +===== Создание IAM политик =====
 +Теперь когда у нас есть пользователи можно назначить им политику. Для этого подготавливаем текстовый файл в json формате и присоединяем политику соответствующему пользователю. Как я уже говорил в начале статьи,​ нам необходимо дать возможность загружать и просматривать файлы в своем бакете,​ но при этом у пользователя не должно быть возможности просматривать данные из чужих бакетов,​ а так же удалять файлы из своего бакета.
 +
 +<cli>
 +# cat ~/​aws/​alpha01-policy.json
 +{
 +    "​Statement": ​
 +    [
 +        {
 +             "​Action":​ ["​s3:​ListAllMyBuckets",​ "​s3:​GetBucketLocation"​],​
 +             "​Resource":​ "​arn:​aws:​s3:::​*",​
 +             "​Effect":​ "​Allow"​
 +        },
 +        {
 +             "​Action":​ ["​s3:​ListBucket",​ "​s3:​GetBucketAcl"​],​
 +             "​Resource":​ "​arn:​aws:​s3:::​*",​
 +             "​Effect":​ "​Allow"​
 +        },
 +        {
 +             "​Action":​ ["​s3:​Put*",​ "​s3:​Get*"​],​
 +             "​Resource":​ "​arn:​aws:​s3:::​alpha01/​*",​
 +             "​Effect":​ "​Allow"​
 +        },
 +        {
 +             "​Action":​ "​s3:​Del*",​
 +             "​Resource":​ "​arn:​aws:​s3:::​*/​*",​
 +             "​Effect":​ "​Deny"​
 +        }
 +    ]
 +}
 +</​cli>​
 +
 +При создании IAM политик для S3 следует учитывать отличие следующих объектов:​
 +
 +  * действия с сервисами,​ например **ListAllMyBuckets**
 +  * действия с бакетами,​ например **ListBucket**
 +  * действия с объектами,​ например **GetObject**
 +
 +Поэтому при описании политик следует учитывать следующие моменты:​
 +
 +  * действия с сервисами - **arn:​aws:​s3:::​***
 +  * действия с бакетами - **arn:​aws:​s3:::<​bucket>​**
 +  * действия с объектами - **arn:​aws:​s3:::<​bucket>/<​object>​**
 +
 +Теперь подключаем политику к пользователю
 +<cli>
 +# aws iam put-user-policy --user-name scrnshots-alpha --policy-name ALPHA01-POLICY --policy-document file://​~/​aws/​alpha01-policy.json
 +</​cli>​
 +
 +Если все прошло успешно,​ то не будет никакого вывода. Теперь проверим,​ что у пользователя есть политика
 +<cli>
 +# aws iam list-user-policies --user-name scrnshots-alpha
 +{
 +    "​PolicyNames":​ [
 +        "​ALPHA01-POLICY"​
 +    ]
 +}
 +</​cli>​
 +
 +По аналогии подключаем политики и для 2х других пользователей
 +
 +<cli>
 +# aws iam put-user-policy --user-name scrnshots-omega --policy-name OMEGA02-POLICY --policy-document file://​~/​aws/​omega02-policy.json
 +</​cli>​
 +
 +<cli>
 +# aws iam put-user-policy --user-name scrnshots-sigma --policy-name SIGMA03-POLICY --policy-document file://​~/​aws/​sigma03-policy.json
 +</​cli>​
 +
 +
 +
 +===== Настройка monosnap =====
 +Настройка тривиальная,​ и сводится к указанию Access Key Id, Secret Access Key, Bucket.
 +
 +{{ :​www:​monosnap-s3-settings.png | Monosnap settings}}
www/aws-s3-iam.txt · Последние изменения: 2015/01/02 20:45 (внешнее изменение)