标签: aws-access-policy

AWS 跨账户 SNS 发布

我们有两个账户 111111111111 和 222222222222。

要求 - 账户 111111111111 将每天创建 RDS 快照。拍摄快照后,我们希望账户 111111111111 发布到账户 222222222222 中创建的 SNS 主题。账户 222222222222 收到通知后,它会运行 Lambda 函数。

我已将以下策略附加到帐户 222222222222 中创建的主题

     "Sid":"RestoreRDSEng_topic_publish",
     "Effect":"Allow",
     "Principal":{
        "AWS":"111111111111"
     },
     "Action":"sns:Publish",
     "Resource":"arn:aws:sns:us-east-1:222222222222:RestoreRDSEng",
     "Condition":{
        "StringEquals":{
           "AWS:SourceAccount":"222222222222"
        },

     }
  } 
Run Code Online (Sandbox Code Playgroud)

当帐户 111111111111 尝试发布到 222222222222 时,我收到以下错误

*“message”:“AuthorizationError:用户:arn:aws:sts ::************假设角色/tf-rds_eventhandler/tf-rds_eventhandler无权执行:SNS:发布于资源:arn:aws:sns:us-east-1:xxxxxxxxxxxx:RestoreRDSEng\n\t状态代码:403,请求 ID:098f4647-c9ad-51fe-9bc3-17b45deef60e"*

问题:

  1. 这种做法有什么问题吗?

  2. 我是否应该在帐户 222222222222 中创建一个具有对 111111111111 的可信访问权限的角色?

  3. 任何其他建议将不胜感激。

amazon-web-services aws-access-policy

7
推荐指数
1
解决办法
1万
查看次数

aws:SourceAccount 和 aws:SourceOwner AWS SNS 访问策略语句有什么区别

AWS 文档提供了不同 SNS 访问控制配置的示例。

类似的配置示例还有两个:

一个允许将通知从另一个帐户的 S3 存储桶发布到 SNS 主题:

{
  "Effect": "Allow",
   "Principal": { 
    "Service": "s3.amazonaws.com" 
  },
  "Action": "sns:Publish",
  "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic",
  "Condition": {
    "StringEquals": {
      "AWS:SourceAccount": "444455556666"
    }       
  }
}
Run Code Online (Sandbox Code Playgroud)

第二允许将来自另一个帐户的 SES 电子邮件的通知发布到 SNS 主题:

{
  "Effect": "Allow",
  "Principal": {
    "Service": "ses.amazonaws.com"
  },
  "Action": "SNS:Publish",
  "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
  "Condition": {
    "StringEquals": {
      "aws:SourceOwner": "111122223333"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

区别在于第一个示例使用aws:SourceAccount,第二个示例使用aws:SourceOwner

该文档有一个专门的段落,名为“ aws:SourceAccount 与 aws:SourceOwner ”,但我仍然不清楚这两个语句之间的区别。

aws:SourceAccount您能澄清一下政策声明和政策声明之间的区别吗aws:SourceOwner

amazon-s3 amazon-web-services amazon-sns amazon-ses aws-access-policy

7
推荐指数
1
解决办法
1万
查看次数

向AWS Elasticsearch Service添加多个域访问策略(静态IP和Lambda ARN)

设置AWS Elasticsearch之后,我在静态IP服务器上安装了Logstash和Kibana代理,并在ES上添加了这个域访问策略,它运行正常:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:ap-southeast-1:323137313233:domain/sg-es-logs/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "192.192.192.192"
          ]
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

现在我需要允许Lambda函数es:ESHttpDelete在AWS ES上执行操作,因此我使用现有角色创建了该函数,service-role/Elasticsearch然后ARN从IAM Managment控制台复制了相关内容以将其添加到AWS ES访问策略,以得出:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam:: 323137313233:role/service-role/Elasticsearch"
        ]
      },
      "Action": [
        "es:*"
      ],
      "Resource": "arn:aws:es:ap-southeast-1:323137313233:domain/sg-es-logs/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

问题出在ES我应该为静态IP或ARN选择域访问策略,但不能同时选择两者.当我尝试手动合并它们而不是使用控制台时,它不起作用.我检查了AWS文档,但他们没有提到是否可能.

amazon-web-services elasticsearch aws-lambda amazon-elasticsearch aws-access-policy

5
推荐指数
1
解决办法
812
查看次数

当我在访问策略中指定主体时,消息未发送到 SQS

我有一个基础设施,SNS 主题将消息发送到 SQS(当然使用 SNS 订阅)。当我设置以下访问策略时,它起作用了。

 {
  "Version": "2012-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "SendMessagePolicy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:us-east-1:312226948869:mr-sandbox-loyalty",
      "Condition": {
        "ArnEquals": {
          "AWS:SourceArn": "arn:aws:sns:us-east-1:312226948869:mr-sandbox-transaction-created"
        }
      }
    }
  ]
} 


Run Code Online (Sandbox Code Playgroud)

但是,*我设置消息时arn:aws:iam::312226948869:root,消息不会发送到队列。我使用的帐号是312226948869。有任何想法吗?

谢谢。

更新

在网络控制台中,当我尝试将Principal: 312226949769其设置为Principal: arn:aws:iam::312226949769:root

amazon-web-services aws-access-policy

5
推荐指数
1
解决办法
2561
查看次数

无法在 Amazon (aws) 上创建/删除/发布 Lambda,出现 403 访问被拒绝

我的 aws root 帐户面临未知的问题:

当我尝试通过 aws 站点创建/删除 lambda 时,它显示 403 错误。

在此输入图像描述

几乎相同,当尝试删除之前创建的 lambdas 时:

在此输入图像描述

