我创建了一个名为" AMIRole"的新IAM角色。并且我已经附上了#AmazonS3FullAccess"对它的政策。现在我启动具有此IAM角色的EC2实例。
当我在SSH中进入实例时,我可以像这样访问AWS Access密钥和密钥:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/AMIRole
{
"Code" : "Success",
"LastUpdated" : "2016-12-21T16:05:26Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ABCDEFJK",
"SecretAccessKey" : "SECRET",
"Token" : "TOKEN",
"Expiration" : "2016-12-21T22:38:16Z"
}
但是,当我尝试使用此角色创建存储桶时,出现此AWS KEY不存在的错误。
>>> import boto3
>>> s3 = boto3.resource("s3", aws_access_key_id="ABCDEFJK", aws_secret_access_key="SECRET")
>>> s3.create_bucket(Bucket="something-specific-uuid")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/boto3/resources/factory.py", line 520, in do_action
response = action(self, *args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/boto3/resources/action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "/usr/lib/python2.7/dist-packages/botocore/client.py", line 159, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/lib/python2.7/dist-packages/botocore/client.py", line 494, in _make_api_call
raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the CreateBucket operation: The AWS Access Key Id you provided does not exist in our records.
我的目标是创建一个具有旋转访问/密钥的AMI,以便我可以将AMI放在AWS Marketplace上。
答案 0 :(得分:0)
答案 1 :(得分:0)
有关这方面的一些事情:
它附加到一个实例的角色,该实例授予它特定的资源策略和对不同内容的访问权限。 AMI在这方面无关紧要。如果您将AMI置于AWS Marketplace上,则用户将无法访问您当前正在使用的相同角色。
元数据服务返回AccessKeyId
,SecretAccessKey
和Token
。如果您尝试使用这些凭据,则必须指定所有这三个凭据,因此您必须为boto3
指定类似的内容:
import boto3
client = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN,
)
使用像boto3
这样的SDK在实例上运行代码时,您根本不需要提供凭据。如果找不到任何其他形式的凭据,boto3
将使用IAM role's credentials from the metadata service
请注意,如果您已启动配置了IAM角色的EC2实例,则无需在boto3中设置显式配置即可使用这些凭据。如果Boto3在上面列出的任何其他位置找不到凭据,它将自动使用IAM角色凭证。
因此,对于您,如果您使用boto3
直接在实例上运行代码,则只需创建boto3.resource
而无需指定访问密钥或机密。