EC2 实例中的访问密钥不存在
Access key in EC2 instance does not exist
我创建了一个名为 "AMIRole" 的新 IAM 角色,并为其附加了 "AmazonS3FullAccess" 策略。现在我使用这个 IAM 角色启动一个 EC2 实例。
当我通过 SSH 连接到实例时,我可以像这样访问 AWS 访问密钥和秘密密钥:
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.
我的目标是创建一个具有轮换 Access/secret 密钥的 AMI,以便我可以将 AMI 放在 AWS Marketplace 上。
- 您不应该在线发布访问密钥和秘密密钥。
- 您不应该获取访问密钥并以这种方式使用它。只需使用 Boto3(或任何其他 AWS SDK,或 AWS CLI)而不指定任何 access/secret 键,它将自动使用分配给它所在的 EC2 实例的 IAM 角色 运行。
关于这件事的一些事情:
这是附加到实例的角色,授予它特定的资源策略和对不同事物的访问权限。 AMI 在这方面无关紧要。如果您将 AMI 放到 AWS Marketplace 上,用户将无法访问您当前使用的相同角色。
元数据服务 returns 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
Note that if you've launched an EC2 instance with an IAM role configured, there's no explicit configuration you need to set in boto3 to use these credentials. Boto3 will automatically use IAM role credentials if it does not find credentials in any of the other places listed above.
所以对您来说,如果您使用 boto3
直接在实例上 运行 编写代码,您可以直接创建 boto3.resource
而无需指定访问密钥或机密。
我创建了一个名为 "AMIRole" 的新 IAM 角色,并为其附加了 "AmazonS3FullAccess" 策略。现在我使用这个 IAM 角色启动一个 EC2 实例。
当我通过 SSH 连接到实例时,我可以像这样访问 AWS 访问密钥和秘密密钥:
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.
我的目标是创建一个具有轮换 Access/secret 密钥的 AMI,以便我可以将 AMI 放在 AWS Marketplace 上。
- 您不应该在线发布访问密钥和秘密密钥。
- 您不应该获取访问密钥并以这种方式使用它。只需使用 Boto3(或任何其他 AWS SDK,或 AWS CLI)而不指定任何 access/secret 键,它将自动使用分配给它所在的 EC2 实例的 IAM 角色 运行。
关于这件事的一些事情:
这是附加到实例的角色,授予它特定的资源策略和对不同事物的访问权限。 AMI 在这方面无关紧要。如果您将 AMI 放到 AWS Marketplace 上,用户将无法访问您当前使用的相同角色。
元数据服务 returns
指定类似的内容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 serviceNote that if you've launched an EC2 instance with an IAM role configured, there's no explicit configuration you need to set in boto3 to use these credentials. Boto3 will automatically use IAM role credentials if it does not find credentials in any of the other places listed above.
所以对您来说,如果您使用
boto3
直接在实例上 运行 编写代码,您可以直接创建boto3.resource
而无需指定访问密钥或机密。