Как мне написать политику AWS IAM, которая предоставляет доступ на чтение всем остальным? - PullRequest
0 голосов
/ 09 ноября 2019

Я пишу политику IAM для моих работников в Kubernetes. Я хочу, чтобы у них был доступ на чтение / запись к определенному сегменту S3, нет доступа к другим сегментам S3 в моей учетной записи , но доступ на чтение к любому сегменту , который является общедоступным для чтения (например, блок s3://1000genomes/ и другие сегменты, в которых Amazon или другие люди разместили общедоступные данные).

(Предоставлен или запрещен доступ к общедоступным сегментам вмоя учетная запись не имеет значения. Если мне нужно предоставить доступ к одному, я могу сделать это явно. Но я не могу предоставить доступ к каждому общедоступному ведру в мире явно.)

Я могу написать строфуэто выглядит так, чтобы дать доступ на чтение всем контейнерам в мире:

    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::*",
        "arn:aws:s3:::*/*"
      ]
    }

Я также могу написать тот, который предоставляет доступ к конкретному именованному сегменту в моей учетной записи, к которому я хочу предоставить доступ, заполняяимя для *.

Но как мне написать политику, которая запрещает доступ к корзинам в моей учетной записи, которые не являются именованными корзинами? Или, если я выберу другой подход, как написать грант для всех групп, не входящих в мой аккаунт? Есть ли что-то, что я могу поставить между этими дополнительными двоеточиями, которые это сделают? Я пытался использовать Resource и NotResource вместе, но AWS отклоняет это.

Для справки моя политика выглядит следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::vg-k8s",
                "arn:aws:s3:::vg-k8s/*",
            ]
        }
    ]
}

С этой политикой на моемгруппа узлов, у меня нет доступа к s3://1000genomes с узлов. Чтобы получить доступ к этому сегменту конкретно, я могу изменить его на:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::vg-k8s",
                "arn:aws:s3:::vg-k8s/*",
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::1000genomes",
                "arn:aws:s3:::1000genomes/*"
            ]
        }
    ]
}

Но мне нужен способ сделать это, чтобы я охватил все публичные сегменты, не только те, которые я перечисляю, но я незакрывать непубличную корзину в моем аккаунте.

1 Ответ

0 голосов
/ 09 ноября 2019

Как мне написать политику, которая запрещает доступ к корзинам в моей учетной записи, которые не являются именованными корзинами?

Нет. Политики IAM по умолчанию запрещены.

Как предоставить доступ на чтение для любого сегмента, доступного для чтения?

Нет. Никаких дополнительных разрешений или политики для доступа к общедоступным сегментам не требуется.

Однако при доступе к общедоступным сегментам вы можете столкнуться с проблемой, и ваши запросы следует отправлять в публичные сегменты unsigned .

Чтобы взаимодействовать с общедоступной корзиной из awscli, используйте:

aws s3 ls s3://1000genomes/ --no-sign-request

Чтобы сделать то же самое с boto3, используйте:

import boto3
from botocore import UNSIGNED
from botocore.config import Config
s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))
...