Как мне создать политику на основе ресурсов? - PullRequest
1 голос
/ 26 сентября 2019

Мне нужно создать политику на основе ресурсов, перейдя по ссылке ниже.Поэтому я использовал boto3 для достижения этой цели.

https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-configuring-cloudwatch-logs.html

Ниже приведен скрипт на python.

import boto3, json
from assume_role import credentials

if __name__ == "__main__":
    credentials = credentials("AssumeRoleSessionEBSEncryption")

iam = boto3.client(
        'iam',
        region_name='eu-central-1',
        aws_access_key_id=credentials['AccessKeyId'],
        aws_secret_access_key=credentials['SecretAccessKey'],
        aws_session_token=credentials['SessionToken'],
    )
my_managed_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "mq.amazonaws.com"
                ]
            },
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/amazonmq/*"
        }
    ]
}
    response = iam.create_policy(
        PolicyName='MQPolicy',
        PolicyDocument=json.dumps(my_managed_policy)
    )
    print(response)

Я получаю ошибку ниже после выполнения скрипта.Пожалуйста, предложите.

Traceback (most recent call last):
  File "mq_iam_policy.py", line 32, in <module>
    PolicyDocument=json.dumps(my_managed_policy)
  File "/home/ec2-user/workspace/scripts/venv/lib64/python3.7/site-packages/boto3/resources/factory.py", line 520, in do_action
    response = action(self, *args, **kwargs)
  File "/home/ec2-user/workspace/scripts/venv/lib64/python3.7/site-packages/boto3/resources/action.py", line 83, in __call__
    response = getattr(parent.meta.client, operation_name)(**params)
  File "/home/ec2-user/workspace/scripts/venv/lib64/python3.7/site-packages/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/home/ec2-user/workspace/scripts/venv/lib64/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.MalformedPolicyDocumentException: An error occurred (MalformedPolicyDocument) when calling the CreatePolicy operation: Policy document should not specify a principal.
[

Окончательный ответ: -

import boto3, json
import os
from assume_role import get_temporary_credentials

AWS_ACCOUNT_ID = os.environ['AWS_ACCOUNT_ID']
AWS_ROLE = os.environ['AWS_ROLE']

if __name__ == "__main__":
    credentials = get_temporary_credentials("AssumeRoleSessionEBSEncryption")
    client = boto3.client(
        'logs',
        region_name='eu-central-1',
        aws_access_key_id=credentials['AccessKeyId'],
        aws_secret_access_key=credentials['SecretAccessKey'],
        aws_session_token=credentials['SessionToken'],
    )
    response = client.put_resource_policy(
        policyName='MQPolicy',
        policyDocument='{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "mq.amazonaws.com" }, "Action":[ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource" : "arn:aws:logs:*:*:log-group:/aws/amazonmq/*" } ] }'
    )
    print(response)

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Amazon MQ не поддерживает политику на основе ресурсов, как описано в следующей статье AWS:

Amazon MQ - Работа с IAM

Кроме того, согласно документации AWS дляДля настройки политики на основе ресурсов для Amazon MQ используйте операцию put_resource_policy сервисов AWS CloudWatchLogs.

Ссылки:

Настройка политики на основе ресурсов для Amazon MQ

Документация Boto3 для CloudWatchLogs put_resource_policy

AWS CLI Пример:

aws --region us-east-1 logs put-resource-policy --policy-name AmazonMQ-logs \
        --policy-document '{ "Version": "2012-10-17", "Statement": [ { 
        "Effect": "Allow", "Principal": { "Service": "mq.amazonaws.com" }, 
        "Action":[ "logs:CreateLogStream", "logs:PutLogEvents" ],
        "Resource" : "arn:aws:logs:*:*:log-group:/aws/amazonmq/*" } ] }'
1 голос
/ 26 сентября 2019

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

. Чтобы использовать принципал, политика должна основываться на ресурсах.

Политики на основе ресурсов - Вы можете прикрепить ресурс-политики на основе ресурса в службе.Политики на основе ресурсов включают основной элемент , чтобы указать, какие удостоверения IAM могут получить доступ к этому ресурсу.Для получения дополнительной информации см. Политики на основе идентификаторов и Политики на основе ресурсов.

Однако MQ не поддерживает политику на основе ресурсов, как указано в документе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...