Мне нужно создать политику на основе ресурсов, перейдя по ссылке ниже.Поэтому я использовал 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)