上次创建 lambda 是大约 2 个月前,大约一个月前我的免费套餐到期了,我收到了电子邮件。但它是如何关联的 - 不知道,一切都应该工作正常,但没有。此外,例如,我可以毫无问题地创建/删除 dynamoDB 表。我在尝试通过 Visual Studio 2019 发布时收到相同的 403,因此无法更新那里的代码。

另外,我的 AWS 个人健康仪表板没有显示任何异常情况。您能否帮助了解问题出在哪里,因为我无法联系 AWS 支持来解决技术主题 - 基本空白限制或类似的问题(awhhhhh)。

amazon-web-services visual-studio aws-lambda aws-access-policy

5
推荐指数
1
解决办法
1502
查看次数

Boto3:如何承担 IAM 角色来访问其他帐户

寻找有关通过 python 脚本和 IAM 角色将文件上传到 AWS S3 存储桶的一些指导。我可以使用 BOTO3 和其他脚本的aws_access_key_id&上传文件。aws_secret_access_key

但是,我现在已获得 IAM 角色来登录某个帐户。我使用 AWS CLI 来验证和查询 S3 数据没有任何问题,因此我相信我的文件.aws/credential.aws/config文件是正确的。但是我不确定如何在 python 代码中使用 ARN 值。

这是我到目前为止整理的内容,但出现了各种错误,这些错误都导致访问被拒绝:

session = boto3.Session(profile_name='randomName')
session.client('sts').get_caller_identity()

assumed_role_session = boto3.Session(profile_name='randomNameAccount')
print(assumed_role_session.client('sts').get_caller_identity())

credentials = session.get_credentials()
aws_access_key_id = credentials.access_key
aws_secret_access_key = credentials.secret_key

s3 = boto3.client('s3',
                  aws_access_key_id=aws_access_key_id,
                  aws_secret_access_key=aws_secret_access_key)

bucket_name = 'bucketName'

Run Code Online (Sandbox Code Playgroud)

这是我的凭据和配置文件的示例,作为参考。

.aws/config文件:

[profile randomNameAccount]
role_arn = arn:aws:iam::12345678910:role/roleName
source_profile = randomName
Run Code Online (Sandbox Code Playgroud)

aws/credentials文件:

[randomName]
aws_access_key_id = 12345678910
aws_secret_access_key = 1234567-abcdefghijk
Run Code Online (Sandbox Code Playgroud)

我的问题是帮助 python 代码能够针对 AWS 进行身份验证并使用 …

python amazon-s3 amazon-web-services aws-access-policy

3
推荐指数
1
解决办法
1万
查看次数

签名 URL 出现 CloudFront“MalformedPolicy”错误

我需要使用 PHP 使用自定义策略创建签名的 CloudFront URL,但无论我做什么,显然我的策略都是“格式错误”。以下是该函数中生成的策略示例:

{"Statement":{"Resource":"https://d15xojelh58w5d.cloudfront.net/memo/kwz/cvyhkfdqn5oz0z1dz5at4z4s1jsn.kwz","Condition":{"DateLessThan":{"AWS:EpochTime":1490463203},"IpAddress":{"AWS:SourceIp":"1.2.3.4/32"}}}}
Run Code Online (Sandbox Code Playgroud)

生成的网址:

https://d15xojelh58w5d.cloudfront.net/memo/kwz/cvyhkfdqn5oz0z1dz5at4z4s1jsn.kwz?Policy=eyJTdGF0ZW1lbnQiOnsiUmVzb3VyY2UiOiJodHRwczovL2QxNXhvamVsaDU4dzVkLmNsb3VkZnJvbnQubmV0L21lbW8va3d6L2N2eWhrZmRxbjVvejB6MWR6NWF0NHo0czFqc24ua3d6IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNDkwNDYzMjAzfSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI6IjEuMi4zLjQvMzIifX19fQ__&Signature=MmBPtpipFLuNwaPliGLJajG4gJ7INwD0ptFdxPFYQP9CT-luq6W0SrAs9O9CqbJPHoukXwDzG~c88Rr5I2I9KP5QwD8MHpogGh~3SM3gBYm8ao0Zm7a5C9tWnBVRCtzuGrCrFstK-qLswWmqo6tNiOynSuFpvm9uDe3C8oWE2RzSZavEXoL35D3F8y98NeM0aOJe37EeSpdz3lrZZxei2TugoO-OmnApXa2YYJR2HiQ2l0t8paxcb3xyhCK1c1AR51uOpWLm63k~d0eNZJGo3x0Y6bx0GBqafdvV6jiUv6PbhiMC1ZcTxGnZhLmsz3~ONsEvaR1jyyOPt6y9Nos8yA__&Key-Pair-Id=APKAJ6RV6ACUX5M5IAOQ
Run Code Online (Sandbox Code Playgroud)

代码:

function cloudfront_sign($url, $expiry = null, $ipLock = true) {
    $policy = array(
        'Statement' => array(
            'Resource' => $url,
            'Condition' => array(),
        ),
    );

    if(!$expiry || $expiry <= time()) $expiry = 2147483647; // CloudFront *requires* an expiry date, so set to 03:14:07 UTC on Tuesday, 19 January 2038 if one is not provided
    $policy['Statement']['Condition']['DateLessThan'] = array('AWS:EpochTime' => $expiry);
    if($ipLock) $policy['Statement']['Condition']['IpAddress'] = array('AWS:SourceIp' => $_SERVER['REMOTE_ADDR'].'/32');

    $signer = new Aws\CloudFront\UrlSigner($_config['keyID'], $_config['keyPath']);

    $jsonPolicy = json_encode($policy, …
Run Code Online (Sandbox Code Playgroud)

php amazon-cloudfront aws-sdk aws-access-policy

1
推荐指数
1
解决办法
1409
查看次数