2017-03-21 27 views
2

私のスクリプトのこのステップがうまくいかない理由を理解しようとしています。私の知る限り、私のユーザーはAWSアカウントのすべてを実行する権限を持っています。あなたが自分でやる必要のある仕事のための正しいアクセス権を正確に把握するのではなく、ボトコアまたはboto3自体からあなたのユーザーのiamの権限が不足していることを確認する方法があるかどうか疑問に思っていましたか? 、私は前にこれらの問題に見ていただboto3がAccessDeniedを提供していますが、不足している権限を検索する方法はありますか?

>>> zone_id = "Z2401337RNHANU" 
>>> 
>>> try: 
... 
An error occurred (InvalidInput) when calling the ChangeResourceRecordSets operation: Invalid request 
{'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 400, 'RequestId': '2bfde962-0e81-11e7-b312-53961dec3e91', 'HTTPHeaders': {'x-amzn-requestid': '2bfde962-0e81-11e7-b312-53961dec3e91', 'date': 'Tue, 21 Mar 2017 21:56:00 GMT', 'content-length': '259', 'content-type': 'text/xml', 'connection': 'close'}}, 'Error': {'Message': 'Invalid request', 'Code': 'InvalidInput', 'Type': 'Sender'}} 

は当初、私は私が私たちのAWSドメインのゾーンにZONE_ID変更した場合は、私が取得from here

>>> dns_record = connection.change_resource_record_sets(
...  HostedZoneId=zone_id, 
...  ChangeBatch={ 
...   'Changes': [ 
...    { 
...     'Action': action, 
...     'ResourceRecordSet': { 
...      'Name': name, 
...      'Type': record_type, 
...      'TTL': 60, 
...      'AliasTarget': { 
...       'HostedZoneId': zone_id, 
...       'DNSName': destination, 
...       'EvaluateTargetHealth': eval_health 
...      }, 
...     } 
...    }, 
...   ] 
...  } 
...) 

Traceback (most recent call last): 
    File "<stdin>", line 14, in <module> 
    File "/usr/lib/python2.7/site-packages/botocore/client.py", line 253, in _api_call 
    return self._make_api_call(operation_name, kwargs) 
    File "/usr/lib/python2.7/site-packages/botocore/client.py", line 543, in _make_api_call 
    raise error_class(parsed_response, operation_name) 
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ChangeResourceRecordSets operation: User: arn:aws:iam::1337:user/rumbles is not authorized to access this resource 
>>> 
>>> print connection, zone_id, action, name, record_type, destination, eval_health 
<botocore.client.Route53 object at 0x7f9049d64590> Z117KPS5GTRQ2G UPSERT test-rumbles.domain.com A some-elb-1337.us-east-1.elb.amazonaws.com False 

を構成しZONE_IDていました私は、この特定の仕事のためにIAMの許可を得なければならないことを知っていますが(私が正しい道にいると仮定して)、ボトコアからこの情報を返す方法があるのだろうか?私の時間を手動で調べるのではなく、どういうわけか私が返すアクセスを拒否するiamルールを得ることはできませんか?

または、私がまだ見つけていない/作成していない機能要求について話していますか?

+0

のZONE_IDあなたは通常、コンソールがどのような権限を返します、AWSコンソールから同じことを行う試すことができます。この

dns_record = connection.change_resource_record_sets( HostedZoneId=my_url_zone_id, ChangeBatch={ 'Changes': [ { 'Action': action, 'ResourceRecordSet': { 'Name': name, 'Type': record_type, 'AliasTarget': { 'HostedZoneId': elb_zone_id, 'DNSName': destination, 'EvaluateTargetHealth': eval_health }, } }, ] } 

どこelb_zone_id = ELBのZONE_IDと ように必要です。 – mootmoot

+0

私のユーザ(同じユーザ)はAWSコンソールで何でもできます – Rumbles

+0

root/adminを使って作業を行っているのですか、その特定のユーザとしてログインしていますか? – mootmoot

答えて

2

あなたの答えは無効なゾーンIDから来ています - HostedZoneId = ""の最初のboto3呼び出しはあなたのurlのホストゾーンIDでなければならず、2番目はエイリアスターゲットのホストゾーンIDを参照しています。

Amazon所有のURLのレコードを変更しようとすると、アクセスが拒否されます。

HostedZoneId HostedZoneId(文字列)の第一の基準

http://boto3.readthedocs.io/en/latest/reference/services/route53.html#Route53.Client.change_resource_record_setsドキュメントから - あなたが変更したいリソースレコードセットが含まれているホストされたゾーンのID

[必須] 。 HostedZoneIdの

第二の基準 - AliasTargetにネスト

-HostedZoneId(文字列) - [必須] エイリアスリソースレコードにのみ設定されます。使用される値は、あなたがトラフィックをルーティングする場所によって異なります。 ELBの負荷をバランサ ロードバランサのホストゾーンIDの値を指定します。

Amazon Web Services General Referenceの「AWS Regions and Endpoints」の章のElastic Load Balancingテーブル:「Amazon Route 53 Hosted Zone ID」列の値を使用してくださいロードバランサを作成した地域に対応します。 AWS管理コンソール:Amazon EC2ページに移動し、ナビゲーションペインで[ロードバランサ]をクリックし、ロードバランサを選択して[説明]フィールドの[ホストゾーン]フィールドの値を取得しますタブ。 弾性負荷分散API:DescribeLoadBalancersを使用して、CanonicalHostedZoneNameIdの値を取得します。詳細については、適用ガイドを参照してください。 クラシックロードバランサ:DescribeLoadBalancers アプリケーションロードバランサ:DescribeLoadBalancers AWS CLI:describe-load-balancersを使用してCanonicalHostedZoneNameIDの値を取得します。 静的Webサイトとして設定されたAmazon S3バケット

バケットを作成した地域のホストゾーンIDを指定します。有効な値の詳細については、「AWS Regions」のAmazon Simple Storage Service Webサイトエンドポイントの表を参照してください。 Amazon Web Services General Referenceの「Endpoints」の章を参照してください。

あなたの第二の問題 -

それをsplitingしてみてください...それは今あなたのURLでAWS所有URLを探している - 今、あなたの最初のZONE_IDが正しいことを - 400は、再び同じことZONE_IDから来ていますmy_url_zone_id =特定のURL

関連する問題